2.4 KiB
Hetzner Storage Box Snapshot Restore - Runbook
Typ: Runbook · Stand: 2026-06-23 · Status: aktiv (live validiert 2026-06-23)
Belegt den Off-site-Schutz der Hetzner Storage Box. Append-only ist bewusst NICHT
umgesetzt (DECISIONS 2026-06-01); der Schutz ist snapshot-basiert (DECISIONS
2026-06-11): operative Borg-Creds koennen weiter prune/compact, die ZFS-
Snapshots der Box sind hostseitig nicht loeschbar (taeglich 05:30 UTC, Retention 7 Tage).
Was der Test tut
ops/restore-tests/hetzner-snapshot-restore-test.sh (Dispatcher: hetzner-snapshot):
- listet
.zfs/snapshot/auf der Box (READ-ONLY, via SFTP aus demborg-ui-Container) - zaehlt Snapshots (Retention) + prueft das Alter des neuesten aus dessen Namen
- holt eine kleine Datei (
<repo>/README) aus dem neuesten Snapshot, prueft Groesse + SHA256 - loescht die Temp-Datei und schreibt einen Report nach
/mnt/user/backups/restore-reports/
Verbindung (user/host/port/Repo-Verzeichnis) wird aus der in borg-ui konfigurierten
Borg-Repo-URL abgeleitet; SSH-Key + known_hosts liegen bereits im Container. Kein
Secret im Skript, kein Schreibzugriff, kein prune/compact.
Manuell belegter Referenzlauf (2026-06-23, Codex)
- Box
u565255.your-storagebox.de,.zfs/snapshotsichtbar - Snapshots
2026-06-17..2026-06-23, je05:30-> 7 Tage Retention - neuester:
Automatic-2026-06-23T05-30-24 - Probe
hetzner_borg_appdata_critical/README, 73 B, SHA256 erzeugt, Temp geloescht
Live-Validierung (2026-06-23, Codex): erfolgreich
Erstlauf ohne ENV-Anpassung gruen (SUCCESS), Defaults passten direkt:
- Report:
/mnt/user/backups/restore-reports/hetzner-snapshot-2026-06-23.md - 7 Snapshots gefunden, neuester
Automatic-2026-06-23T05-30-24 - Einzeldatei-Restore aus
.zfs/snapshoterfolgreich
ENV-Override (SNAPSHOT_DIR, PROBE_FILE, SNAPSHOT_NAME_GLOB,
SNAPSHOT_SSH_OPTS, MIN_SNAPSHOTS, MAX_SNAPSHOT_AGE_HOURS) bleibt fuer
kuenftige Abweichungen verfuegbar.
Host-Schedule
Unraid-User-Script restore-hetzner-snapshot-monthly ist live angelegt und in
Cron aktiv:
0 6 15 * * /usr/local/emhttp/plugins/user.scripts/startCustom.php /boot/config/plugins/user.scripts/scripts/restore-hetzner-snapshot-monthly/script > /dev/null 2>&1
Der Job ruft den ntfy-Wrapper auf:
/mnt/user/services/homelab-infra/ops/restore-tests/run-restore-job-with-ntfy.sh hetzner-snapshot homelab-info