# H:/ Nearline Pull Status: **produktiv** (2026-05-28). Erster echter Lauf 2026-05-27 20:45 erfolgreich. Windows Scheduled Task `KalliLab H Drive Nearline Pull` taeglich 05:30 ist seit 2026-05-28 aktiv. ## 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:/. ## Befund 2026-06-01 - Der Scheduled Task um 05:30 kopierte die aktuellen Dumps, brach aber mit Robocopy Exit-Code 8 ab, weil im Dump-Root alte `*-pre-*` Dateien und Migration-/Cutover-Verzeichnisse mit restriktiven Rechten lagen. - Fix: `ops/h-drive-nearline/pull-critical-backups.ps1` kopiert fuer `borg-dumps-latest` nur noch die kuratierte Pflichtdatei-Liste und schliesst Migration-/Cutover-Verzeichnisse aus. - Manueller Kontrolllauf 2026-06-01 08:25 erfolgreich: `borg-dumps-latest` Exit-Code 0, `gitea-bundles` Exit-Code 1 (Robocopy-Erfolg mit Kopien), Report `H:\kallilab-nearline-backups\_reports\nearline-pull-2026-06-01-082553.md`. ## 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 kuratierte Dumps ohne 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. Der Borg-Dumps-Job ist eine Whitelist der aktuellen Nearline-Pflichtartefakte. Einmalige Migrations-Sicherungen, Pre-Major-Snapshots und Redis-Cutover-Verzeichnisse bleiben ueber Borg/Hetzner abgedeckt, sind aber kein H:/-Nearline-Pflichtbestand. ## 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. Aktiv seit 2026-05-28. Tatsaechlicher Register-Befehl (RunLevel-Enum-Wert ist `Limited`, nicht `LeastPrivilege`): ```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 $Settings = New-ScheduledTaskSettingsSet ` -AllowStartIfOnBatteries ` -DontStopIfGoingOnBatteries ` -StartWhenAvailable ` -ExecutionTimeLimit (New-TimeSpan -Hours 2) Register-ScheduledTask ` -TaskName "KalliLab H Drive Nearline Pull" ` -Action $Action ` -Trigger $Trigger ` -Settings $Settings ` -Description "Copies critical KalliLab restore artifacts from Unraid SMB backup share to H:/ nearline disk." ` -RunLevel Limited ``` Status pruefen: ```powershell Get-ScheduledTask -TaskName "KalliLab H Drive Nearline Pull" | Format-List TaskName, State Get-ScheduledTaskInfo -TaskName "KalliLab H Drive Nearline Pull" | Format-List LastRunTime, LastTaskResult, NextRunTime, NumberOfMissedRuns ``` Manueller Trigger zum Testen: ```powershell Start-ScheduledTask -TaskName "KalliLab H Drive Nearline Pull" ``` Verhalten: - Laeuft als angemeldeter User (`RunLevel Limited`); wenn der PC abgemeldet ist, wartet der Task bis zur naechsten Anmeldung (`StartWhenAvailable`). - Akku-Modus blockiert nicht (`AllowStartIfOnBatteries`). - Maximale Laufzeit 2 h, danach wird der Task abgebrochen. ## 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.