# 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 powershell.exe -NoProfile -ExecutionPolicy Bypass -File G:\Gitea_Clone\homelab-infra\ops\h-drive-nearline\pull-critical-backups.ps1 -WhatIf ``` Echter Lauf: ```powershell powershell.exe -NoProfile -ExecutionPolicy Bypass -File G:\Gitea_Clone\homelab-infra\ops\h-drive-nearline\pull-critical-backups.ps1 ``` Reports landen unter: ```text H:\kallilab-nearline-backups\_reports ``` Robocopy-Logs landen unter: ```text 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: ```powershell $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.