Windows Scheduled Task "KalliLab H Drive Nearline Pull" auf dem Operator-Windows-PC registriert: taeglich 05:30 nach dem Borg- Dump-Fenster. RunLevel Limited, StartWhenAvailable, Akku-OK, Execution-Time-Limit 2h. Naechster Lauf 2026-05-29 05:30. Repo-Snippet in H_DRIVE_NEARLINE_PULL.md korrigiert: PowerShell- Enum-Wert ist Limited, nicht LeastPrivilege (alter Snippet haette beim ersten Register-ScheduledTask einen Parameter-Binding-Fehler geworfen). Status auf "produktiv" gesetzt. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
4.9 KiB
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 600geschrieben, Flash-Config bewusst0600 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.shschreibt Bundles und Sidecars jetzt 0644 (Bundle-Inhalt = Git-Historie, ohne Secrets durch.gitignore).ops/borg-ui/scripts/pre-backup-dumps.shsetzt alle Dumps viaatomic_writeper Default auf 0644;unraid-flash-config.*bleibt explizit 0600.ops/h-drive-nearline/pull-critical-backups.ps1excluded dieunraid-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.
Aktiv seit 2026-05-28. Tatsaechlicher Register-Befehl (RunLevel-Enum-Wert ist Limited, nicht LeastPrivilege):
$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:
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:
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.dumpborg-dumps\latest\komodo-mongo.archive.gzborg-dumps\latest\postgresql17-paperless.dumpborg-dumps\latest\postgresql17-mailarchiver.dumpborg-dumps\latest\nextcloud.dumpborg-dumps\latest\mealie.dumpborg-dumps\latest\gitea.sqlite.dumpborg-dumps\latest\vaultwarden.sqlite.dumpgit-bundles\gitea\latest-report.mdgit-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, siehedocs/RESTORE_MATRIX.mdTier 1 Unraid OS Flash).
Schutzregeln
- Kein CIFS-/SMB-Hard-Mount von
H:/auf Unraid. - Kein Borg-Repo direkt auf
H:/ueber SMB. - Kein
/MIRund kein automatisches Loeschen aufH:/. - Flash-Backup wie Secret behandeln;
H:/bleibt lokaler Operator-Datentraeger.