nearline: S4U-Root-Cause dokumentiert + Exitcode-Leak gefixt

Diagnose 2026-06-21: Der Scheduled Task "KalliLab H Drive Nearline Pull"
lief als LogonType S4U (ohne gespeichertes Passwort) und hatte damit keine
Netzwerk-Anmeldeinformationen fuer den SMB-Share \192.168.178.58\backups.
Jeder geplante 05:30-Lauf brach still mit Exit 1 ab, ohne Report; der
Nearline-Spiegel war 2026-06-19 bis 2026-06-21 veraltet. Manuell nachgezogen,
Spiegel wieder frisch.

pull-critical-backups.ps1: explizites `exit 0` auf dem Erfolgspfad, damit der
letzte robocopy-Exitcode (1 = "Dateien kopiert") nicht als Prozess-Exit leakt
und der Scheduled Task ein wahrheitsgemaesses Ergebnis meldet.

README: Pflicht-Hinweis, dass der Task mit gespeichertem Passwort (nicht S4U)
laufen muss. MASTER_TODO: Root-Cause + verbleibender Operator-Schritt.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-21 18:02:58 +02:00
parent f296338530
commit 1a4593110a
3 changed files with 19 additions and 2 deletions
+1 -1
View File
@@ -25,7 +25,7 @@ Host-Reports (`/mnt/user/backups/restore-reports/`) und in der Git-Historie.
| Restore-Test Tailscale | Operator | State-Validierung + Reconnect nur auf Wegwerf-Host/VM, danach Geraet in Tailscale-Admin entfernen | `ops/restore-tests/tailscale-runbook.md` |
| Authelia OIDC fuer Apps | Operator/Codex | Live: Grafana + Mealie login-verifiziert; Paperless Secret verdrahtet und Service-Smoke am 2026-06-17 gruen, finaler Browser-Login mit Operator-Account offen. Immich + Nextcloud bewusst geparkt bis Family-Onboarding (siehe `docs/DECISIONS.md` 2026-06-06) | `docs/AUTHELIA_OIDC_PLAN.md` |
| Home Assistant Tibber | Operator/Codex | Tibber per HA-UI-Config-Flow verbinden. Danach Energy-Dashboard um echte Kosten/Preisquelle ergaenzen; SolarEdge-PV, Netz und Speicher sind bereits konfiguriert und validiert | `docs/runbooks/smart-home-bootstrap.md`, `docs/DECISIONS.md` |
| Nearline-Pull Dead-Man's-Switch | Operator | Heartbeat-Pings (`/start`, `/fail`, Erfolg) sind lokal in `pull-critical-backups.ps1` und `ops/borg-ui/scripts/pre-borg.sh` verdrahtet (endpoint-agnostisch, No-Op ohne URL). **Verbleibt:** Operator legt je einen Healthchecks-Check an, hinterlegt die Capability-URL (baerchen: ENV `HEALTHCHECKS_NEARLINE_URL` bzw. `%USERPROFILE%\.kallilab\…`; Unraid: `/mnt/user/appdata/secrets/healthchecks_borg_url`) und macht je einen Testlauf | `ops/h-drive-nearline/README.md` |
| Nearline-Pull Dead-Man's-Switch + S4U-Fix | Operator | **Root-Cause 2026-06-21:** Scheduled Task `KalliLab H Drive Nearline Pull` lief als LogonType S4U (kein gespeichertes Passwort) -> keine SMB-Netz-Creds -> jeder 05:30-Lauf brach still ab; Spiegel war 19.-21.06. veraltet. Manuell nachgezogen (Stand: 21.06.-04:00-Dumps), Heartbeat-Pings + Exit-Code-Fix in `pull-critical-backups.ps1`/`pre-borg.sh` gepusht. **Verbleibt (braucht Windows-Passwort des Operators):** Task auf "Run whether logged on or not" MIT gespeichertem Passwort umstellen (LogonType Password); dann je einen Healthchecks-Check anlegen + Capability-URL hinterlegen (baerchen ENV `HEALTHCHECKS_NEARLINE_URL`/Datei; Unraid `/mnt/user/appdata/secrets/healthchecks_borg_url`) | `ops/h-drive-nearline/README.md` |
| Monitoring Single-File-Bind-Mount Hardening | Operator/Claude | alertmanager/blackbox/loki/promtail + alertmanager-ntfy-bridge lokal auf Directory-Mounts umgestellt (grafana-provisioning war bereits Directory-Mount); `docker compose config` gruen. **Verbleibt:** Push + Komodo-Redeploy des monitoring-Stacks mit `--force-recreate` (Mount-Pfade aendern sich), danach Reload-/Alert-Smoke | `monitoring/docker-compose.yml` |
---
+14 -1
View File
@@ -35,7 +35,20 @@ Abschluss zu löschen.
Der Windows Scheduled Task `KalliLab H Drive Nearline Pull` laeuft seit
2026-05-28 taeglich 05:30. Das Script kopiert bewusst **nicht** mit `/MIR` und
loescht nichts auf H:/; alte Artefakte werden nur nach manueller Sichtpruefung
entfernt. Aufruf zum Testen:
entfernt.
> **Wichtig — Task-LogonType:** Der Task muss mit "Ausfuehren, auch wenn der
> Benutzer nicht angemeldet ist" **und gespeichertem Passwort** laufen
> (LogonType `Password`). Mit `S4U` (ohne gespeichertes Passwort) hat der Lauf
> keine Netzwerk-Anmeldeinformationen und erreicht den authentifizierten
> SMB-Share `\\192.168.178.58\backups` nicht -> jeder geplante Lauf bricht
> still mit Exitcode 1 ab, ohne Report. Genau das passierte 2026-06-19 bis
> 2026-06-21 (Spiegel still veraltet), bis am 2026-06-21 manuell nachgezogen
> wurde. Manuelle Laeufe in einer interaktiven Sitzung funktionieren, weil die
> Sitzung die SMB-Creds hat. Das ist auch der Grund fuer den externen
> Dead-Man's-Switch unten.
Aufruf zum Testen:
```powershell
powershell.exe -NoProfile -ExecutionPolicy Bypass -File G:\Gitea_Clone\homelab-infra\ops\h-drive-nearline\pull-critical-backups.ps1 -WhatIf
@@ -216,6 +216,10 @@ try {
Write-Host "Report: $reportPath"
Send-HealthcheckPing
# Explizit erfolgreich beenden: sonst leakt der letzte robocopy-Exitcode
# (1 = "Dateien kopiert") als Prozess-Exit und der Scheduled Task meldet
# 0x1, obwohl der Lauf sauber war.
exit 0
} catch {
Send-HealthcheckPing "/fail"
throw