Zum Inhalt

E1 Backup & Restore: Umsetzungs-Log

Verlauf der Umsetzung nach dem Umsetzungsplan. Der Plan bleibt als Vorlage unverändert. Hier steht, was tatsächlich passiert ist: je Task das Ergebnis, Abweichungen vom Plan (als „Entscheidung“) und Funde nebenbei. Neueste Einträge oben.

Stand

Task Issue Status Datum
0 Issues, Ausgangslage – erledigt 30.10.2026
1 NUC-Configs ins Git #283 auf dem NUC umgesetzt (homeserver#290), Morgen-Check 03.11. offen 02.11.2026
2 Storage Box #283 Runbook und homeserver#291 bereit, wartet auf Robin 02.11.2026
3 rclone-Mount weg #283 Runbook bereit 02.11.2026
4 UNAS-Ziel #284 offen
5 VPS #285 offen
6 Aufbewahrung, Dumps, Excludes #286 Code fertig (homeserver#292), Deploy offen, Frist ollama-Exclude 31.12.2026 02.11.2026
7 Alarmierung, Morgenstatus #287 Code fertig (homeserver#293), Deploy offen 02.11.2026
8 Restore-Proben #288 offen
9 Störungs-Handbuch #289 offen
10 Abschluss – offen

Tasks 1–3, 6, 7 · Vorbereitung und Task 1 (30.10.–02.11.2026)

  • Task 1 umgesetzt (Robin, 02.11. 20:18, ohne Fehler): Die NUC-Configs kommen aus dem Git (homeserver#290), die Secrets liegen unter credentials/, der Kuma-Push ist raus. Lesend geprüft: vier neue Credential-Dateien 0600, kein uptime_kuma mehr.
  • Entscheidung: healthchecks.ping_url kommt per !include aus credentials/. borgmatic 2.1.5 löst {credential …} nur für Benutzer-, Passwort- und Token-Optionen auf. Der Repo-Pfad nimmt denselben Weg, weil die Konto-ID der Box darin steht.
  • Gegenprobe Live-Config gegen Repo-Fassung, mit maskierten Secrets: einziger Unterschied ist uptime_kuma. Das Extraktions-Skript aus Runbook 1.2 lief vorher gegen nachgebaute Configs.
  • Task 2/3 vorbereitet: Runbook-Abschnitte (homelab-documentation#86), hetzner.yaml für den Sub-Account in homeserver#291, erst direkt vor Runbook Task 2 mergen.
  • Gefunden: Das Home eines Sub-Accounts darf nicht das Repo sein, weil dort .ssh/ liegt. Deshalb ziehen die Repos nach backups/<host>/repo.
  • Gefunden: Auf dem aiserver gilt ssh_command global. Der Box-Key kommt deshalb über einen Host-Block.
  • Gefunden: Einen read-only Sub-Account kann man nicht mit einem Key versehen. Der Restore-Key kommt deshalb vor dem Read-only-Schalter.
  • Gefunden: Docker hängt per Drop-in an /mnt/storagebox.
  • Task 6 und 7, Code vorgezogen (berührt keinen Host):
  • predeploy-backup.sh endet bei einem gescheiterten Dump mit Exit 2, db-dumps.sh meldet das an Healthchecks (homeserver#292).
  • Morgenstatus-Skript mit 12 Tests, Python 3.10, und ein vierteljährlicher verify-data-Timer (homeserver#293).
  • Alle Tests waren vorher rot und sind jetzt grün. Die Mutationsprobe auf die Schwellen macht jeweils einen Test rot.
  • Fund nebenbei: Laut Kommentar im Dump-Skript liegen die HA-Backups im Borg-Archiv. Tatsächlich schließt **/backups/* sie aus. Kommt in Task 6, Schritt 5 dran.
  • Panne: Eine parallele Session hat im selben Checkout ~/repos/homeserver den Branch gewechselt. Dadurch landete ein Commit kurz auf dem falschen Branch. Ohne Schaden behoben: Der fremde PR #294 blieb sauber, mein Commit wurde neu gebaut (#293). Lehre: Bei parallelen Sessions nur noch in einem eigenen Worktree arbeiten.
  • Offen: Morgen-Check 03.11. (Runbook 1.6), danach Task 2 durch Robin.

Task 0 · Issues und Ausgangslage (30.10.2026)

  • Teil-Issues #283–#289 angelegt und aufs Board (Projects #4) gelegt.
  • Kommentare mit den Links in #179 und #216.
  • Übergaben aus Design Abschnitt 18 als Kommentare: #278 (Kaltstart-Drill → E3), #188 (Lars ins Tailnet → E5), #182 (geschützter Snapshot vor dem VPS-Rebuild).
  • Entscheidung: Jeder Healthchecks-Check wird in der Task angelegt, die ihn zuerst anpingt: vps-box in Task 5, nuc-db-dumps in Task 6, der Rest in Task 7. Sonst könnte Task 5 bzw. 6 ihre Erwartung („Check up“) gar nicht erfüllen.
  • Entscheidung: Log und Runbook-Gerüst kommen mit in homelab-documentation#85, weil das Design dort noch nicht gemergt ist. Die Nav-Einträge zeigen sonst ins Leere.

Ausgangslage (lesend erhoben, 28.–30.10.2026)

NUC aiserver
borgmatic 2.1.5 (pipx) 2.0.11 (apt)
borg 1.4.0 (Binary /usr/local/bin/borg) 1.4.4 (apt)
Nachtläufe, letzte 7 Tage 14 von 14 Successfully (beide Configs) 7 von 7
Configs local.yaml, hetzner.yaml, immich_db_password, credentials/{local,hetzner}.pass aiserver.yaml (ungelesen, braucht sudo)
  • Storage Box: 667 012 038 656 B von 1 099 511 627 776 B belegt (61 %). backups/nuc hat unique_csize 663 GB.
  • USB-RAID /dev/md0: 676 GB von 12,0 TB belegt. Das lokale NUC-Repo hat unique_csize 671 GB.
  • Borg auf der Box: Aufruf borg serve ohne --remote-path, also Hetzner-Standard 1.2.
  • Docker hängt über docker.service.d/10-wait-for-mounts.conf an /mnt/storagebox (RequiresMountsFor).