Restore Tests
Kontrollierte Restore-Tests fuer homelab-infra.
Ziel:
- Backups durch echte Test-Restores verifizieren
- produktive Pfade nicht beschreiben
- Testlaeufe spaeter weitgehend automatisieren
Grundregeln
- Restore-Quelle bleibt im Backup-Bereich, z. B.
/mnt/user/backups/borg - Test-Restores laufen nur in
/mnt/user/backups/restore-lab - Reports landen in
/mnt/user/backups/restore-reports - Test-Container nutzen das Praefix
restoretest- - keine produktiven Volumes schreibend mounten
- keine produktiven Domains fuer Testinstanzen uebernehmen
Geplante Struktur
-
schedule.md: Intervalle und Verantwortlichkeiten -
common.sh: gemeinsame Helfer fuer Borg-Lookup, Borg-Extract und Compose-Cleanup; prueft vor Borg-Operationen auchborg-ui:/data/borg.dbundborg-ui:/local/secrets/borg_repo_passphrase.txt -
vaultwarden-restore-test.ps1: erster Mini-Restore-Ablauf -
vaultwarden-restore-test.sh: hosttauglicher Vaultwarden-Restore-Job -
vaultwarden-plan.md: konkreter Vaultwarden-Testplan -
vaultwarden-compose.test.yml: isolierte Testinstanz fuer Vaultwarden -
gitea-restore-test.ps1: Gitea-Mini-Restore-Ablauf -
gitea-restore-test.sh: hosttauglicher Gitea-Restore-Job -
gitea-plan.md: konkreter Gitea-Testplan -
gitea-compose.test.yml: isolierte Testinstanz fuer Gitea -
paperless-restore-test.ps1: Paperless-Mini-Restore-Ablauf -
paperless-restore-test.sh: hosttauglicher Paperless-Restore-Job -
paperless-plan.md: konkreter Paperless-Testplan -
paperless-compose.test.yml: isolierte Testinstanz fuer Paperless inkl. Test-Postgres und Test-Redis -
immich-restore-test.ps1: Immich-Mini-Restore-Ablauf als Plan-/Windows-Scaffold -
immich-restore-test.sh: hosttauglicher Immich-Restore-Job, erster echter Lauf noch offen -
immich-plan.md: konkreter Immich-Testplan -
immich-runbook.md: Operator-Runbook fuer den ersten Immich-Lauf -
immich-compose.test.yml: isolierte Testinstanz fuer Immich inkl. VectorChord/pgvector-Test-Postgres und Test-Redis -
authelia-restore-test.sh: Authelia-Restore-Job (Config-Smoke; Erstlauf 2026-06-03 erfolgreich) -
authelia-compose.test.yml: isolierte Testinstanz fuer Authelia inkl. Test-Postgres, Filesystem-Notifier (kein echter SMTP-Versand) -
authelia-plan.md: konkreter Authelia-Testplan -
authelia-runbook.md: Operator-Runbook fuer den ersten Authelia-Lauf -
nextcloud-restore-test.sh: Nextcloud-Restore-Job (Scaffold; blockiert durch Unraid shfs-chmod-Inkompatibilitaet - siehe unten) -
nextcloud-compose.test.yml: isolierte Testinstanz fuer Nextcloud inkl. Test-Postgres und Test-Redis -
check-restore-freshness.ps1: woechentlicher Frische-Check fuer Dumps und Reports -
run-restore-checks.ps1: einfacher Dispatcher fuer Restore-Jobs -
check-restore-freshness.sh: hosttauglicher Frische-Check -
run-restore-checks.sh: hosttauglicher Dispatcher -
common.sh: gemeinsame Host-Helferfunktionen -
automation-plan.md: Host-Job- und Automatisierungsmodell
Automatisierungsmodell
- Ausfuehrung: Unraid User Script / Host-Job
- Logik: Repo-Skripte in diesem Verzeichnis
- Ergebnis: Markdown-Report
- Meldung:
ntfy - Hermes: optional nur fuer Zusammenfassung und Auswertung
Wichtig:
- die Bash-Skripte
*.shsind die produktive Host-Variante check-restore-freshness.ps1und die*.ps1-Dateien bleiben als lokale Plan-/Hilfsvariante nutzbar- im Windows-Clone fehlen die
/mnt/user/...-Pfade naturgemaess
Validiertes Grundmuster
Stand nach dem ersten echten Vaultwarden-Test:
- Borg-Quelle bleibt das produktive Remote-Repo bei Hetzner
- Borg-Zugriff laeuft praktisch ueber den vorhandenen
borg-ui-Container - SSH-Trust wird ueber
known_hostsimborg-ui-Container hergestellt - die Borg-Passphrase kommt fuer Restore-Tests aus einer Host-Secret-Datei
- Restore-Ziel liegt immer getrennt unter
/mnt/user/backups/restore-lab - Reports liegen unter
/mnt/user/backups/restore-reports - Testinstanzen bekommen keine produktive Domain und keine Traefik-Route
Das ist das bevorzugte Muster fuer weitere dateibasierte Restore-Tests wie gitea.
Fuer datenbankgestuetzte Dienste wie paperless kommt zusaetzlich ein isolierter Dump-Restore in Test-Postgres dazu.
Status
Aktuell ist das erste validierte Muster vorhanden.
- echter Vaultwarden-Restore am 2026-05-07 erfolgreich verifiziert
- echter Gitea-Restore am 2026-05-07 erfolgreich verifiziert
- echter Paperless-Restore am 2026-05-07 erfolgreich verifiziert
- Immich-Restore-Test am 2026-05-27 erfolgreich verifiziert; Test-Postgres wurde nach der VectorChord-Migration am 2026-05-31 auf das produktive Immich-Postgres-Image umgestellt
- Authelia-Restore-Smoke am 2026-06-03 erfolgreich verifiziert; bewusst ohne produktiven Dump-Restore wegen Storage-Encryption-Key-Kopplung
- Bash-Dispatcher und Bash-Restore-Jobs am 2026-05-07 erfolgreich hostseitig verifiziert
- Restore-Lab und Report-Pfade auf dem Host angelegt
ntfy-Wrapper ist fuer Host-Jobs verfuegbar- Nextcloud-Restore-Test: Scaffold existiert, aber blockiert. Nextcloud 33 fuehrt zur Laufzeit
chmod()auf Dateien unter/var/www/htmlaus (OC_Util.php:486). Auf Unraids FUSE/shfs User-Shares istchmodstrukturell nicht moeglich, was zu permanenter 503 fuehrt. Loesungsoptionen: (a) Restore-Lab auf ein Cache-Drive statt User Share legen, (b) Docker-Volumes statt Bind-Mounts verwenden, (c) tmpfs-Mount fuer html/ +rsyncder Borg-Daten hinein. Bis dahin ist Nextcloud als Backlog-Item dokumentiert. - Komodo-Mongo-Daten-Restore am 2026-06-03 erfolgreich: 86904 Dokumente (inkl. 32 Stacks), Report
/mnt/user/backups/restore-reports/komodo-mongo-restore-2026-06-03.md - naechste grosse Kandidaten sind Mailarchiver und Mealie; Nextcloud bleibt blockiert (shfs-chmod)
Vor dem ersten echten Testlauf je neuem Dienst muessen Zielpfade, Quellpfade und Bereinigungsschritte bewusst freigegeben werden.