Windows Server 2012 R2 → 2019 : corriger l’erreur 0xC1900101‑0x20017 (SafeOS/boot) en environnement hors‑ligne

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.

Sommaire

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 de ClipMigPlugin.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 / JournalSignificationAction 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 0x8A010001Clé 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, 0x80072EE2Bruit attendu hors‑ligne (pas d’Internet, pas de Dynamic Updates).Lancer setup.exe avec /dynamicupdate disable.
ClipMigPlugin.dll, ReplacementManifestsDossier $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\UpgradeClef 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

  1. Pilotes de stockage (RAID/SAS/NVMe/PVSCSI/LSI), réseau (VMXNET3/Intel/Broadcom), filtres EDR/antivirus, pilotes de snapshots ou de chiffrement.
  2. Inadéquation clé/édition/canal (ex. clé Retail sur ISO Volume, Datacenter vs Standard).
  3. Dynamic Updates actifs sans Internet, générant des appels bloquants.
  4. Partition System Reserved/ESP trop petite ; espace disque C:\ insuffisant.
  5. Contenu d’installation intermédiaire $WINDOWS.~BT cassé.

Plan de remédiation, éprouvé en environnement hors‑ligne

  1. 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.
  2. Désactiver absolument les Dynamic Updates setup.exe /auto upgrade /dynamicupdate disable Dans l’interface, décocher « Télécharger les mises à jour ».
  3. Nettoyer l’état préalable
    • Supprimer/renommer C:\$WINDOWS.~BT et C:\$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
  4. 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.
    Astuce : sur VM, augmentez temporairement le disque, réduisez C: de ~500 Mo, puis étendez la partition réservée avec un outil de partitionnement compatible. Sur UEFI, assurez une ESP ≥ 260 Mo (recommandé ≥ 500 Mo).
  5. 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.
  6. É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.
  7. 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.
  8. 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.
  9. 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 et setupact.log
    • C:\$WINDOWS.~BT\Sources\Rollback\setupact.log (souvent le plus parlant)
    • C:\Windows\INF\setupapi.dev.log (nom précis des pilotes)
    Analyse automatique : exécuter SetupDiag.exe hors‑ligne et lire SetupDiagResults.log.
  10. 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

ComposantRisqueAction préventiveValidation
Contrôleur stockage (RAID/SAS/NVMe/PVSCSI)Écran noir, redémarrage en boucleMettre à jour le pilote, pré‑stager .inf avec pnputilsetupapi.dev.log sans erreurs, drivers.txt à jour
Pilote réseau (VMXNET3/Intel/Broadcom)Blocage SafeOS, timeoutsMettre à jour, supprimer dispositifs non utilisésAucun avertissement ndis dans setupact.log
EDR/AV/CBT/ChiffrementAccès refusé, rollbackDésinstaller/stopper services et filtres (fltmc)Plus de filtres tiers listés
Dynamic UpdatesErreurs Appraiser/OneSettings/dynamicupdate disableAbsence des appels réseau dans les logs
Partitions systèmeÉchec configuration Boot/WinREESP/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

  1. Redémarrer le serveur.
  2. Supprimer $WINDOWS.~BT / $WINDOWS.~WS et réinitialiser WU (voir commandes plus haut).
  3. Exécuter sfc et DISM jusqu’à ce qu’aucune corruption ne soit trouvée.
  4. Vider temporairement %TEMP% et C:\Windows\Temp.
  5. 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 sauvegarde appcmd).
  • 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

  1. Inventorier et sauvegarder la liste des pilotes : pnputil /enum-drivers > C:\Temp\drivers.txt.
  2. Désinstaller l’EDR/AV et tout agent de sauvegarde avec filtre de fichier.
  3. Mettre à jour BIOS/RAID/NIC (depuis vos dépôts hors‑ligne) et, sur VM, mettre à jour les outils d’intégration.
  4. Nettoyer $WINDOWS.~BT/$WINDOWS.~WS et réinitialiser WU.
  5. Vérifier reagentc /info et la taille System Reserved/ESP.
  6. Exécuter sfc puis DISM et redémarrer si requis.
  7. Lancer setup.exe /compat ScanOnly /dynamicupdate disable ; corriger toute incompatibilité signalée.
  8. Procéder à l’upgrade : setup.exe /auto upgrade /dynamicupdate disable.
  9. 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:"!&gt; (ERROR)" C:\Windows\INF\setupapi.dev.log &gt; C:\Temp\setupapi-errors.txt

Lister les filtres actifs

fltmc filters &gt; C:\Temp\filters.txt

Rechercher le symbole d’un pilote incriminé

findstr /i /c:".sys" C:\$WINDOWS.~BT\Sources\Rollback\setupact.log &gt; 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.

Sommaire