Votre mise à niveau in‑place de Windows Server 2012 R2 vers 2019 échoue avec 0xC1900101‑0x20017 ? Voici un guide d’atelier, pensé pour les environnements isolés (air‑gapped), qui transforme des journaux sibyllins en actions concrètes et reproductibles.
Vue d’ensemble
Lors d’une mise à niveau sur place vers Windows Server 2019, le redémarrage en phase SafeOS peut échouer avec l’erreur 0xC1900101 - 0x20017
. Les journaux setuperr.log
/setupact.log
affichent souvent :
- Échec d’initialisation Appraiser/OneSettings (
0x80070002
), erreurs réseau (0x80072EE2
) en environnement hors‑ligne. - Validation de clé produit PidGenX en erreur (
0x8A010001
) : clé/édition/canal non concordants. - Impossibilité de supprimer
HKLM\SYSTEM\Setup\Upgrade
(0x5
) : vestiges ou verrou tiers. - Erreurs de migration (
SHCopyUserTile 0x800703EE
), chargement deClipMigPlugin.dll
(0x8007007E
) : contenu$WINDOWS.~BT
corrompu. - DISM rapporte des corruptions réparées du magasin de composants.
Ce que disent réellement les journaux
Le code 0xC1900101
signale presque toujours un pilote/firmware/filtre tiers bloquant, spécialement au stade SafeOS (stockage, réseau, antivirus/EDR, snapshot, chiffrement, périphériques virtuels). Le reste du bruit hors‑ligne (Dynamic Updates, Appraiser) peut et doit être neutralisé.
Symptôme / Journal | Signification | Action efficace |
---|---|---|
0xC1900101 - 0x20017 (SafeOS/boot) | Blocage kernel au redémarrage SafeOS, souvent lié à un pilote ou filtre. | Mettre à jour/désinstaller pilotes et filtres non Microsoft ; vérifier stockage/réseau/EDR. |
PidGenX 0x8A010001 | Clé invalide, édition ou channel (VL/Retail/OEM) non concordants. | Tenter l’upgrade sans clé, ou fournir une clé correspondant exactement au média/édition. |
Appraiser / OneSettings 0x80070002 , 0x80072EE2 | Bruit attendu hors‑ligne (pas d’Internet, pas de Dynamic Updates). | Lancer setup.exe avec /dynamicupdate disable . |
ClipMigPlugin.dll , ReplacementManifests | Dossier $WINDOWS.~BT incomplet/corrompu suite à des essais précédents. | Supprimer/renommer C:\$WINDOWS.~BT et C:\$WINDOWS.~WS puis relancer. |
Accès refusé sur HKLM\SYSTEM\Setup\Upgrade | Clef verrouillée par un filtre tiers / résidu d’une tentative. | Désinstaller EDR/AV/agents, redémarrer, puis relancer. |
Causes probables, par ordre d’impact
- Pilotes de stockage (RAID/SAS/NVMe/PVSCSI/LSI), réseau (VMXNET3/Intel/Broadcom), filtres EDR/antivirus, pilotes de snapshots ou de chiffrement.
- Inadéquation clé/édition/canal (ex. clé Retail sur ISO Volume, Datacenter vs Standard).
- Dynamic Updates actifs sans Internet, générant des appels bloquants.
- Partition System Reserved/ESP trop petite ; espace disque C:\ insuffisant.
- Contenu d’installation intermédiaire
$WINDOWS.~BT
cassé.
Plan de remédiation, éprouvé en environnement hors‑ligne
- Vérifier média et correspondances
- Édition/langue/architecture identiques entre source et cible (Standard ↔ Standard, Datacenter ↔ Datacenter ; FR ↔ FR ; x64).
- Utiliser l’ISO complet de Windows Server 2019 local (copié en
C:\ISO\WS2019
ou monté sur un lecteur). - Si vous avez une clé, confirmer son channel (VL/Retail/OEM). À défaut, ne pas saisir de clé pendant l’installation et activer ensuite.
- Désactiver absolument les Dynamic Updates
setup.exe /auto upgrade /dynamicupdate disable
Dans l’interface, décocher « Télécharger les mises à jour ». - Nettoyer l’état préalable
- Supprimer/renommer
C:\$WINDOWS.~BT
etC:\$WINDOWS.~WS
.
net stop wuauserv bits appidsvc cryptsvc ren C:\Windows\SoftwareDistribution SoftwareDistribution.old ren C:\Windows\System32\catroot2 catroot2.old net start cryptsvc appidsvc bits wuauserv
- Supprimer/renommer
- Garantir l’espace disque et la taille des partitions système
- Au moins 32 Go libres sur C: (visez 40–50 Go).
- System Reserved ou ESP : ≥ 500 Mo recommandé (idéal : 550–600 Mo). Si insuffisant, l’étendre avant l’upgrade.
- Mettre à jour firmware et pilotes critiques
- Stockage (RAID/SAS/NVMe/PVSCSI/LSI), réseau (VMXNET3/Intel/Broadcom), BIOS/iDRAC/ILO.
- VMware : mettre à jour VMware Tools et la compatibilité matérielle, supprimer lecteur disquette virtuel, snapshots et périphériques inutiles ; installer le pilote PVSCSI si utilisé.
- Hyper‑V : vérifier les services d’intégration (intégrés à l’OS), supprimer périphériques inutiles.
- Serveurs Dell/HPE : actualiser BIOS/RAID/NIC via les catalogues hors‑ligne.
- Éliminer les filtres tiers pendant l’upgrade
fltmc filters
Désinstaller ou désactiver totalement AV/EDR/antimalware, agents de sauvegarde (CBT), chiffrement disque, DLP, HIPS. Un filtre résiduel bloque souvent la phase SafeOS. - Assurer l’intégrité du système
sfc /scannow DISM /online /cleanup-image /scanhealth DISM /online /cleanup-image /restorehealth
Redémarrer si réparation effectuée. - Gérer la clé produit et l’édition
- Si l’erreur PidGenX réapparaît, réessayer sans clé (sélectionner l’édition exacte) ou spécifier une clé correspondant au média :
setup.exe /auto upgrade /pkey XXXXX-XXXXX-XXXXX-XXXXX-XXXXX /dynamicupdate disable
Éviter toute « croix d’édition » (Standard → Datacenter) durant la mise à niveau. - Exécuter l’upgrade et collecter les journaux Pré‑scan de compatibilité (utile hors‑ligne) :
setup.exe /compat ScanOnly /dynamicupdate disable
En cas d’échec, consulter :C:\$WINDOWS.~BT\Sources\Panther\setuperr.log
etsetupact.log
C:\$WINDOWS.~BT\Sources\Rollback\setupact.log
(souvent le plus parlant)C:\Windows\INF\setupapi.dev.log
(nom précis des pilotes)
SetupDiagResults.log
. - Redémarrer proprement et retenter Après correction des points identifiés, relancer :
setup.exe /auto upgrade /dynamicupdate disable
Ne laisser connectés que les périphériques indispensables.
Commandes et vérifications utiles
:: Édition actuelle (confirmer la cible)
dism /online /Get-CurrentEdition
\:: Liste des pilotes tiers installés
pnputil /enum-drivers > C:\Temp\drivers.txt
\:: Ajouter/mettre à jour un pilote critique avant l’upgrade
pnputil /add-driver C:\Drivers\Storage\*.inf /install
\:: Vérifier l’espace et l’état des partitions (PowerShell)
Get-Volume; Get-Partition
\:: Vérifier s’il y a un redémarrage en attente
reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired
Arbre de décision rapide
- Le code 0xC1900101‑0x20017 apparaît‑il ? Oui → Vérifier filtres/pilotes/firmware.
- PidGenX 0x8A010001 présent ? Oui → Relancer sans clé ou avec une clé correspondant au canal/édition du média.
- Dynamic Updates activés ? Oui → Forcer
/dynamicupdate disable
. - System Reserved/ESP < 500 Mo ou C:\ < 32 Go ? Oui → Agrandir/faire de la place puis retenter.
$WINDOWS.~BT
existant ou corrompu ? Oui → Nettoyer et relancer.
Tableau de contrôle des risques SafeOS
Composant | Risque | Action préventive | Validation |
---|---|---|---|
Contrôleur stockage (RAID/SAS/NVMe/PVSCSI) | Écran noir, redémarrage en boucle | Mettre à jour le pilote, pré‑stager .inf avec pnputil | setupapi.dev.log sans erreurs, drivers.txt à jour |
Pilote réseau (VMXNET3/Intel/Broadcom) | Blocage SafeOS, timeouts | Mettre à jour, supprimer dispositifs non utilisés | Aucun avertissement ndis dans setupact.log |
EDR/AV/CBT/Chiffrement | Accès refusé, rollback | Désinstaller/stopper services et filtres (fltmc ) | Plus de filtres tiers listés |
Dynamic Updates | Erreurs Appraiser/OneSettings | /dynamicupdate disable | Absence des appels réseau dans les logs |
Partitions système | Échec configuration Boot/WinRE | ESP/System Reserved ≥ 500 Mo, WinRE activé | reagentc /info , Get-Partition |
Lecture ciblée des journaux
Panther/Rollback : cherchez des lignes proches de l’échec SafeOS mentionnant drvinst
, Failed to install driver
, api*.inf
, ou MOUPG SafeOS
. Le driver fautif (nom de fichier .sys
) est souvent explicitement cité ; sa mise à jour/suppression règle le problème.
setupapi.dev.log : filtrez sur !> (ERROR)
et sur le nom du fournisseur. Un bloc Device install (DiInstallDriver)
échoué autour du redémarrage SafeOS est un indicateur fort.
Spécificités par plateforme
VMware
- Mettre à jour VMware Tools et le niveau de compatibilité matériel.
- Installer/mettre à jour PVSCSI si utilisé ; sinon, utiliser LSI SAS pendant l’upgrade.
- Supprimer le lecteur disquette virtuel, les périphériques USB non nécessaires, et supprimer les snapshots avant la tentative.
Hyper‑V
- Les services d’intégration sont inclus ; assurez une pile réseau propre et supprimez les périphériques non utilisés.
Dell PowerEdge / HPE ProLiant
- Mettre à jour BIOS, contrôleurs RAID/NIC via les catalogues hors‑ligne.
- Vérifier l’état des volumes RAID et l’absence d’alertes matérielles avant l’upgrade.
Gestion de l’édition et des clés
- Évitez de mélanger channel (Volume/Retail/OEM). Une clé Retail avec un ISO Volume déclenche
PidGenX 0x8A010001
. - En cas de doute, ne saisissez pas de clé pendant la mise à niveau ; choisissez l’édition exacte et activez après.
- Ne tentez pas de changer d’édition au milieu d’une mise à niveau. Si un changement d’édition est nécessaire, réalisez‑le séparément et proprement.
Nettoyage et reprise après échec
- Redémarrer le serveur.
- Supprimer
$WINDOWS.~BT
/$WINDOWS.~WS
et réinitialiser WU (voir commandes plus haut). - Exécuter
sfc
etDISM
jusqu’à ce qu’aucune corruption ne soit trouvée. - Vider temporairement
%TEMP%
etC:\Windows\Temp
. - Relancer l’upgrade depuis un média local avec
/dynamicupdate disable
.
Scripts et snippets utiles
Inventaire des pilotes tiers et services non Microsoft
# PowerShell (élevé)
$drv = pnputil /enum-drivers
$drv | Out-File C:\Temp\drivers.txt
Get-Service | Where-Object {$\_.DisplayName -notmatch 'Microsoft|Windows'} |
Select-Object Status,Name,DisplayName |
Sort-Object Status,Name |
Format-Table -AutoSize
Pré‑staging de pilotes critiques
pnputil /add-driver C:\Drivers\Storage\*.inf /install
pnputil /add-driver C:\Drivers\Network\*.inf /install
Vérification WinRE et partitions
reagentc /info
Get-Partition | Sort-Object DiskNumber, PartitionNumber | Format-Table -AutoSize
Modèles de commandes Setup
:: Scan de compatibilité hors‑ligne
setup.exe /compat ScanOnly /dynamicupdate disable
\:: Mise à niveau in‑place, sans clé
setup.exe /auto upgrade /dynamicupdate disable
\:: Mise à niveau in‑place, clé spécifiée (canal/édition concordants)
setup.exe /auto upgrade /pkey XXXXX-XXXXX-XXXXX-XXXXX-XXXXX /dynamicupdate disable
Cas persistants et voies de contournement
- Identifier explicitement le pilote fautif : dans
Rollback\setupact.log
, rechercher autour de la fenêtre de rollback les marqueurs de drivers (drvinst
,Failed to install
,.sys
) et agir (mise à jour, suppression, bascule vers un pilote générique). - Changer d’approche : si le rôle/charge le permet, envisager une migration latérale : nouvelle VM Windows Server 2019 propre, puis transfert des rôles/données (AD : joindre et transférer FSMO, Fichiers :
robocopy
avec ACL, IIS : export via Web Deploy ou sauvegardeappcmd
). - Domain Controllers : l’in‑place est supporté, mais la migration latérale reste plus sûre et souvent plus rapide. Toujours sauvegarder l’état du système (System State) avant toute tentative.
Questions fréquentes
Faut‑il Internet pour l’upgrade ? Non. Désactivez les Dynamic Updates et utilisez un média local fiable.
Que signifie exactement 0xC1900101‑0x20017 ? C’est un code générique d’échec SafeOS, dont la cause est majoritairement un pilote/filtre/firmware incompatible ou défaillant.
Que faire si la clé produit refuse systématiquement ? Vérifier canal/édition/langue. En cas de doute, ne pas saisir la clé lors de l’upgrade, terminer la mise à niveau puis activer.
Combien d’espace disque faut‑il ? Minimum 32 Go libres sur C: ; 40–50 Go recommandés pour absorber $WINDOWS.~BT
et les opérations de copie.
Pourquoi agrandir la partition réservée ? Le programme d’installation doit mettre à jour les composants de démarrage/WinRE. Une partition insuffisante provoque des erreurs au redémarrage SafeOS.
Liste de contrôle finale
- Média local correspondant (édition/langue/architecture) et clé adaptée au canal.
- Dynamic Updates explicitement désactivés.
- Nettoyage de
$WINDOWS.~BT
/$WINDOWS.~WS
et réinitialisation WU. - Espace disque OK ; System Reserved/ESP ≥ 500 Mo.
- Pilotes stockage/réseau/firmware à jour ; filtres EDR/AV/CBT/chiffrement retirés.
- Intégrité OS validée (
sfc
/DISM
), pas de redémarrage en attente. - Journaux surveillés (
Panther
,Rollback
,setupapi.dev.log
), SetupDiag prêt.
À retenir
- Internet n’est pas requis, mais /dynamicupdate disable est impératif en environnement air‑gapped.
- 0xC1900101‑0x20017 est quasi toujours un problème de pilote/firmware/filtre ou un média/clé non concordants.
- Le triptyque gagnant : nettoyer
$WINDOWS.~BT
, mettre à jour les pilotes essentiels, décâbler les filtres tiers, puis valider l’espace/partitions.
Exemple d’exécution de bout en bout
- Inventorier et sauvegarder la liste des pilotes :
pnputil /enum-drivers > C:\Temp\drivers.txt
. - Désinstaller l’EDR/AV et tout agent de sauvegarde avec filtre de fichier.
- Mettre à jour BIOS/RAID/NIC (depuis vos dépôts hors‑ligne) et, sur VM, mettre à jour les outils d’intégration.
- Nettoyer
$WINDOWS.~BT
/$WINDOWS.~WS
et réinitialiser WU. - Vérifier
reagentc /info
et la taille System Reserved/ESP. - Exécuter
sfc
puisDISM
et redémarrer si requis. - Lancer
setup.exe /compat ScanOnly /dynamicupdate disable
; corriger toute incompatibilité signalée. - Procéder à l’upgrade :
setup.exe /auto upgrade /dynamicupdate disable
. - En cas d’échec, ouvrir
Rollback\setupact.log
, identifier le pilote fautif, le mettre à jour/supprimer, puis retenter.
Annexe : diagnostics express
Filtrer rapidement les erreurs drivers dans setupapi.dev.log
findstr /i /c:"!> (ERROR)" C:\Windows\INF\setupapi.dev.log > C:\Temp\setupapi-errors.txt
Lister les filtres actifs
fltmc filters > C:\Temp\filters.txt
Rechercher le symbole d’un pilote incriminé
findstr /i /c:".sys" C:\$WINDOWS.~BT\Sources\Rollback\setupact.log > C:\Temp\drivers-rollback.txt
En appliquant ce protocole, la majorité des échecs 0xC1900101‑0x20017 se résolvent sans recourir à Internet. L’essentiel est d’aborder l’upgrade comme une opération d’ingénierie : média correct, environnement maîtrisé, filtres neutralisés, pilotes/firmware à jour, et validation par les journaux.