Necesito escanear los archivos desde machineB
y machineC
hacia machineA
. Estoy ejecutando mi siguiente script de shell desde machineA
. He configurado las claves ssh correctamente.
Si los archivos no están en machineB
, entonces deberían estar en 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
Ahora mi pregunta es si echas un vistazo a mi comando scp anterior, que tengo [$el]
por ahora (lo cual es incorrecto), necesito reemplazar esto con PARTITION
, lo que significa que necesito iterar PARTITION
y reemplazar [$el]
con cada número en PARTICIÓN.
Entonces mi comando scp debería verse así si lo repito PARTITION
uno por uno:
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/.
Planteamiento del problema:-
- ¿Cómo itero PARTICIÓN de tal manera que pueda ejecutar el comando SCP anterior?
- Y además, como puedes ver, estoy copiando los archivos uno por uno en
machineA
/data01/primary/
la carpeta. ¿Existe alguna forma mejor de hacer esto? Es decir, ¿puedo copiar todos los archivos juntos de una sola vez en lugar de hacerlo uno por uno?
Respuesta1
Puedes iterar sobre la matriz PARTICIÓN de esta manera
for el in "${PARTITION[@]}"
do
echo "$el"
done
Respuesta2
Recomendaría mirar rsync
para completar esta tarea, ya que proporciona una mayor funcionalidad en todos los aspectos para este tipo de copia de seguridad. Puede ejecutar esto desde la máquina A, apuntándolo a los directorios de instantáneas en B y C, y todo su directorio de instantáneas se reflejará.
Luego podría utilizar cron
para programar esto a intervalos establecidos. scp
es ideal para copias únicas, pero su escenario parece un trabajo de copia de seguridad normal. rsync
también se comunica a través de puertos SSH estándar, por lo que si scp
funciona actualmente no debería haber necesidad de cambios en la red, firewalls, etc.
Incluso rsync
podría implementar la funcionalidad para crear un espejo idéntico en los tres servidores si fuera necesario.