Eu preciso copiar os arquivos de machineB
e machineC
para machineA
. Estou executando meu script de shell abaixo do machineA
. Eu configurei as chaves ssh corretamente.
Se os arquivos não estiverem em machineB
, então deverão estar 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, [$el]
por enquanto (o que está errado), preciso substituí-lo por PARTITION
, o que significa que preciso iterar PARTITION
e substituir [$el]
por cada número em PARTIÇÃO.
Portanto, 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/.
Declaração do problema: -
- Como faço para iterar PARTITION dessa forma, para que eu possa executar o comando SCP acima?
- E também, como você pode ver, estou copiando os arquivos um por um para
machineA
/data01/primary/
uma pasta. Existe alguma maneira melhor de fazer isso? Ou seja, posso copiar todos os arquivos juntos de uma só vez, em vez de fazer isso um por um?
Responder1
Você pode iterar sobre o array PARTITION assim
for el in "${PARTITION[@]}"
do
echo "$el"
done
Responder2
Aconselho que você rsync
conclua esta tarefa, pois oferece maior funcionalidade geral para esse tipo de backup. Você poderia executar isso a partir da máquina A, apontando-o para os diretórios de snapshots em B e C, e todo o seu diretório de snapshots seria espelhado.
Você poderia então usar cron
para agendar isso em intervalos definidos. scp
é ideal para cópias únicas, mas seu cenário parece uma tarefa de backup normal. rsync
também se comunica através de portas SSH padrão, portanto, se scp
funcionar no momento, não deverá haver necessidade de alterações na rede, firewalls, etc.
Com rsync
você poderia até implementar a funcionalidade para criar um espelho idêntico em todos os três servidores, se necessário.