rsync loop until finish
Rsync automatisch wiederholen
Mit dieser Schleife wird ein fehlgeschlagener rsync-Kopiervorgang nach 60 Sekunden erneut gestartet.
Die Schleife endet automatisch, sobald rsync erfolgreich abgeschlossen wurde. Sie kann jederzeit mit Strg + C abgebrochen werden.
Rsync-Schleife
while true; do
rsync -avP --append-verify -- \
/mnt/Source/ \
/mnt/Destination/
status=$?
if [ "$status" -eq 0 ]; then
printf '%s: rsync wurde erfolgreich abgeschlossen.\n' \
"$(date '+%F %T')"
break
fi
printf '%s: rsync ist mit Exit-Code %s fehlgeschlagen. Neuer Versuch in 60 Sekunden.\n' \
"$(date '+%F %T')" "$status"
sleep 60
done
Pfade anpassen
Der Quellpfad ist:
/mnt/Source/
Der Zielpfad ist:
/mnt/Destination/
Der abschließende Schrägstrich beim Quellpfad ist wichtig:
/mnt/Source/kopiert den Inhalt des Ordners./mnt/Sourcekopiert den OrdnerSourceselbst.
Erklärung der Schleife
while true; do
Startet eine Endlosschleife. Alle Befehle zwischen do und done werden wiederholt ausgeführt.
rsync -avP
Startet die Datenübertragung mit rsync.
-aaktiviert den Archivmodus. Dabei werden unter anderem Berechtigungen, Zeitstempel und symbolische Links erhalten.-vzeigt ausführlich an, welche Dateien verarbeitet werden.-Pzeigt den Fortschritt an und behält unvollständig übertragene Dateien.
--append-verify
Eine bereits teilweise übertragene Datei wird beim nächsten Versuch fortgesetzt. Anschließend überprüft rsync, ob die zusammengesetzte Datei korrekt ist.
Diese Option eignet sich besonders für große Dateien, die sich während der Übertragung nicht verändern.
--
Das doppelte Minuszeichen beendet die Verarbeitung von Optionen. Dadurch werden Pfade, die mit einem Minuszeichen beginnen, nicht versehentlich als Befehlsoption interpretiert.
status=$?
Speichert den Exit-Code des zuletzt ausgeführten Befehls in der Variable status.
- Exit-Code
0bedeutet: erfolgreich abgeschlossen. - Ein anderer Exit-Code bedeutet: ein Fehler ist aufgetreten.
if [ "$status" -eq 0 ]; then
Prüft, ob rsync erfolgreich abgeschlossen wurde.
printf
Gibt eine Meldung mit aktuellem Datum und aktueller Uhrzeit aus.
break
Beendet die Schleife, sobald rsync erfolgreich war.
sleep 60
Wartet nach einem Fehler 60 Sekunden, bevor der nächste Versuch gestartet wird.
Für eine Wartezeit von fünf Minuten kann der Wert beispielsweise auf 300 geändert werden:
sleep 300
done
Markiert das Ende der Schleife. Wenn break nicht ausgeführt wurde, beginnt die Schleife anschließend erneut.
Schleife abbrechen
Die laufende Schleife kann im Terminal mit folgender Tastenkombination beendet werden:
Strg + C
Wichtiger Hinweis bei Ein-/Ausgabefehlern
Eine Meldung wie diese weist häufig auf ein Problem mit dem Datenträger, dem Dateisystem, einem Kabel, einem USB-Gehäuse oder einer Netzwerkverbindung hin:
Input/output error (5)
Die Schleife behebt die Ursache nicht. Sie startet lediglich die Übertragung erneut. Bei wiederholten Ein-/Ausgabefehlern sollten die Kernel-Meldungen geprüft werden:
journalctl -k -n 100 --no-pager
journalctl -k
Zeigt Meldungen des Linux-Kernels an. Dazu gehören unter anderem Fehler von Festplatten, USB-Geräten, Controllern und Dateisystemen.
-n 100
Begrenzt die Ausgabe auf die letzten 100 Meldungen.
--no-pager
Gibt die Meldungen direkt im Terminal aus, ohne ein zusätzliches Anzeigeprogramm zu öffnen.