# Restore-Tests - Betrieb und Werkzeuge Typ: Runbook/Tool-Doku · Stand: 2026-06-11 · Status: aktiv Kontrollierte Restore-Tests fuer `homelab-infra`. Dieses Dokument ist das **einzige** Betriebsdokument fuer Restore-Tests (das fruehere `docs/RESTORE_HANDBOOK.md` ist hierin aufgegangen). Verwandt: - `docs/RESTORE_MATRIX.md` - Restore-Quellen, Secrets, Smoke-Tests und **Test-Reifegrad je Dienst** (einziger Status-Ort) - `docs/DISASTER_RECOVERY.md` - echter Wiederanlauf - `schedule.md` - Kadenz, Cron-Ausdruecke und Shell-Guards - `unraid-user-scripts.md` - Unraid-User-Script-Vorlagen fuer die Host-Jobs ## Grundregeln - Restore-Quelle bleibt das produktive Borg-Repo bei Hetzner; Zugriff ueber den vorhandenen `borg-ui`-Container - Passphrase kommt aus `/mnt/user/appdata/secrets/borg_repo_passphrase.txt`, nie aus UI-Interna - Testdaten landen nur unter `/mnt/user/backups/restore-lab/`; bei Fehlschlag wird nach `_failed/` verschoben statt geloescht - Reports landen unter `/mnt/user/backups/restore-reports` - Testcontainer nutzen das Praefix `restoretest-`, localhost-Ports, keine produktive Domain, keine Traefik-Route - keine produktiven Volumes schreibend mounten, keine produktiven Pfade beschreiben - keine Restore-Automatik fuer neue Dienste ohne bewusste Freigabe ## Erfolgskriterien Ein Restore-Test gilt nur dann als erfolgreich, wenn Quelle lesbar war, Daten im Restore-Lab ankamen, der Testcontainer startete, der **fachliche** Smoke-Test gelang und ein Report geschrieben wurde. "Container laeuft" allein reicht nicht. ## Aufbau des Verzeichnisses Pro Dienst existieren bis zu drei Artefakte: - `-restore-test.sh` - automatisierter Host-Job (produktive Wahrheit) - `-compose.test.yml` - isolierte Testinstanz - `-runbook.md` - manueller Ablauf bzw. Besonderheiten Dazu zentrale Helfer: - `run-restore-checks.sh` - Dispatcher (Host), `run-restore-checks.ps1` (lokale Planvariante) - `run-restore-job-with-ntfy.sh` - Wrapper: Erfolg -> `homelab-info`, Fehler -> `homelab-alerts` - `check-restore-freshness.sh` / `.ps1` - woechentlicher Frische-Check fuer Dumps und Reports (prueft pg-Dumps per `pg_restore --list`) - `negative-freshness-alert-test.sh` - sicherer Negativtest des Alarmwegs (synthetischer Leerpfad, quartalsweise) - `common.sh` - gemeinsame Borg-/Compose-Helfer - `automation-plan.md` - Host-Job- und Automatisierungsmodell ## Betriebsmodus Stand 2026-06-11 ist der Betrieb auf V1+ (validierte Bash-Host-Jobs mit ntfy): - Host-Jobs laufen als Unraid User Scripts vom Repo-Spiegel `/mnt/user/services/homelab-infra` - Kadenz und Cron-Ausdruecke: `schedule.md` (woechentlicher Frische-Check, monatliche/quartalsweise Dienst-Rotation, monatlicher Zufalls-Restore) - Job-Vorlagen: `unraid-user-scripts.md` ## Schnellstart ```bash # Frische-Check bash /mnt/user/services/homelab-infra/ops/restore-tests/run-restore-checks.sh freshness # Dienst-Restore-Check (vaultwarden|gitea|paperless|immich|authelia|adguard|redis|komodo-bootstrap|nextcloud) bash /mnt/user/services/homelab-infra/ops/restore-tests/run-restore-checks.sh # Negativtest des Alarmwegs (quartalsweise) bash /mnt/user/services/homelab-infra/ops/restore-tests/run-restore-checks.sh freshness-negative # Mit ntfy-Meldung bash /mnt/user/services/homelab-infra/ops/restore-tests/run-restore-job-with-ntfy.sh freshness homelab-info ``` ## Status je Dienst Einziger Status-Ort ist die **Reifegrad-Tabelle** in `docs/RESTORE_MATRIX.md` (letzter Test, Typ, naechster Lauf). Hier nur Besonderheiten: - **Nextcloud:** Test am 2026-06-03 erfolgreich, aber mit Unraid-shfs-Eigenheit: Nextcloud fuehrt `chmod()` unter `/var/www/html` aus, was auf FUSE/shfs scheitert. Das Skript patcht `check_data_directory_permissions: false` und legt den `.ncdata`-Marker an. - **Authelia:** bewusst Config-Smoke ohne produktiven Dump-Restore (Storage-Encryption-Key-Kopplung). - **Immich:** Foto-Dateien-Restore ist bewusst nicht Teil des Smokes (separater DR-Drill); Test-Postgres nutzt das produktive VectorChord-Image. - **Unraid-Flash / Tailscale:** noch ohne vollstaendigen Erstlauf - `unraid-flash-runbook.md`, `tailscale-runbook.md`; offene Schritte in `docs/MASTER_TODO.md`. ## Naechste Ausbaustufen 1. Hermes-Zusammenfassung ueber vorhandene Reports (geparkt mit Hermes) 2. Report-Rotation: Reports werden dauerhaft aufbewahrt; bei wachsender Anzahl jaehrlich nach `_archive/YYYY/` verschieben. Der Frische-Check warnt ab `MAX_REPORT_AGE_DAYS=45`, loescht aber nie automatisch.