Backups unter Linux mit rsync erstellen & automatisieren
Backups unter Linux mit rsync erstellen & automatisieren
Zusammenfassung:
Dieser Artikel dokumentiert den Einsatz von rsync für lokale und Remote-Backups unter Linux. Themen sind grundlegende Optionen und Flags, inkrementelle Backups mit Hard-Link-Rotation (ähnlich Time Machine), Remote-Backup via SSH sowie die Automatisierung mit Cron oder systemd-Timer.
1. rsync Grundlagen
rsync ist auf nahezu allen Linux-Distributionen vorinstalliert. Es synchronisiert Dateien und Verzeichnisse effizient, indem nur geänderte Teile übertragen werden.
Grundsyntax
rsync [Optionen] Quelle/ Ziel/
Wichtig: Ein abschließender
/nach der Quelle kopiert den Inhalt des Verzeichnisses. Ohne/wird das Verzeichnis selbst kopiert.
Häufig verwendete Optionen
| Option | Beschreibung |
|---|---|
-a
|
Archivmodus (rekursiv, Symlinks, Berechtigungen, Zeitstempel erhalten) |
-v
|
Verbose: Dateien anzeigen |
-z
|
Komprimierung bei Übertragung |
--delete
|
Dateien im Ziel löschen, die in der Quelle nicht mehr existieren |
--exclude
|
Dateien oder Muster ausschließen |
-n / --dry-run
|
Vorschau ohne tatsächliche Änderungen |
--progress
|
Fortschritt pro Datei anzeigen |
2. Lokales Backup
# Home-Verzeichnis auf externe Festplatte sichern
rsync -av --delete /home/benutzer/ /media/backup/home/
# Mit Dry-Run zunächst prüfen
rsync -avn --delete /home/benutzer/ /media/backup/home/
# Bestimmte Verzeichnisse ausschließen
rsync -av --delete \
--exclude='.cache/' \
--exclude='Downloads/' \
/home/benutzer/ /media/backup/home/
3. Inkrementelles Backup mit Hard-Link-Rotation
Diese Methode erstellt täglich einen vollständigen Snapshot, ohne den vollen Speicherplatz zu verbrauchen – unveränderte Dateien werden als Hard-Links aus dem vorherigen Backup wiederverwendet.
#!/bin/bash
QUELLE="/home/benutzer/"
ZIEL="/media/backup"
DATUM=$(date +%Y-%m-%d)
LETZTES="$ZIEL/latest"
rsync -av --delete \
--link-dest="$LETZTES" \
"$QUELLE" "$ZIEL/$DATUM/"
# Symlink "latest" auf aktuelles Backup setzen
rm -f "$LETZTES"
ln -s "$ZIEL/$DATUM" "$LETZTES"
Alte Backups können einfach mit rm -rf /media/backup/2024-01-01/ gelöscht werden – Hard-Links bleiben für noch referenzierte Dateien erhalten.
4. Remote-Backup via SSH
# Lokales Verzeichnis auf entfernten Server sichern
rsync -avz --delete \
/home/benutzer/ \
benutzer@server.example.com:/backup/home/
# Entferntes Verzeichnis lokal sichern
rsync -avz --delete \
benutzer@server.example.com:/var/www/ \
/media/backup/webserver/
Für passwortloses Backup via Cron: SSH-Key ohne Passphrase erstellen und auf dem Server hinterlegen (siehe Artikel: SSH-Schlüssel unter Linux erstellen & verwalten).
5. Automatisierung via Cron
crontab -e
Eintrag für tägliches Backup um 02:00 Uhr:
0 2 * * * /home/benutzer/skripte/backup.sh >> /var/log/backup.log 2>&1
6. Automatisierung via systemd-Timer
Service-Datei ~/.config/systemd/user/backup.service:
[Unit]
Description=Tägliches rsync Backup
[Service]
Type=oneshot
ExecStart=/home/benutzer/skripte/backup.sh
Timer-Datei ~/.config/systemd/user/backup.timer:
[Unit]
Description=Backup täglich um 02:00
[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true
[Install]
WantedBy=timers.target
systemctl --user enable --now backup.timer
7. Diagnose: Backup-Protokoll prüfen
# Log der letzten Ausführung
cat /var/log/backup.log
# systemd-Timer-Status
systemctl --user status backup.timer
journalctl --user -u backup.service
Hat euch dieser Beitrag gefallen?
Dann lasst gern ein Like da.