Você pode iterar na matriz PARTITION assim
for el in "${PARTITION[@]}"
do
echo "$el"
done
Eu preciso scp os arquivos de machineB
e machineC
para machineA
. Estou executando meu script de shell abaixo de machineA
. Eu configurei as chaves ssh corretamente.
Se os arquivos não estiverem em machineB
, eles devem estar lá em 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
Agora, minha pergunta é se você der uma olhada no meu comando scp acima, eu tenho [$el]
por enquanto (o que está errado), eu preciso substituir isso por PARTITION
, o que significa que eu preciso iterar PARTITION
e substitua [$el]
por cada número em PARTITION.
Então meu comando scp deve ficar assim se eu iterar PARTITION
um por um -
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/.
Descrição do problema: -
machineA
/data01/primary/
. Existe alguma maneira melhor de fazer isso? Ou seja, posso copiar todos os arquivos juntos em um único tiro, em vez de fazê-lo um por um? Eu aconselharia olhar para rsync
para concluir esta tarefa, pois ela fornece maior funcionalidade para esse tipo de backup. Você poderia executar isso a partir de machineA, apontando para os diretórios de snapshots em B & C, e todo o seu diretório de snapshots seria espelhado.
Você pode usar cron
para agendar isso em intervalos definidos. scp
é ideal para cópias únicas, mas seu cenário parece um trabalho de backup regular. rsync
também se comunica através de portas SSH padrão, portanto, se scp
funcionar no momento, não haverá necessidade de alterações na rede, firewalls, etc.
Com rsync
, você poderia até mesmo implementar a funcionalidade para criar um espelho idêntico em todos os três servidores, se necessário.