rsync
rsync (Remote Sync) ist das Standard-Werkzeug für effiziente Datei-Synchronisation.
Es überträgt nur geänderte Teile von Dateien — nicht alles bei jeder Ausführung.
Grundprinzip
Abschnitt betitelt „Grundprinzip“rsync [optionen] QUELLE ZIELrsync vergleicht Quelle und Ziel anhand von Größe und Zeitstempel (oder Prüfsummen) und überträgt nur Unterschiede.
Wichtige Optionen
Abschnitt betitelt „Wichtige Optionen“| Option | Bedeutung |
|---|---|
-a / --archive | Archiv-Modus: rekursiv + Rechte, Zeitstempel, Symlinks, Owner |
-v / --verbose | Fortschritt anzeigen |
-z / --compress | Komprimierung während der Übertragung |
-n / --dry-run | Nur anzeigen, was gemacht würde — nichts verändern |
--delete | Dateien im Ziel löschen, die in der Quelle nicht mehr existieren |
--exclude | Dateien/Verzeichnisse ausschließen |
--progress | Fortschritt pro Datei anzeigen |
-P | --progress + --partial (Unterbrechungen fortsetzbar) |
--bwlimit=RATE | Bandbreite begrenzen (z.B. --bwlimit=10m) |
-a ist äquivalent zu -rlptgoD — fast immer der richtige Startpunkt.
Lokale Synchronisation
Abschnitt betitelt „Lokale Synchronisation“# Verzeichnis sichernrsync -av /home/micha/ /backup/micha/
# Wichtig: Slash am Ende der Quellersync -av /home/micha/ /backup/micha/ # Inhalt von micha/ → backup/micha/rsync -av /home/micha /backup/ # Verzeichnis micha → backup/micha/Backup über SSH
Abschnitt betitelt „Backup über SSH“# Lokal → Remotersync -avz /home/micha/ user@server:/backup/micha/
# Remote → Lokalrsync -avz user@server:/var/www/ /backup/webserver/
# Mit SSH-Portrsync -avz -e "ssh -p 2222" /home/micha/ user@server:/backup/micha/Inkrementelles Backup mit —delete
Abschnitt betitelt „Inkrementelles Backup mit —delete“# Synchronisiert exakt: Gelöschtes in der Quelle wird auch im Ziel gelöschtrsync -av --delete /home/micha/ /backup/micha/Ohne --delete ist das Ziel ein additive Kopie — gelöschte Dateien bleiben im
Backup erhalten. Je nach Anwendungsfall kann das erwünscht sein oder nicht.
Dateien ausschließen
Abschnitt betitelt „Dateien ausschließen“# Einzelne Musterrsync -av --exclude="*.tmp" --exclude=".cache/" /home/micha/ /backup/micha/
# Ausschluss-Dateirsync -av --exclude-from=/etc/backup-exclude.txt /home/micha/ /backup/micha/Beispiel /etc/backup-exclude.txt:
*.tmp*.log.cache/.local/share/Trash/node_modules/Dry-Run — erst schauen, dann handeln
Abschnitt betitelt „Dry-Run — erst schauen, dann handeln“rsync -avn --delete /home/micha/ /backup/micha/Zeigt genau an, was gemacht würde, ohne etwas zu verändern. Empfehlenswert vor
dem ersten Einsatz und bei --delete.
Historische Backups mit Hard-Links
Abschnitt betitelt „Historische Backups mit Hard-Links“Für tägliche Snapshots mit minimalem Speicherverbrauch: Hard-Links auf unveränderte Dateien aus dem Vortag:
#!/bin/bashDATUM=$(date +%Y-%m-%d)GESTERN=$(date -d yesterday +%Y-%m-%d)QUELLE=/home/ZIEL=/backup/snapshots
rsync -av --delete \ --link-dest="$ZIEL/$GESTERN" \ "$QUELLE" "$ZIEL/$DATUM/"Jedes Verzeichnis snapshots/2025-01-15/ sieht wie ein vollständiges Backup aus,
belegt aber nur den Speicher der tatsächlich geänderten Dateien.
Typische Backup-Skript-Vorlage
Abschnitt betitelt „Typische Backup-Skript-Vorlage“#!/bin/bashQUELLE=/home/ZIEL=/backup/home/LOG=/var/log/backup.log
rsync -av --delete \ --exclude="*.tmp" \ --exclude=".cache/" \ "$QUELLE" "$ZIEL" >> "$LOG" 2>&1
echo "$(date): Backup abgeschlossen" >> "$LOG"Als systemd-Timer oder Cron-Job täglich ausführen:
# Crontab: täglich um 2:30 Uhr30 2 * * * /usr/local/bin/backup-home.sh