Skip to content

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:

JobZeitTimeoutSkript
restic Backup nach Storjtäglich 02:003h/home/restic/backup.sh
rsync-Mirror auf die zweite HDDtäglich 05:0530m/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:

KopieOrtZweck
1/mnt/hdd/originalsLive-Daten (primäre HDD)
2/mnt/hdd2/originalsLokaler Mirror, schnelle Wiederherstellung bei HDD-Ausfall
3Storj (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:

  1. Login auf Storj Console
  2. Navigiere zu Access Keys
  3. Wähle Access Grant
  4. Kopiere den Access Grant
  5. Füge ihn in rclone.conf ein

Restic Repository ​

Das Restic-Repository wird über Rclone auf Storj gespeichert.

Repository initialisieren (einmalig):

bash
sudo -u restic restic -r rclone:storj:beelink-backup init

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

bash
# restic-Backup
sudo -u restic tail /home/restic/backup.log -n 200

# Sekundärer HDD-Mirror
sudo tail /root/mirror.log -n 200

Verhalten bei Fehlern

  • Nach jedem Lauf führt das Skript restic unlock aus, damit ein abgebrochener oder abgelaufener Lauf keine Stale Locks im Repository hinterlässt.
  • forget --prune lä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 ​

  1. Neuen Server einrichten
  2. Rclone konfigurieren (aus playbooks/files/rclone.conf)
  3. Mit Restic das Repository verbinden und Daten wiederherstellen
  4. Docker Container starten

Einzelne Services wiederherstellen ​

Bei Datenverlust oder Korruption:

  1. Betroffenen Container stoppen
  2. Mit Restic spezifische Pfade wiederherstellen (z.B. /srv/originals/immich oder /srv/docker)
  3. Berechtigungen prüfen/korrigieren
  4. Container neu starten

Detaillierte Restic-Befehle für Restore-Operationen: Restic Restore Dokumentation