Dieses Skript erstellt Snapshots des Home-Verzeichnisses mit `rsync` und `--link-dest`.[cite:43][cite:34] Jeder Snapshot sieht wie ein vollständiges Backup aus, aber unveränderte Dateien werden per Hardlink wiederverwendet, sodass Speicherplatz gespart wird.[cite:34][cite:92]
Das Skript sichert den Inhalt von `HOME` auf ein externes Zielverzeichnis und legt dabei zeitgestempelte Snapshot-Ordner an.[cite:43] Über den Symlink `latest` wird immer auf den zuletzt erfolgreichen Sicherungsstand verwiesen.[cite:34][cite:92]
Für `--link-dest` sollte das Ziel auf einem Linux-Dateisystem liegen, das Hardlinks sauber unterstützt, etwa ext4, XFS oder btrfs.[cite:34][cite:91] Dateisysteme wie exFAT sind für diese Snapshot-Technik ungeeignet.[cite:34]
Das Skript prüft zunächst, ob das Zielverzeichnis existiert und beschreibbar ist, und legt anschließend Snapshot- und Log-Verzeichnisse an.[cite:43][cite:97] Danach wird `rsync` mit Archivoptionen sowie Ausschlüssen für nicht benötigte Verzeichnisse ausgeführt.[cite:43][cite:91]
Wenn bereits ein gültiger vorheriger Snapshot existiert, wird dieser über `--link-dest` als Referenz verwendet.[cite:34][cite:92] Unveränderte Dateien werden dann nicht erneut kopiert, sondern als Hardlinks im neuen Snapshot eingebunden.[cite:34]
Nach erfolgreichem Lauf aktualisiert das Skript den Symlink `latest` und entfernt ältere Snapshots oberhalb des konfigurierten Aufbewahrungswerts `KEEP`.[cite:43]
| `-x` | Auf demselben Dateisystem bleiben; zusätzliche Mounts unterhalb von `HOME` werden nicht traversiert.[cite:91][cite:43] |
| `--delete` | Entfernt Dateien im neuen Snapshot, die in der Quelle nicht mehr vorhanden sind; ältere Snapshots bleiben dabei unberührt.[cite:91][cite:34] |
| `--delete-excluded` | Entfernt auch explizit ausgeschlossene Inhalte aus dem Ziel-Snapshot.[cite:91] |
| `--link-dest` | Verweist auf den letzten Snapshot, damit unveränderte Dateien per Hardlink wiederverwendet werden.[cite:34][cite:92] |
Für einen sicheren Test kann vorübergehend `--dry-run` in die `RSYNC_OPTS` aufgenommen werden; dann zeigt `rsync` nur an, was passieren würde, ohne tatsächlich Daten zu schreiben.[cite:91][cite:43]
Ein Backup gilt erst dann als verlässlich, wenn sich Daten daraus testweise wiederherstellen und inhaltlich prüfen lassen.[cite:105][cite:109] Der empfohlene Weg ist, einen Snapshot nicht direkt ins echte Home-Verzeichnis zurückzuschreiben, sondern zunächst in ein separates Testverzeichnis zu restaurieren.[cite:105][cite:107]
### Testverzeichnis anlegen
```bash
mkdir -p /tmp/restore-test-home
```
### Snapshot auswählen und zurückspielen
Beispiel für einen Restore eines bestimmten Snapshots:
Damit werden die Daten aus dem Snapshot mit Rechten, ACLs und erweiterten Attributen in das Testziel kopiert.[cite:91][cite:43] Alternativ kann auch nur ein Teilbereich wie `Documents/`, ein Projektordner oder `.config/` restauriert werden, um einzelne Anwendungsszenarien gezielt zu prüfen.[cite:105][cite:107]
### Integrität prüfen
Nach dem Restore sollten mehrere Prüfungen erfolgen:[cite:105][cite:110]
- Wichtige Dateien öffnen, etwa Dokumente, PDFs, Bilder oder Quellcode.[cite:105]
- Anwendungen testweise mit restaurierten Daten starten, zum Beispiel ein Projekt im Editor oder eine Konfiguration in einem Testprofil.[cite:107]
- Für wichtige Dateien Checksummen vergleichen, um die inhaltliche Identität sicherzustellen.[cite:110]
Beispiel mit `sha256sum`:
```bash
cd"${HOME}"
sha256sum wichtige_datei.odt
cd /tmp/restore-test-home
sha256sum wichtige_datei.odt
```
Die Prüfsummen sollten identisch sein.[cite:110]
### Worauf beim Restore zu achten ist
Beim Restore-Test sollten insbesondere Dateirechte, Symlinks, ACLs, xattrs und eventuelle Fehlermeldungen von `rsync` geprüft werden.[cite:91][cite:105] Gerade bei einem Restore auf ein anderes Dateisystem kann es Einschränkungen bei ACLs oder erweiterten Attributen geben.[cite:91]
### Empfehlung für die Praxis
Sinnvoll ist ein regelmäßiger Wiederherstellungstest, zum Beispiel quartalsweise, mit kurzer Dokumentation: verwendeter Snapshot, Testziel, geprüfte Dateien, Ergebnis und Auffälligkeiten.[cite:105][cite:109] Erst ein erfolgreich getesteter Restore macht aus einem Backup eine belastbare Datensicherung.[cite:105]
Ein erster Testlauf sollte als Dry-Run erfolgen, um Ausschlüsse, Zielpfad und Verhalten zu prüfen, bevor echte Daten geschrieben oder gelöscht werden.[cite:91][cite:43] Das Zielverzeichnis sollte nicht innerhalb des zu sichernden Home-Verzeichnisses liegen, um Rekursionen und ungewollte Mitsicherungen zu vermeiden.[cite:43]
Bei Verwendung von `--delete` gilt: Gelöschte Dateien verschwinden aus dem neu erzeugten Snapshot, bleiben aber in älteren Snapshots weiterhin vorhanden.[cite:34][cite:92] Genau dadurch entsteht die gewünschte Snapshot-Historie.[cite:92]
Sinnvolle nächste Ausbaustufen wären ein optionaler `--dry-run`-Schalter, eine Prüfung des tatsächlichen Mountpoints per `mountpoint`, sowie eine Automatisierung über `systemd`-Timer statt manueller Ausführung.[cite:97][cite:43]