Skip to main content

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?

  1. rsync startet die Übertragung.
  2. Der Rückgabewert von rsync wird gespeichert.
  3. Bei Rückgabewert 0 war die Übertragung erfolgreich und die Schleife wird beendet.
  4. Bei einem Fehler wartet das Skript 60 Sekunden.
  5. Danach wird rsync erneut 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:

  • %F für das Datum
  • %T fü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.