Procédure complète et reproductible pour remettre en route une VM Windows Server 2019 inamorçable sur Red Hat OpenStack Platform 17.1, sans ISO ni démontage du disque racine : utilisation d’une image de secours, restauration de winload.exe
, contrôle BCD et redémarrage autonome.
Contexte et objectif
Dans un laboratoire RHOSP 17.1, l’équipe devait prouver qu’une instance Windows Server 2019 défaillante pouvait être réparée sans lecteur ISO ni intervention intrusive sur le disque racine. Le test a consisté à supprimer le chargeur critique %SystemRoot%\System32\winload.exe
, rendant l’OS inamorçable. La VM a ensuite été démarrée sur une image de secours (rescue image) disponible dans Glance, tandis que le disque racine d’origine restait attaché.
Dans ce mode, l’OS de secours voit généralement :
- C: la partition système de l’image de secours (OS d’assistance)
- D: le disque racine d’origine contenant l’installation Windows cassée
But opérationnel : restaurer rapidement la capacité de démarrage de Windows afin de débrancher l’image de secours et relancer la VM sur son disque racine, le tout en environnement cloud où seules des images raw/qcow2
sont disponibles.
Architecture de secours dans Red Hat OpenStack Platform 17.1
La fonction « rescue » de Nova démarre l’instance sur une image alternative (Linux ou Windows de secours) et ré-attache le disque racine initial comme volume secondaire. Aucun média amovible n’est requis et l’opération est réversible. Deux cas courants :
- Racine sur volume Cinder : le volume est rattaché en lecture/écriture au moment du rescue → idéal pour réparer hors ligne.
- Racine éphémère (disque local) : Nova expose le disque éphémère en device secondaire (ex.
/dev/vdb
) que l’OS de secours peut monter.
Cheat‑sheet OpenStack côté plateforme
# Sauvegarde avant intervention (racine sur volume Cinder)
openstack volume snapshot create --force --name ws2019-root-pre-fix <VOLUME_ID>
# Démarrage en mode rescue
openstack server rescue --image
# Vérification des attachments
openstack server show -f yaml
-c name -c status -c volumes_attached -c OS-EXT-SRV-ATTR:root_device_name
# Sortie du mode rescue après réparation
openstack server unrescue
Dans Horizon, l’opération équivalente se fait via Instances → Actions → Rescue, puis Unrescue une fois la correction effectuée.
Identification fiable des volumes dans l’OS de secours
Selon l’image de secours, les lettres peuvent varier. Validez systématiquement les volumes avant d’écrire quoi que ce soit.
diskpart
list disk
list volume
exit
Repères utiles depuis l’OS de secours (CMD ou PowerShell) :
wmic logicaldisk get deviceid, volumename, filesystem, size, freespace
mountvol
Si le disque racine n’a pas de lettre, attribuez‑la temporairement :
diskpart
list volume
select volume <N>
assign letter=D
exit
Restauration rapide du démarrage de Windows Server 2019
Les étapes ci‑dessous reprennent la méthode éprouvée pour un démarrage type BIOS/MBR où winload.exe
est requis. Des variantes UEFI sont données plus loin.
Monter et vérifier les volumes
- Depuis l’OS de secours (C:), confirmer que le disque d’origine est bien D:.
- Vérifier l’intégrité du système de fichiers :
chkdsk D: /f
- Si des erreurs sont corrigées, redémarrez l’OS de secours et relancez
chkdsk
jusqu’à obtenir un état propre.
Restaurer le fichier manquant winload.exe
Le moyen le plus rapide est de copier le binaire depuis l’OS de secours (ou depuis une VM saine de même build) vers l’installation cassée :
copy C:\Windows\System32\winload.exe D:\Windows\System32\winload.exe
Réinitialiser les ACL si nécessaire :
icacls D:\Windows\System32\winload.exe /inheritance:e
icacls D:\Windows\System32\winload.exe /setowner "NT Service\TrustedInstaller"
Variante UEFI : validez également la présence de D:\Windows\System32\winload.efi
. Si manquant, copiez‑le de la même manière.
Contrôler et, au besoin, réparer le magasin BCD
Avant toute modification, sauvegardez :
mkdir D:\BCD_Backup
copy D:\Boot\BCD D:\BCD_Backup\BCD.bak
Inspectez le magasin :
bcdedit /store D:\Boot\BCD /enum all
Les entrées « device
» et « osdevice
» de l’ID de démarrage ({default}
le plus souvent) doivent pointer vers partition=D:
. Corrigez au besoin :
bcdedit /store D:\Boot\BCD /set {default} device partition=D:
bcdedit /store D:\Boot\BCD /set {default} osdevice partition=D:
bcdedit /store D:\Boot\BCD /set {default} path \Windows\system32\winload.exe
Si le magasin est corrompu, laissez Windows le reconstruire :
bootrec /scanos
bootrec /rebuildbcd
Réparer MBR, secteur de démarrage et fichiers système
bootrec /fixmbr
bootrec /fixboot
sfc /scannow /offbootdir=D:\ /offwindir=D:\Windows
Astuce : sfc
hors ligne restaure les fichiers standards (dont winload.exe
) selon le magasin de composants. Si des composants sources manquent, utilisez la section DISM plus bas.
Recréer les fichiers de démarrage au besoin
Si le chargeur (bootmgr
) ou les fichiers de démarrage sont absents/brisés, recréez‑les avec BCDBOOT
:
# Mode BIOS/MBR (magasin BCD sur D:\Boot)
bcdboot D:\Windows /s D: /f BIOS
En UEFI, ciblez la partition EFI (voir plus bas) avec /f UEFI
.
Sortir du mode rescue et redémarrer
- Fermez toutes les consoles et programmes ayant des fichiers ouverts sur D:.
- Depuis Horizon ou la CLI, exécutez
openstack server unrescue <SERVER_ID>
. - Démarrez l’instance normalement. Windows doit retrouver
winload.exe
et un BCD valide.
Cas UEFI vs BIOS : chemins, BCD et commandes
Windows Server 2019 peut démarrer en mode BIOS/MBR ou UEFI/GPT. Les composants et emplacements diffèrent :
Contexte de démarrage | Partition système | Emplacement du BCD | Chargeur utilisé | Commande de recréation |
---|---|---|---|---|
BIOS / MBR | Active (NTFS) sur le disque OS (souvent D: hors ligne) | D:\Boot\BCD | winload.exe | bcdboot D:\Windows /s D: /f BIOS |
UEFI / GPT | EFI (FAT32), ~100–300 MB (lettre à attribuer, ex. S:) | S:\EFI\Microsoft\Boot\BCD | winload.efi | bcdboot D:\Windows /s S: /f UEFI |
Localiser et préparer la partition EFI (UEFI)
diskpart
list disk
select disk <X>
list partition
select partition <Y> # FAT32 ~100-300 MB
assign letter=S
exit
Puis vérifiez et, si nécessaire, regénérez les fichiers de boot UEFI :
dir S:\EFI\Microsoft\Boot
bcdedit /store S:\EFI\Microsoft\Boot\BCD /enum
bcdboot D:\Windows /s S: /f UEFI
Dépannage approfondi et cas particuliers
« Access is denied » sur bootrec /fixboot
Symptôme courant en UEFI lorsque la partition EFI n’a pas de lettre ou que ses ACL bloquent l’accès.
- Attribuez une lettre à l’EFI :
diskpart → assign letter=S
. - Vérifiez que
S:
est FAT32. Si la partition est vierge/corrompue, dernier recours (après snapshot) : la reformater en FAT32 puis exécuterbcdboot D:\Windows /s S: /f UEFI
.
Erreur 0xc000000e ou 0xc000000f
Généralement un chemin d’OS incorrect ou un BCD orphelin.
bcdedit /store <BCD> /set {default} device partition=D:
bcdedit /store <BCD> /set {default} osdevice partition=D:
bcdedit /store <BCD> /set {default} path \Windows\System32\winload.exe
DISM hors ligne sans ISO
Si sfc
ne suffit pas et qu’aucun ISO n’est disponible, deux options :
- Utiliser le magasin de composants de l’OS de secours s’il s’agit du même build :
dism /image:D:\ /cleanup-image /restorehealth /source:C:\Windows\WinSxS /limitaccess
- Copier ponctuellement les binaires manquants depuis une VM Windows saine de même build (méthode ciblée).
Lettre de lecteur différente de D:
Adaptez toutes les commandes. Pour détecter automatiquement la bonne lettre de l’installation Windows hors ligne :
for %i in (D E F G H I J K L M N O P Q R S T U V W X Y Z) do @if exist %i:\Windows\System32\config\SYSTEM echo OS offline = %i:
Vérifications post‑réparation
- Intégrité fichiers :
sfc /scannow /offbootdir=D:\ /offwindir=D:\Windows
revient propre. - BCD cohérent :
bcdedit /store <BCD> /enum
montredevice
/osdevice
sur la partition système attendue. - Journaux : conservez une trace des commandes (copier/coller ou transcript PowerShell) avec date/heure.
Bonnes pratiques en environnement OpenStack
- Snapshot systématique avant toute écriture sur le disque racine (volume Cinder ou image éphémère convertie en snapshot).
- Lecture seule d’abord : réparez le minimum viable (chargeur, BCD) puis testez un unrescue.
- Préparer une image de secours Windows de même version que la cible (idéal pour
sfc
/dism
). - Consistance des drivers paravirt : vérifiez que l’image de secours dispose des mêmes pilotes virtio/Red Hat nécessaires pour voir les volumes.
- Contrôle de l’ordre des disques : en cas de doute, identifiez les devices via leurs GUID (diskpart →
detail disk
) et notez les correspondances.
Tableau de décision rapide
Symptôme | Cause probable | Action recommandée |
---|---|---|
Fichier winload.exe manquant | Suppression/altération fichier | Copie depuis OS de secours → sfc hors ligne |
BCD invalide / OS introuvable | Entrées device /osdevice erronées | bcdedit pour corriger, ou bootrec /rebuildbcd |
bootrec /fixboot → Access is denied | EFI sans lettre / ACL bloquantes | Assigner lettre à EFI → bcdboot UEFI |
Erreur 0xc000000e / 0xc000000f | Chemin chargeur ou partition incorrecte | Corriger path , device , osdevice dans BCD |
sfc ne répare pas | Magasin de composants manquant | dism avec source WinSxS du secours (même build) |
Script de réparation hors ligne automatisé (optionnel)
Ce script CMD couvre 80 % des cas BIOS/MBR : détection de la partition Windows, copie de winload.exe
, vérification BCD et réparation standard. À exécuter depuis l’OS de secours en administrateur.
@echo off
setlocal enabledelayedexpansion
rem --- Détecter la lettre de l'installation offline ---
for %%L in (D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
if exist %%L:\Windows\System32\config\SYSTEM (
set OFF=%%L:
goto :FOUND
)
)
echo [ERREUR] Impossible de trouver l'installation Windows offline.& exit /b 1
:FOUND
echo [INFO] Installation offline detectee sur %OFF%
rem --- Vérifications disque ---
chkdsk %OFF% /f
rem --- Restaurer winload.exe si absent ---
if not exist %OFF%\Windows\System32\winload.exe (
echo [INFO] Restauration de winload.exe
copy C:\Windows\System32\winload.exe %OFF%\Windows\System32\winload.exe
icacls %OFF%\Windows\System32\winload.exe /inheritance:e
icacls %OFF%\Windows\System32\winload.exe /setowner "NT Service\TrustedInstaller"
)
rem --- Sauvegarde du BCD ---
if exist %OFF%\Boot\BCD (
if not exist %OFF%\BCD_Backup mkdir %OFF%\BCD_Backup
copy %OFF%\Boot\BCD %OFF%\BCD_Backup\BCD.bak
)
rem --- Correction BCD ---
bcdedit /store %OFF%\Boot\BCD /enum 1>nul 2>&1
if errorlevel 1 (
echo [INFO] BCD corrompu ou manquant, reconstruction...
bootrec /scanos
bootrec /rebuildbcd
) else (
echo [INFO] Correction des entrees device/osdevice...
bcdedit /store %OFF%\Boot\BCD /set {default} device partition=%OFF%
bcdedit /store %OFF%\Boot\BCD /set {default} osdevice partition=%OFF%
bcdedit /store %OFF%\Boot\BCD /set {default} path \Windows\System32\winload.exe
)
rem --- Reparation boot code & systeme ---
bootrec /fixmbr
bootrec /fixboot
sfc /scannow /offbootdir=%OFF%\ /offwindir=%OFF%\Windows
echo [OK] Terminé. Vous pouvez quitter le mode rescue et redemarrer l'instance.
endlocal
Cheat‑sheet des commandes côté Windows
Outil | Commande | Finalité |
---|---|---|
diskpart | list volume , assign letter= | Identifier et monter les partitions (OS ou EFI) |
chkdsk | chkdsk D: /f | Assainir le système de fichiers avant réparation |
icacls | /inheritance:e , /setowner TrustedInstaller | Réparer les ACL après copie de binaires système |
bcdedit | /store ... /set ... | Corriger les entrées BCD device /osdevice /path |
bootrec | /fixmbr , /fixboot , /rebuildbcd | Réparer MBR/secteur de boot et reconstruire le magasin BCD |
sfc | /scannow /offbootdir /offwindir | Vérification/réparation hors ligne des fichiers système |
dism | /image:... /restorehealth | Réparer le magasin de composants (sans ISO si source disponible) |
bcdboot | /s ... /f BIOS|UEFI | Recréer les fichiers de démarrage et un BCD valide |
Procédure récapitulative « dualité secours / production »
Étape | Depuis | Action | Validation attendue |
---|---|---|---|
Snapshot préventif | OpenStack | Créer snapshot volume racine | Snapshot présent et disponible |
Entrée en mode rescue | OpenStack | server rescue avec image de secours | Instance RESCUE, console OK |
Vérif. volumes | OS de secours | diskpart , chkdsk | OS cassé visible sur D: |
Restauration chargeur | OS de secours | Copie winload.exe , bcdedit /bootrec | BCD valide, SFC propre |
Sortie rescue | OpenStack | server unrescue | Instance ACTIVE, boot OK |
Pourquoi cette méthode fonctionne
Le couple OS de secours + réparation hors ligne reproduit la logique d’un média WinPE/ISO tout en respectant les contraintes cloud : impossible de monter un ISO, mais possible d’attacher un disque de secours et d’accéder au volume racine en lecture/écriture. La restauration ciblée du chargeur (winload.exe
ou winload.efi
) et la correction du BCD suffisent dans la majorité des incidents de démarrage, sans réinstallation complète ni conversion d’image.
Résultat
Après application des étapes ci‑dessus, la VM Windows Server 2019 redémarre normalement sur son disque racine. La procédure s’apparente à un bare‑metal recovery maîtrisé dans un cloud OpenStack, aligné avec les contraintes d’images raw/qcow2
et l’absence de média d’installation.
Annexes utiles
Exemple d’audit rapide BCD (UEFI)
diskpart
select disk 0
list partition
select partition 1 # si EFI identifiée
assign letter=S
exit
bcdedit /store S:\EFI\Microsoft\Boot\BCD /enum all
rem Pour forcer un nouveau BCD propre
ren S:\EFI\Microsoft\Boot\BCD BCD.bad
bcdboot D:\Windows /s S: /f UEFI
Nettoyage et redémarrage sûrs
- Supprimez les lettres temporaires attribuées aux partitions système (
diskpart → select volume → remove letter=S
) pour éviter les surprises une fois en production. - Vérifiez l’ordre de boot dans le firmware virtuel si la plateforme le permet (rarement nécessaire avec RHOSP).
Checklist de fin d’intervention
- Snapshot final post‑réparation pour documenter l’état sain.
- Journal d’exécution des commandes conservé dans votre référentiel (ticket, change request).
- Plan de réversibilité : en cas d’échec, revert du snapshot Cinder.
En résumé : sans ISO, la combinaison image de secours + réparation BCD/chargeur permet une remise en service rapide, traçable et compatible cloud de Windows Server 2019 sur Red Hat OpenStack Platform 17.1. Conservez des images de secours cohérentes avec vos builds Windows et automatisez les séquences clés (diskpart
, bcdedit
, bootrec
, sfc
, bcdboot
) pour réduire davantage le MTTR.