Backups
Das Backup-System basiert auf drei Komponenten:
- Restic - Backup-Software mit Verschlüsselung und Deduplizierung
- Rclone - Schnittstelle zu Cloud-Speicher
- Storj - Dezentraler Cloud-Speicher-Anbieter
Übersicht
Die Backup-Richtlinie folgt einer einzigen Regel: Alles unter /srv und /home wird gesichert, außer den ersetzbaren Inhalten unter /srv/media/. Diese Trennung ist Teil der Speicherstruktur.
Was wird gesichert:
/srv/originals/(unersetzliche Originale: Immich-Fotos, Familienmedien, persönliche Medien)/srv/docker/(Docker-Konfigurationen und App-Daten, inkl. Immich Postgres)/home/(Benutzerdaten)
Was wird NICHT gesichert:
/srv/media/(ersetzbare Inhalte: Jellyfin Filme/Serien, qBittorrent Downloads)- App Caches und Logs
- System-Dateien - bei Bedarf neu aufsetzen
Backup-Zeitplan:
| Job | Zeit | Timeout | Skript |
|---|---|---|---|
| restic Backup nach Storj | täglich 02:00 | 3h | /home/restic/backup.sh |
| rsync-Mirror auf die zweite HDD | täglich 05:05 | 30m | /root/mirror.sh |
- Retention:
--keep-daily 7 --keep-weekly 4 --keep-monthly 6 --keep-yearly 2
Beide Cronjobs werden von setup-backups.yaml als root-Cronjobs angelegt.
3-2-1 Strategie
Die unersetzlichen Daten existieren in drei Kopien auf zwei Medientypen, davon eine außerhalb des Hauses:
| Kopie | Ort | Zweck |
|---|---|---|
| 1 | /mnt/hdd/originals | Live-Daten (primäre HDD) |
| 2 | /mnt/hdd2/originals | Lokaler Mirror, schnelle Wiederherstellung bei HDD-Ausfall |
| 3 | Storj (restic) | Offsite Disaster Recovery |
Keine Netzwerklast
Beide HDDs sind physisch am Beelink angeschlossen. Der Mirror liest von einem Blockgerät und schreibt auf das andere - reine lokale I/O, kein WLAN- oder LAN-Verkehr. Nur die Storj-Kopie nutzt die Internetverbindung.
Restic Dokumentation
Für detaillierte Restic-Befehle siehe die offizielle Restic-Dokumentation. Diese Seite enthält nur serverspezifische Konfigurationen.
Konfiguration
Rclone Konfiguration
Die Rclone-Konfiguration liegt unter:
- Auf dem Server:
~/.config/rclone/rclone.conf - Im Repository:
playbooks/files/rclone.conf
Storj Access Grant erstellen:
- Login auf Storj Console
- Navigiere zu Access Keys
- Wähle Access Grant
- Kopiere den Access Grant
- Füge ihn in
rclone.confein
Restic Repository
Das Restic-Repository wird über Rclone auf Storj gespeichert.
Repository initialisieren (einmalig):
sudo -u restic restic -r rclone:storj:beelink-backup initDas Passwort wird abgefragt und sollte sicher im Password Manager gespeichert werden.
Sekundärer HDD-Mirror
Zusätzlich zum restic-Backup spiegelt ein nächtlicher rsync-Befehl die Originale auf die sekundäre HDD.
Überwachung
Beide Skripte melden ihr Ergebnis per Push-Heartbeat an Uptime Kuma. Ein fehlgeschlagener oder in den Timeout gelaufener Lauf schlägt Alarm, Logs sind für die Detailanalyse.
# restic-Backup
sudo -u restic tail /home/restic/backup.log -n 200
# Sekundärer HDD-Mirror
sudo tail /root/mirror.log -n 200Verhalten bei Fehlern
- Nach jedem Lauf führt das Skript
restic unlockaus, damit ein abgebrochener oder abgelaufener Lauf keine Stale Locks im Repository hinterlässt. forget --pruneläuft nur nach einem erfolgreichen Backup. Nach einem Fehlschlag bleiben alte Snapshots also erhalten.
Wiederherstellung
Falls der Server komplett neu aufgesetzt werden muss oder einzelne Daten wiederhergestellt werden müssen.
Komplette Wiederherstellung
- Neuen Server einrichten
- Rclone konfigurieren (aus
playbooks/files/rclone.conf) - Mit Restic das Repository verbinden und Daten wiederherstellen
- Docker Container starten
Einzelne Services wiederherstellen
Bei Datenverlust oder Korruption:
- Betroffenen Container stoppen
- Mit Restic spezifische Pfade wiederherstellen (z.B.
/srv/originals/immichoder/srv/docker) - Berechtigungen prüfen/korrigieren
- Container neu starten
Detaillierte Restic-Befehle für Restore-Operationen: Restic Restore Dokumentation