Мне нужно скопировать файлы из machineB
и machineC
к machineA
. Я запускаю свой сценарий оболочки ниже из machineA
. Я правильно настроил ключи ssh.
Если файлов нет в machineB
, то он должен быть в machineC
.
#!/bin/bash
readonly PRIMARY=/data01/primary/.
readonly FILERS_LOCATION=(machineB machineC)
readonly MAPPED_LOCATION=/bat/data/snapshot
PARTITION=(0 3 5 7 9)
dir1=/bat/data/snapshot/20131222
dir2=/bat/data/snapshot/20131222
scp david@${FILERS_LOCATION[0]}:$dir1/weekly_1980_[$el]_200003_5.data $PRIMARY || scp david@${FILERS_LOCATION[1]}:$dir2/weekly_1980_[$el]_200003_5.data $PRIMARY
Теперь мой вопрос: если вы посмотрите на мою команду scp выше, у меня [$el]
на данный момент (что неверно) мне нужно заменить это на PARTITION
, что означает, что мне нужно повторить PARTITION
и заменить [$el]
с каждым номером в РАЗДЕЛЕ.
Итак, моя команда scp должна выглядеть так, если я повторю PARTITION
по одному -
scp david@machineB:/bat/data/snapshot/20131222/weekly_1980_0_200003_5.data /data01/primary/. || scp david@machineC:/bat/data/snapshot/20131222/weekly_1980_0_200003_5.data /data01/primary/.
scp david@machineB:/bat/data/snapshot/20131222/weekly_1980_3_200003_5.data /data01/primary/. || scp david@machineC:/bat/data/snapshot/20131222/weekly_1980_3_200003_5.data /data01/primary/.
scp david@machineB:/bat/data/snapshot/20131222/weekly_1980_5_200003_5.data /data01/primary/. || scp david@machineC:/bat/data/snapshot/20131222/weekly_1980_5_200003_5.data /data01/primary/.
scp david@machineB:/bat/data/snapshot/20131222/weekly_1980_7_200003_5.data /data01/primary/. || scp david@machineC:/bat/data/snapshot/20131222/weekly_1980_7_200003_5.data /data01/primary/.
scp david@machineB:/bat/data/snapshot/20131222/weekly_1980_9_200003_5.data /data01/primary/. || scp david@machineC:/bat/data/snapshot/20131222/weekly_1980_9_200003_5.data /data01/primary/.
Постановка задачи:-
machineA
/data01/primary/
папка. Есть ли лучший способ сделать это? То есть, могу ли я скопировать все файлы за один раз вместо того, чтобы делать это по одному?Вы можете перебирать массив PARTITION следующим образом
for el in "${PARTITION[@]}"
do
echo "$el"
done
Я бы посоветовал посмотреть rsync
для выполнения этой задачи, поскольку он обеспечивает более широкую функциональность для этого типа резервного копирования. Вы можете выполнить это с machineA, указав его в каталогах моментальных снимков на B и C, и весь ваш каталог моментальных снимков будет зеркальным.
Затем вы можете использовать cron
чтобы запланировать это через установленные интервалы. scp
идеально подходит для разовых копий, но ваш сценарий похож на обычное задание резервного копирования. rsync
также обменивается данными через стандартные порты SSH, поэтому, если scp
работает в настоящее время, нет необходимости вносить изменения в сеть, межсетевые экраны и т. д.
С участием rsync
вы даже можете реализовать функциональность для создания идентичного зеркала на всех трех серверах, если это потребуется.