Я запускаю свою оболочку script на machineA
, которая копирует файлы из machineB
и machineC
в machineA
.
Если файл отсутствует в machineB
, то он должен быть в machineC
для уверенности. Поэтому сначала я попытаюсь скопировать из machineB
, если его нет в machineB
, тогда я перейду к machineC
, чтобы скопировать те же файлы.
В machineB
и machineC
в этой папке будет такая папка YYYYMMDD
-
/data/pe_t1_snapshot
Итак, какая бы дата не была последней датой в этом формате YYYYMMDD
внутри указанной выше папки - я выберу эту папку в качестве полного пути, откуда мне нужно начать копирование файлов -
так что предположим, что это последняя папка даты 20140317
внутри /data/pe_t1_snapshot
, тогда это будет полный путь для меня -
/data/pe_t1_snapshot/20140317
откуда мне нужно начать копирование файлов в machineB
и machineC
. Мне нужно скопировать файлы 400
в machineA
из machineB
и machineC
, и каждый размер файла 1.5 GB
.
В настоящее время у меня есть моя ниже оболочка script, которая отлично работает, когда я использую scp
, но почему-то требуется ~ 2 hours
, чтобы скопировать файлы 400
в machineA, который слишком длинный для меня, я думаю.: (
Ниже моя оболочка script -
#!/bin/bash
readonly PRIMARY=/export/home/david/dist/primary
readonly SECONDARY=/export/home/david/dist/secondary
readonly FILERS_LOCATION=(machineB machineC)
readonly MEMORY_MAPPED_LOCATION=/data/pe_t1_snapshot
PRIMARY_PARTITION=(0 3 5 7 9) # this will have more file numbers around 200
SECONDARY_PARTITION=(1 2 4 6 8) # this will have more file numbers around 200
dir1=$(ssh -o "StrictHostKeyChecking no" [email protected]${FILERS_LOCATION[0]} ls -dt1 "$MEMORY_MAPPED_LOCATION"/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] | head -n1)
dir2=$(ssh -o "StrictHostKeyChecking no" [email protected]${FILERS_LOCATION[1]} ls -dt1 "$MEMORY_MAPPED_LOCATION"/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] | head -n1)
echo $dir1
echo $dir2
if [ "$dir1" = "$dir2" ]
then
# delete all the files first
find "$PRIMARY" -mindepth 1 -delete
for el in "${PRIMARY_PARTITION[@]}"
do
scp -o ControlMaster=auto -o 'ControlPath=~/.ssh/control-%[email protected]%h:%p' -o ControlPersist=900 [email protected]${FILERS_LOCATION[0]}:$dir1/t1_weekly_1680_"$el"_200003_5.data $PRIMARY/. || scp -o ControlMaster=auto -o 'ControlPath=~/.ssh/control-%[email protected]%h:%p' -o ControlPersist=900 [email protected]${FILERS_LOCATION[1]}:$dir2/t1_weekly_1680_"$el"_200003_5.data $PRIMARY/.
done
# delete all the files first
find "$SECONDARY" -mindepth 1 -delete
for sl in "${SECONDARY_PARTITION[@]}"
do
scp -o ControlMaster=auto -o 'ControlPath=~/.ssh/control-%[email protected]%h:%p' -o ControlPersist=900 [email protected]${FILERS_LOCATION[0]}:$dir1/t1_weekly_1680_"$sl"_200003_5.data $SECONDARY/. || scp -o ControlMaster=auto -o 'ControlPath=~/.ssh/control-%[email protected]%h:%p' -o ControlPersist=900 [email protected]${FILERS_LOCATION[1]}:$dir2/t1_weekly_1680_"$sl"_200003_5.data $SECONDARY/.
done
fi
Я копирую файлы PRIMARY_PARTITION
в папку PRIMARY
и SECONDARY_PARTITION
в папку SECONDARY
в machineA
.
Есть ли способ переместить файлы быстрее в machineA
. Могу ли я копировать 10 файлов за раз или 5 файлов одновременно, чтобы ускорить этот процесс или любой другой подход?
ПРИМЕЧАНИЕ: machineA
работает на SSD
UPDATE: -
Параллельная оболочка script, которую я пробовал, верхняя часть оболочки script такая же, как показано выше.
if [ "$dir1" = "$dir2" ] && [ "$length1" -gt 0 ] && [ "$length2" -gt 0 ]
then
find "$PRIMARY" -mindepth 1 -delete
for el in "${PRIMARY_PARTITION[@]}"
do
(scp -o ControlMaster=auto -o 'ControlPath=~/.ssh/control-%[email protected]%h:%p' -o ControlPersist=900 [email protected]${FILERS_LOCATION[0]}:$dir1/t1_weekly_1680_"$el"_200003_5.data $PRIMARY/. || scp -o ControlMaster=auto -o 'ControlPath=~/.ssh/control-%[email protected]%h:%p' -o ControlPersist=900 [email protected]${FILERS_LOCATION[1]}:$dir2/t1_weekly_1680_"$el"_200003_5.data $PRIMARY/.) &
WAITPID="$WAITPID $!"
done
find "$SECONDARY" -mindepth 1 -delete
for sl in "${SECONDARY_PARTITION[@]}"
do
(scp -o ControlMaster=auto -o 'ControlPath=~/.ssh/control-%[email protected]%h:%p' -o ControlPersist=900 [email protected]${FILERS_LOCATION[0]}:$dir1/t1_weekly_1680_"$sl"_200003_5.data $SECONDARY/. || scp -o ControlMaster=auto -o 'ControlPath=~/.ssh/control-%[email protected]%h:%p' -o ControlPersist=900 [email protected]${FILERS_LOCATION[1]}:$dir2/t1_weekly_1680_"$sl"_200003_5.data $SECONDARY/.) &
WAITPID="$WAITPID $!"
done
wait $WAITPID
echo "All files done copying."
fi
Ошибки, которые я получил с параллельной оболочкой script -
channel 24: open failed: administratively prohibited: open failed
channel 25: open failed: administratively prohibited: open failed
channel 26: open failed: administratively prohibited: open failed
channel 28: open failed: administratively prohibited: open failed
channel 30: open failed: administratively prohibited: open failed
mux_client_request_session: session request failed: Session open refused by peer
mux_client_request_session: session request failed: Session open refused by peer
mux_client_request_session: session request failed: Session open refused by peer
mux_client_request_session: session request failed: Session open refused by peer
mux_client_request_session: session request failed: Session open refused by peer
channel 32: open failed: administratively prohibited: open failed
channel 36: open failed: administratively prohibited: open failed
channel 37: open failed: administratively prohibited: open failed
channel 38: open failed: administratively prohibited: open failed
channel 40: open failed: administratively prohibited: open failed
channel 46: open failed: administratively prohibited: open failed
channel 47: open failed: administratively prohibited: open failed
channel 49: open failed: administratively prohibited: open failed
channel 52: open failed: administratively prohibited: open failed
channel 54: open failed: administratively prohibited: open failed
channel 55: open failed: administratively prohibited: open failed
channel 56: open failed: administratively prohibited: open failed
channel 57: open failed: administratively prohibited: open failed
channel 59: open failed: administratively prohibited: open failed
mux_client_request_session: session request failed: Session open refused by peer
channel 61: open failed: administratively prohibited: open failed
mux_client_request_session: session request failed: Session open refused by peer
mux_client_request_session: session request failed: Session open refused by peer
mux_client_request_session: session request failed: Session open refused by peer
mux_client_request_session: session request failed: Session open refused by peer
mux_client_request_session: session request failed: Session open refused by peer
mux_client_request_session: session request failed: Session open refused by peer
mux_client_request_session: session request failed: Session open refused by peer
mux_client_request_session: session request failed: Session open refused by peer
mux_client_request_session: session request failed: Session open refused by peer
mux_client_request_session: session request failed: Session open refused by peer
mux_client_request_session: session request failed: Session open refused by peer
mux_client_request_session: session request failed: Session open refused by peer
mux_client_request_session: session request failed: Session open refused by peer
channel 64: open failed: administratively prohibited: open failed
mux_client_request_session: session request failed: Session open refused by peer
channel 68: open failed: administratively prohibited: open failed
channel 72: open failed: administratively prohibited: open failed
channel 74: open failed: administratively prohibited: open failed
channel 76: open failed: administratively prohibited: open failed
channel 78: open failed: administratively prohibited: open failed