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:

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.

--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.

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.


Revision #3
Created 2026-07-27 19:44:08 UTC by Julian
Updated 2026-07-27 20:13:47 UTC by Julian