Ich muss die Dateien per SCP von machineB
und machineC
nach übertragen machineA
. Ich führe mein folgendes Shell-Skript von aus machineA
. Ich habe die SSH-Schlüssel richtig eingerichtet.
Wenn die Dateien nicht in vorhanden sind machineB
, dann sollten sie in vorhanden sein 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
Meine Frage lautet nun: Wenn Sie sich meinen obigen SCP-Befehl ansehen, habe ich [$el]
derzeit (was falsch ist): Ich muss dies durch ersetzen PARTITION
, was bedeutet, dass ich iterieren PARTITION
und [$el]
durch jede Zahl in PARTITION ersetzen muss.
Mein scp-Befehl sollte also so aussehen, wenn ich PARTITION
ihn einzeln iteriere -
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/.
Problemstellung:-
- Wie iteriere ich PARTITION so, dass ich den obigen SCP-Befehl ausführen kann?
- Und wie Sie sehen, kopiere ich die Dateien einzeln in
machineA
/data01/primary/
den Ordner. Gibt es eine bessere Möglichkeit, dies zu tun? Das heißt, kann ich alle Dateien auf einmal kopieren, anstatt es einzeln zu tun?
Antwort1
Sie können das PARTITION-Array wie folgt durchlaufen
for el in "${PARTITION[@]}"
do
echo "$el"
done
Antwort2
Ich würde empfehlen, sich rsync
für diese Aufgabe anzusehen, da es für diese Art von Backup insgesamt mehr Funktionalität bietet. Sie können dies von Maschine A aus ausführen und es auf die Snapshot-Verzeichnisse auf B und C richten, und Ihr gesamtes Snapshot-Verzeichnis würde gespiegelt.
Sie könnten cron
dies dann in festgelegten Intervallen planen. scp
ist ideal für einmalige Kopien, aber Ihr Szenario klingt nach einem regelmäßigen Sicherungsjob. rsync
kommuniziert auch über Standard-SSH-Ports, wenn es also scp
derzeit funktioniert, sollten keine Änderungen am Netzwerk, an Firewalls usw. erforderlich sein.
Damit rsync
könnten Sie bei Bedarf sogar eine Funktion implementieren, um auf allen drei Servern ein identisches Spiegelbild zu erstellen.