rsync loop until finish
rsync automatisch wiederholen, bis die Übertragung erfolgreich ist
Mit einer while-Schleife kann ein fehlgeschlagener rsync-Befehl automatisch erneut ausgeführt werden. Die Schleife endet erst, wenn rsync erfolgreich abgeschlossen wurde.
Beispiel:
Die Dateien aus /mnt/daten/backup/ sollen nach /mnt/backupplatte/server/ kopiert werden.
Komplette Schleife
while true; do
rsync -rvP --append-verify -- \
/mnt/daten/backup/ \
/mnt/backupplatte/server/
status=$?
if [ "$status" -eq 0 ]; then
echo "$(date '+%F %T'): Übertragung erfolgreich abgeschlossen."
break
fi
echo "$(date '+%F %T'): Übertragung fehlgeschlagen. Neuer Versuch in 60 Sekunden."
sleep 60
done
Die Schleife kann jederzeit mit Strg + C beendet werden.
Wie funktioniert die Schleife?
rsyncstartet die Übertragung.- Der Rückgabewert von
rsyncwird gespeichert. - Bei Rückgabewert
0war die Übertragung erfolgreich und die Schleife wird beendet. - Bei einem Fehler wartet das Skript 60 Sekunden.
- Danach wird
rsyncerneut gestartet.
Erklärung der einzelnen Befehle
while true; do
Startet eine Endlosschleife. Alles zwischen do und done wird wiederholt ausgeführt.
while true; do
rsync
Kopiert und synchronisiert Dateien zwischen zwei Verzeichnissen.
rsync -rvP --append-verify -- \
/mnt/daten/backup/ \
/mnt/backupplatte/server/
Der erste Pfad ist die Quelle:
/mnt/daten/backup/
Der zweite Pfad ist das Ziel:
/mnt/backupplatte/server/
Wichtig: Der Schrägstrich am Ende des Quellpfads bedeutet, dass der Inhalt des Verzeichnisses kopiert wird.
-r
Kopiert Verzeichnisse und deren Unterverzeichnisse.
-v
Zeigt während der Übertragung zusätzliche Informationen an.
-P
Zeigt den Fortschritt an und behält unvollständige Dateien bei einem Abbruch.
-P entspricht:
--partial --progress
--append-verify
Versucht, eine bereits teilweise übertragene Datei fortzusetzen. Danach wird geprüft, ob die vollständige Datei korrekt übertragen wurde.
Diese Option eignet sich besonders für große, unveränderliche Dateien wie:
- Festplattenabbilder
- Backup-Archive
- komprimierte Dateien
- ISO-Dateien
--
Beendet die Liste der Optionen. Dadurch werden Datei- oder Verzeichnisnamen, die mit einem Minuszeichen beginnen, nicht versehentlich als Option interpretiert.
\
Der umgekehrte Schrägstrich setzt einen Befehl in der nächsten Zeile fort. Er verbessert nur die Lesbarkeit.
Dieser Befehl:
rsync -rvP --append-verify -- \
/mnt/daten/backup/ \
/mnt/backupplatte/server/
ist technisch identisch mit:
rsync -rvP --append-verify -- /mnt/daten/backup/ /mnt/backupplatte/server/
status=$?
Speichert den Rückgabewert des zuletzt ausgeführten Befehls in der Variable status.
status=$?
Ein Rückgabewert von 0 bedeutet Erfolg. Jeder andere Wert weist auf einen Fehler oder eine unvollständige Übertragung hin.
if [ "$status" -eq 0 ]; then
Prüft, ob der gespeicherte Rückgabewert gleich 0 ist.
if [ "$status" -eq 0 ]; then
-eq bedeutet „ist numerisch gleich“.
echo
Gibt eine Nachricht im Terminal aus.
echo "$(date '+%F %T'): Übertragung erfolgreich abgeschlossen."
date '+%F %T'
Erzeugt einen Zeitstempel im folgenden Format:
2026-07-27 14:35:20
Dabei steht:
%Ffür das Datum%Tfür die Uhrzeit
break
Beendet die Schleife, sobald rsync erfolgreich abgeschlossen wurde.
break
sleep 60
Wartet 60 Sekunden, bevor der nächste Versuch gestartet wird.
sleep 60
Für fünf Minuten Wartezeit kann stattdessen Folgendes verwendet werden:
sleep 300
done
Markiert das Ende der while-Schleife.
done
Wichtiger Hinweis bei Ein-/Ausgabefehlern
Eine Meldung wie Input/output error deutet häufig auf ein Problem mit dem Datenträger, dem Dateisystem, dem Kabel, dem USB-Gehäuse oder der Verbindung hin.
Die Wiederholungsschleife kann vorübergehende Fehler überbrücken. Sie repariert jedoch keinen defekten Datenträger und kein beschädigtes Dateisystem.
Nach einem solchen Fehler sollten die letzten Kernelmeldungen kontrolliert werden:
journalctl -k -n 100 --no-pager
Dort sollte besonders auf Begriffe wie I/O error, reset, ata, nvme, usb, ext4, btrfs oder zfs geachtet werden.