- 21 docs/*.md: audits, design notes, deployment plans, checklists, memos - Coordination: ROLES, runbooks (DGX reboot, Lea live), patches, registre, syntheses, systemd, QG template - Handoffs: 6 Codex handoff documents + README + template
4.3 KiB
Design — Auto-réparation OVMF de la VM Léa (gap G2, reprise non-assistée)
Auteur: Claude (infra)Date: 2026-06-20 ~03:15 CESTStatut: PROPOSITION / design read-only — à appliquer après revue Dom (garde-fou : aucun changement service prod sans Dom).Référence: post-mortemdocs/POSTMORTEM_PANNE_SECTEUR_DGX_2026-06-20.md(gap G2).
1. Problème
Une coupure brutale corrompt OVMF_VARS.fd (NVRAM UEFI) → la VM boucle dans TianoCore/Windows Boot Manager. Le 2026-06-20, blocage 02:07→02:18 jusqu'à intervention manuelle de Codex (restore OVMF connu-bon + TPM frais). En clinique sans technicien, ce blocage serait permanent.
2. Pourquoi le service ne s'auto-répare pas aujourd'hui
~/.config/systemd/user/win11-arm-lea.service :
Restart=on-failure— inopérant : en boucle TianoCore, QEMU ne sort pas (process « running » à 99 % CPU). Aucun échec → aucun restart.ExecStartPreeffacetpm2-00.permall(TPM frais à chaque boot) mais pasOVMF_VARS.fd→ un OVMF corrompu survit aux restarts → boucle permanente.
3. Détecteur fiable
Le guest agent QEMU (windows-11-arm-lea-agent.sock) ne répond que si Windows a réellement booté. En boucle firmware, il ne répond jamais. Signature d'échec = pas de réponse guest-agent après N min + CPU QEMU élevé. (Plus robuste qu'une analyse framebuffer ; v1 suffisante.)
4. Design proposé (2 briques + garde-fous)
Brique A — Snapshot « known-good » après boot sain
Watchdog compagnon (lancé en ExecStartPost=... & ou service apparié vm-health-watchdog.service) :
- Fenêtre de boot (0→~6 min), poll guest-agent toutes les 30 s (
guest-pingvia socket agent). - Guest-agent répond → boot sain : copie atomique
OVMF_VARS.fd→OVMF_VARS.fd.known-good, écrit sentinelboot-ok, log horodaté. C'est le point de restauration.
Brique B — Détection boucle + restauration auto
Si à T+6 min le guest-agent ne répond toujours pas ET CPU QEMU > 80 % (signature boucle) :
- Écrit sentinel
boot-failed. - Archive l'OVMF suspect :
OVMF_VARS.fd→OVMF_VARS.fd.failed-<ts>(convention déjà utilisée par Codex). - Restaure
OVMF_VARS.fd.known-good→OVMF_VARS.fd. - Arrête le QEMU en boucle firmware. Sûr : aucun OS n'a booté (guest-agent jamais monté) → pas de risque de corruption Windows (≠ règle « jamais kill un Windows booté », qui ne s'applique pas ici).
- systemd relance (
Restart=on-failurese déclenche enfin) avec le bon OVMF.
Garde-fous (anti-mauvais comportement)
- Pas de known-good (1er boot, jamais eu de boot sain) → ne PAS restaurer ; log + alerte, comportement actuel conservé.
- Compteur d'essais : max 2 auto-restaurations consécutives (sentinel compteur). Au-delà → stop + alerte (évite la boucle restore→échec→restore si le known-good est lui aussi mauvais).
- Faux positifs : Windows peut booter lentement → fenêtre 6–8 min + double critère (guest-agent ET CPU). Réglable.
- TPM : on garde l'effacement
tpm2-00.permallexistant (évite le hang TPM) ; l'auto-réparation OVMF est complémentaire. - Idempotence : nettoyage des sentinels en début de cycle.
5. Points d'intégration (à valider Dom avant écriture)
win11-arm-lea.service: ajouterExecStartPrede garde (siboot-failed+ known-good → restaurer avant lancement) etExecStartPostqui lance le watchdog.- Nouveau script
vm-health-watchdog.sh(briques A+B) dans~/quickemu-win11-arm-lea/. - Optionnel :
vm-health-watchdog.service(PartOf=win11-arm-lea.service) plutôt qu'un&, pour un cycle de vie propre.
6. Plan de test (sans risque, sur la VM labo)
- Boot sain → vérifier création
OVMF_VARS.fd.known-good+ sentinelboot-ok. - Simuler corruption (copier l'
OVMF_VARS.fd.failed-powercut-20260620-021854archivé sur le live) → vérifier détection à T+6 min, archivage, restauration, restart, boot sain. - Vérifier le compteur d'essais (corrompre aussi le known-good) → stop + alerte, pas de boucle infinie.
- Mesurer le temps total de reprise auto (cible < 10 min sans intervention).
7. Décision attendue (Dom)
GO/NO-GO sur l'écriture + le réglage de la fenêtre (6 vs 8 min) et du mécanisme d'alerte (log seul ? message coordination ? mail ?). Application supervisée, un changement / un test, après ton réveil.