Files
homelab-infra/docs/H_DRIVE_NEARLINE_PULL.md
T
Micha 3c71a66c55 Document monitoring alerts, bundle cron and H/ pull live status
- AUDIT_2026-05-25_TODO: Borg-Stale, Cert-Expiry, Container-Down
  Alerts auf "erledigt" (Cron */5 textfile exporter live,
  Prometheus reload mit 14 Regeln); Gitea-Bundle-Cron auf "erledigt"
  (User-Script gitea-bundle-mirror-6h aktiv, Bundles 644);
  H:/ Nearline-Pull auf "erledigt (Pull live, Scheduled Task offen)"
  mit Zaehlerstaenden 19 Borg-Dumps + 10 Bundle-Files.

- MIGRATION_LOG: neuer Eintrag fasst die drei zusammenhaengenden
  Live-Aktivierungen zusammen, inkl. Befund-Ursprung (Permission-
  Drift), Reparaturen und expliziter Ausklammerung der nicht
  angefassten Themen (Auth, Hermes, USV, FRITZ!Box, Plex).

- H_DRIVE_NEARLINE_PULL: Erstlauf-Befund mit Permission-Issues
  und nachgezogenem Stand; Erwartungs-Liste auf real geliefertes
  Set angepasst; Flash-Config explizit Out-of-Scope.

- pull-critical-backups.ps1: Live-Robocopy-Output an Out-Null,
  damit der Markdown-Report nicht von Robocopy-Strings zerlegt
  wird (PowerShell-Pipeline-Quirk im foreach).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-27 20:48:04 +02:00

4.0 KiB

H:/ Nearline Pull

Status: erster echter Lauf erfolgreich (2026-05-27 20:45). Scheduled Task noch nicht aktiv — wird erst nach Operator-Bestaetigung angelegt.

Erstlauf-Befund 2026-05-27

  • Erster -WhatIf-loser Lauf: 18 Borg-Dump-Files erfolgreich gepullt, 4 unraid-flash-config-Files und 10 Gitea-Bundle-Files blockiert (Zugriff verweigert).
  • Ursache: Bundles wurden mit chmod 600 geschrieben, Flash-Config bewusst 0600 root:root, Filebrowser-Dump erbte 0640. Der SMB-Read-Share auf dem Operator-PC liest mit unprivilegierten Rechten, kein root.
  • Fixes im selben Sprint:
    • ops/borg-ui/scripts/gitea-bundle-mirror.sh schreibt Bundles und Sidecars jetzt 0644 (Bundle-Inhalt = Git-Historie, ohne Secrets durch .gitignore).
    • ops/borg-ui/scripts/pre-backup-dumps.sh setzt alle Dumps via atomic_write per Default auf 0644; unraid-flash-config.* bleibt explizit 0600.
    • ops/h-drive-nearline/pull-critical-backups.ps1 excluded die unraid-flash-config.*-Familie ueber /XF, damit Flash-Config bewusst nicht in den Nearline-Scope kommt.
  • Zweiter Lauf (nach Fixes): beide Robocopy-Jobs Exit-Code 1, 19 Borg-Dumps + 10 Gitea-Bundle-Files auf H:/.

Zweck

H:/ ist eine zweite lokale Nearline-Kopie fuer die wichtigsten Restore-Artefakte. Es ersetzt weder Hetzner/Borg noch ein echtes Off-site-/Airgap-Ziel, reduziert aber das Risiko, dass ein lokaler Restore nur vom Unraid-Array abhaengt.

Quelle und Ziel

Zweck Quelle Ziel
Aktuelle Dumps inklusive Flash-Backup \\192.168.178.58\backups\borg\dumps\latest H:\kallilab-nearline-backups\borg-dumps\latest
Gitea-Bundles \\192.168.178.58\backups\git-bundles\gitea H:\kallilab-nearline-backups\git-bundles\gitea

Das Skript kopiert bewusst nicht mit /MIR und loescht keine Dateien auf H:/. Alte Artefakte duerfen dort erst nach manueller Sichtpruefung geloescht werden.

Skript

powershell.exe -NoProfile -ExecutionPolicy Bypass -File G:\Gitea_Clone\homelab-infra\ops\h-drive-nearline\pull-critical-backups.ps1 -WhatIf

Echter Lauf:

powershell.exe -NoProfile -ExecutionPolicy Bypass -File G:\Gitea_Clone\homelab-infra\ops\h-drive-nearline\pull-critical-backups.ps1

Reports landen unter:

H:\kallilab-nearline-backups\_reports

Robocopy-Logs landen unter:

H:\kallilab-nearline-backups\_logs

Geplanter Schedule

Empfohlen: taeglich 05:30 Uhr, nach dem Borg-Dump-Fenster um ca. 04:00 Uhr.

Der Task wird erst nach Operator-Sichtpruefung angelegt. Vorschlag:

$Action = New-ScheduledTaskAction `
  -Execute "powershell.exe" `
  -Argument "-NoProfile -ExecutionPolicy Bypass -File G:\Gitea_Clone\homelab-infra\ops\h-drive-nearline\pull-critical-backups.ps1"

$Trigger = New-ScheduledTaskTrigger -Daily -At 05:30

Register-ScheduledTask `
  -TaskName "KalliLab H Drive Nearline Pull" `
  -Action $Action `
  -Trigger $Trigger `
  -Description "Copies critical KalliLab restore artifacts from Unraid SMB backup share to H:/ nearline disk." `
  -RunLevel LeastPrivilege

Erfolgscheck

Nach einem echten Lauf muessen mindestens diese Artefakte unter H:\kallilab-nearline-backups liegen:

  • borg-dumps\latest\immich.dump
  • borg-dumps\latest\komodo-mongo.archive.gz
  • borg-dumps\latest\postgresql17-paperless.dump
  • borg-dumps\latest\postgresql17-mailarchiver.dump
  • borg-dumps\latest\nextcloud.dump
  • borg-dumps\latest\mealie.dump
  • borg-dumps\latest\gitea.sqlite.dump
  • borg-dumps\latest\vaultwarden.sqlite.dump
  • git-bundles\gitea\latest-report.md
  • git-bundles\gitea\micha\*.bundle

Bewusst nicht im Nearline-Scope:

  • unraid-flash-config.tar.gz (hostseitig 0600 root:root; Restore-Quelle bleibt das Hetzner-Borg-Repo, siehe docs/RESTORE_MATRIX.md Tier 1 Unraid OS Flash).

Schutzregeln

  • Kein CIFS-/SMB-Hard-Mount von H:/ auf Unraid.
  • Kein Borg-Repo direkt auf H:/ ueber SMB.
  • Kein /MIR und kein automatisches Loeschen auf H:/.
  • Flash-Backup wie Secret behandeln; H:/ bleibt lokaler Operator-Datentraeger.