Il peut arriver que le redémarrage d’un serveur Windows Server 2003 ne fonctionne pas comme il le faudrait.
Divers symptômes peuvent apparaître dont celui de l’écran noir avec le logo Windows et la barre de progression qui tourne en boucle avec parfois un cursor qui clignote en haut à gauche de l’écran.
Après avoir essayé tous les modes de démarrage proposé par Windows (mode sans échec, avec ou sans réseau, mode VGA, …), le serveur ne parvient toujours pas à démarrer.
Quelques fiches techniques traitent de ce dysfontionnement :
Processus de démarrage
Tout d’abord, il est intéressant de connaître le méchanisme de démarrage de Windows que l’on peut découper en cinq phases (il y en a quatre mais j’ai découpé la première en deux).
Je les ai décrites ci-après de manière très succinte mais suffisament pour identifier quel composant impliquer lors d’un problème de démarrage.
La première étape est purement matérielle et est connue sous l’appellation P.O.S.T. (Power On Self Test). Cette phase consiste à effectuer des vérification au niveau de la carte mère, du CPU, etc… Cette étape est “software agnostic”.
La première étape est purement matérielle et est connue sous l’appellation P.O.S.T. (Power On Self Test). Cette phase consiste à effectuer des vérification au niveau de la carte mère, du CPU, etc…
Cette étape est “software agnostic”.
A cette étape, le BIOS va tenter d’accéder au premier périphérique de démarrage comme spécifié dans les options du BIOS afin d’y trouver le premier secteur du disque afin de vérifier la présence du MBR (Master Boot Record). Le MBR étant identifié, il s’agit de lire le Boot Sector de la partition active. A cet instant, le Boot Sector de la partition active va se charger et chercher NTLDR pour l’exécuter.
A cette étape, le BIOS va tenter d’accéder au premier périphérique de démarrage comme spécifié dans les options du BIOS afin d’y trouver le premier secteur du disque afin de vérifier la présence du MBR (Master Boot Record). Le MBR étant identifié, il s’agit de lire le Boot Sector de la partition active.
A cet instant, le Boot Sector de la partition active va se charger et chercher NTLDR pour l’exécuter.
NTLDR se charge et bascule le mode d’exécution du processeur du mode réel en mode 32 bit puis il charge le mini driver NTFS contenu dans son code. Le fichier BOOT.INI est lu afin de lister les options de démarrage qui seront affichée à l’écran (si plus d’une option sont présentes dans le BOOT.INI). Le démarrage commence par le chargement de NTDETECT.COM qui va énumérer tout les périphériques supportés et les renvoyer à NTLDR. NTLDR va alors charger NTOSKRNL.EXE et HAL.DLL en mémoire puis charger la ruche SYSTEM de la base de registre en mémoire afin de construire la branche HKLM\System\CurrentControlSet. NTLDR lit la clé HKLM\System\Select\Current afin de déterminer quel version de CurrentControlSet il doit utiliser. NTLDR copie alors la branche CurrentControlSet sélectionnée dans HKLM\System\CurrentControlSet. NTLDR énumère la branche HKLM\System\CurrentControlSet\Services pour identifier les drivers qui ont un statut de démarrage à 0x0 afin de les charger en mémoire. NTLDR exécute alors NTOSKRNL.EXE et lui passe la liste des périphériques identifiés par NTDETECT.COM et le contrôle du processus de démarrage.
NTLDR se charge et bascule le mode d’exécution du processeur du mode réel en mode 32 bit puis il charge le mini driver NTFS contenu dans son code.
Le fichier BOOT.INI est lu afin de lister les options de démarrage qui seront affichée à l’écran (si plus d’une option sont présentes dans le BOOT.INI).
Le démarrage commence par le chargement de NTDETECT.COM qui va énumérer tout les périphériques supportés et les renvoyer à NTLDR.
NTLDR va alors charger NTOSKRNL.EXE et HAL.DLL en mémoire puis charger la ruche SYSTEM de la base de registre en mémoire afin de construire la branche HKLM\System\CurrentControlSet.
NTLDR lit la clé HKLM\System\Select\Current afin de déterminer quel version de CurrentControlSet il doit utiliser.
NTLDR copie alors la branche CurrentControlSet sélectionnée dans HKLM\System\CurrentControlSet.
NTLDR énumère la branche HKLM\System\CurrentControlSet\Services pour identifier les drivers qui ont un statut de démarrage à 0x0 afin de les charger en mémoire.
NTLDR exécute alors NTOSKRNL.EXE et lui passe la liste des périphériques identifiés par NTDETECT.COM et le contrôle du processus de démarrage.
Le kernel affiche le logo Windows et la barre de progression. Le kernel créé la branche HKLM\Hardware avec les données qui lui ont été transmises par NTLDR. Le kernel créé la branche HKLM\System\Clone à partir du contenu du CurrentControlSet sélectionné au démarrage. Le kernel initialise les drivers ayant un statut de démarrage à 0xà identifiés par NTLDR. Le kernel énumère la branche HKLM\System\CurrentControlSet\Services pour identifier les drivers qui ont un statut de démarrage à 0x1 afin de les charger en mémoire et les initialiser. Le kernel exécute SMSS.EXE (Session Manager Subsystem). SMSS.EXE démarre les autres subsystems et les services, vérifie si un ChkDsk doit être exécuté, initialise la base de registre, détermine et configure la configuration de pagination, et enfin charge CSRSS.EXE (Client/Server Run-time SubSystem ). CSRSS.EXE initie Winlogon. SMSS.EXE démarre les drivers ayant un statut de démarrage à 0x2.
Le kernel affiche le logo Windows et la barre de progression.
Le kernel créé la branche HKLM\Hardware avec les données qui lui ont été transmises par NTLDR.
Le kernel créé la branche HKLM\System\Clone à partir du contenu du CurrentControlSet sélectionné au démarrage.
Le kernel initialise les drivers ayant un statut de démarrage à 0xà identifiés par NTLDR.
Le kernel énumère la branche HKLM\System\CurrentControlSet\Services pour identifier les drivers qui ont un statut de démarrage à 0x1 afin de les charger en mémoire et les initialiser.
Le kernel exécute SMSS.EXE (Session Manager Subsystem).
SMSS.EXE démarre les autres subsystems et les services, vérifie si un ChkDsk doit être exécuté, initialise la base de registre, détermine et configure la configuration de pagination, et enfin charge CSRSS.EXE (Client/Server Run-time SubSystem ).
CSRSS.EXE initie Winlogon.
SMSS.EXE démarre les drivers ayant un statut de démarrage à 0x2.
WINLOGON.EXE exécute LSASS.EXE (Local Security Authority Subsystem) qui permet d’interroger la base SAM et/ou Active Directory. WINLOGON.EXE affiche la fenêtre d’authentification (Ctrl+Alt+Del) SERVICES.EXE (précédemment chargé par SMSS.EXE) identifie les services ayant un statut de démarrage à 0x2 n’étant pas encore chargé. SERVICES.EXE va tenter de démarrer les drivers ayant un statut de démarrage à 0x3.
WINLOGON.EXE exécute LSASS.EXE (Local Security Authority Subsystem) qui permet d’interroger la base SAM et/ou Active Directory.
WINLOGON.EXE affiche la fenêtre d’authentification (Ctrl+Alt+Del)
SERVICES.EXE (précédemment chargé par SMSS.EXE) identifie les services ayant un statut de démarrage à 0x2 n’étant pas encore chargé.
SERVICES.EXE va tenter de démarrer les drivers ayant un statut de démarrage à 0x3.
Pour le reste du processus de logon concernant l’authentification, ce n’est plus du ressort de l’équipe Core et je ne m’aventurerais pas sur ce terrain mais nous avons l’essentiel.
Plus de détails sur les deux premières phases sont disponibles ici :
Revenons à notre problème de démarrage. Nous pouvons sans trop nous avancer dire qu’il est situé dans l’étape assumée par le kernel.
Donc potentiellement, il peut y avoir plusieurs causes à ce problème et je vais tenter d’en aborder certaines :
De quoi a t’on besoin pour traiter ce problème ?
Les outils indispensables pour traiter ce type de problème :
Il est tout a fait possible de se passer de WinPE mais il s’avère souvent qu’il est plus pratique de l’utiliser que la Recovery Console.
Création d’une image WinPE 2.1
Méthode 1 – Vérification de la consistence du volume système
Un volume sain présentera le résultat suivant :
Dans le cas contraire, il sera présenté un certain nombre d’erreurs et le statut de Check Disk devrait indiquer ce qui a été corrigé ou non.
En fonction du nombre et de l’importance des erreurs, un redémarrage pourra être effectué afin de vérifier si le problème de démarrage survient toujours.
Si oui, passer à la méthode suivante.
Méthode 2 – Utilisation d’une copie antérieure de la base de registre
Après le premier logon suivant l’installation de Windows, une copie des ruches de la base de registre est effectuée dans le dossier C:\Windows\Repair.
Additionnellement, a chaque fois qu’une sauvegarde impliquant un System State complet est initiée, cette copie est effectuée.
L’idée ici est de démarrer Windows sur une version antérieure de la base de registre qui serait jugée fonctionnelle.
Si cela ne résoud pas le problème, effectuer le manipulation dans l’autre sens :
Passer à la méthode suivante.
Méthode 3 – Désactivation de drivers filtre – méthode simple
Dans les modes de démarrage sans échec, un nombre limité de driver sont chargés en mémoire mais il se peut qu’une application ait modifié la liste initiale de ces drivers pour pouvoir être chargé dans tous les cas.
Un driver de stockage pourrait éventuellement avoir besoin d’être chargé même en mode sans échec.
Cette méthode consiste à désactiver les drivers filtres internant très tôt dans le processus de démarrage afin de vérifier s’ils interviennent dans le dysfonctionnement.
Elle a pour avantage de respecter les meilleures pratiques mais se révèle fastidieuse vu le nombre de drivers et services qui sont listés.
Il faut donc évaluer la complexité de cette méthode avec la méthode suivante (n’oublions pas que même en mode sans échec, le serveur ne démarre pas) qui permet d’identifier plus rapidement un driver posant potentiellement problème.
Si le serveur démarre, faire en sorte de réinstaller une version stable du ou des drivers qui ont été désactivés.
Sinon, suivre la procédure suivante.
Méthode 3 bis – Désactivation de drivers filtre du mode Safe Mode (Mode sans échec) – méthode avancée
Cette méthode a l’avantage de permettre l’identification d’un driver qui poserait problème dans une liste très réduite puis de le désactiver pour un démarrage normal.
Cependant, elle recquiert une certaine prudence car l’on manipule la base de registre. Donc, comme diraient certains : Use with caution ! En tout cas, avec l’aide d’un ingénieur support, vous ne vous poserez pas de questions.
Note : identifier les drivers Anti-Virus, gestionnaires de quota, filter drivers OEM, drivers de carte de stockage OEM, …
Si le serveur démarre, désactiver le ou les drivers de manière permanente depuis Device Manager :
Après le démarrage, faire en sorte de réinstaller une version stable du ou des drivers qui ont été désactivés.
Si le serveur ne démarre toujours pas… il ne reste que peu de solutions… très peu.
Suivre donc la méthode suivante.
Méthode 4 – Réparation de l’installation
Note : munissez vous de la clé produit car lors des phases du setup en mode graphique un certain nombre d’informations, dont celle-ci, seront demandées.
Si la réparation ne permet toujours pas de démarrer le serveur… il n’y a plus qu’une solution…
Méthode 5 – Reinstallation et/ou restauration du système
Parfois il vaut mieux gagner du temps et rendre le service disponible plus rapidement en passant par une réinstallation de Windows suivi (dans le meilleur des cas) par une restauration éventuelle du système mais surtout des données.
Tout dépend de la complexité de la configuration du serveur et de sa criticité.
Guillaume
Windows Core Support Escalation Engineer