Migrer ou cloner une partition Windows d'un disque HDD en mode BIOS/MBR, vers un SSD en mode UEFI/GPT avec des logiciels libres (Clonezilla dans ce cas)


Table des matières

Introduction
Prérequis
Compétences
Matériel
Logiciel
Nomenclature
Procédure de base
Quelques pistes si ça ne fonctionne pas...
Documentation, pour aller plus loin...
Historique de révisions

Introduction

Ce tutoriel vous guide pas à pas pour migrer votre installation de Windows qui est actuellement sur un disque dur de votre PC vers un nouveau disque, en l'occurrence un SSD. A vrai dire, vous pouvez aussi bien migrer vers un autre HDD.

La spécificité de ce tutoriel est qu'il utilise les outils fournis par Microsoft avec Windows ainsi que des logiciels libres (Clonezilla principalement, mais si quelque chose devait mal tourner vous pouvez avoir besoin d'utiliser fdisk, gdisk ou testdisk pour ne citer qu'eux). Quand j'ai voulu faire cette migration je n'ai pas trouvé de tutoriel expliquant de bout en bout comment faire cette migration juste avec les outils de Microsoft et des logiciels libres.

Typiquement, vous pouvez avoir envie/besoin de faire cela car vous avez acheté un nouveau disque pour remplacer l'ancien (par exemple car l'ancien montre des signes de faiblesse, ou vous voulez améliorer la réactivité de votre système).

En plus de la migration du système d'exploitation, ce tutoriel vous explique comment passer d'un démarrage en mode BIOS/MBR à un démarrage en mode UEFI/GPT.

Succinctement la démarche est la suivante, d'abord installer le nouveau disque dans le PC, et initialiser la table de partition selon les normes Microsoft. Puis cloner/dupliquer la partition contenant le système d'exploitation à l'aide de Clonezilla. Ensuite et avant de redémarrer dans le clone de Windows sur le SSD, faire quelques modifications dans le registre pour que la lettre de lecteur C: pointe vers la bonne partition et éventuellement modifier le mode SATA en AHCI si vous le modifiez aussi dans le UEFI/BIOS. Après cela, on va préparer la partition système EFI/ESP pour que le PC puisse démarrer dessus et qu'il démarre sur le Windows du SSD. Finalement, une fois dans le Windows du SSD, on va réactiver l'"environnement de récupération de Windows".

Mise en garde : Faites une sauvegarde de vos données avant toute opération. Personne n'est à l'abri d'une mauvaise manipulation ou d'une erreur.

Prérequis

Compétences

Niveau de difficulté : Difficile.

Vous devez être à l'aise au niveau de l'utilisation de la ligne de commande dans Windows, mais aussi assez à l'aise pour gérer les partitions de votre disque. Savoir modifier le paramétrage de votre Firmware UEFI/BIOS et aussi nécessaire. Ce tutoriel guide pas à pas pour la majorité des opérations. Certaines n'ont pas été détaillées par souci de simplicité et d'efficacité.

Matériel

Le PC où vous voulez installer le SSD. Il faut qu'il soit en état de marche. De plus il doit avoir un firmware UEFI. S'il n'a que un BIOS standard, sans UEFI, ce tutoriel n'est pas adapté.

Clé(s) USB ou plusieurs CD/DVD sur lequel vous aurez mis Clonezilla, System rescue CD et un environnement de démarrage Windows PE, ou Windows RE, ou le DVD/Disque d'installation de Windows.

Le disque SSD (testé avec Samsung SSD 860 EVO 250GB). Il doit avoir une taille suffisante pour contenir votre partition de Windows. Dans tous les cas, la taille de la partition qui contiendra Windows sur le SSD doit être au moins égale à la taille de la partition Windows du HDD que vous voulez cloner. Au besoin, pour remplir ce critère, réduisez la taille de votre partition Windows avec le gestionnaire de disque de Windows par exemple (ou un autre outil de gestion de partition, comme gparted, sur le System Rescue CD). Cherchez sur internet si vous ne savez pas comment faire.

Logiciel

Windows 10 installé (en version 64 bits) (testé avec Win10 v1709)

Windows 10 PE ou support d'installation de Windows 10 (clé USB ou DVD) - En Version 64 bits (testé avec un support d'installation de Win10 v1804)

System rescue CD (version 5.2.2 par exemple)

Clonezilla installé sur une clé ou un CD. Bien vérifier avant que votre système arrive à démarrer dessus. (Testé avec Clonezilla 2.5.5-38)

Nomenclature

SSD : désigne le nouveau SSD

HDD : désigne votre disque actuel, sur lequel est installé Windows

WinPE : un environnement de démarrage Windows PE, ou Windows RE, ou le DVD/Disque d'installation de Windows. Il doit être sur un support amovible (USB, CD ou DVD)

S: La lettre de lecteur affectée à la partition Système EFI qui sera sur le nouveau SSD (parfois appelée ESP, EFI_System_Partition ou encore SYSTEM, ou EFI)

N: Le clone de Windows, sur le SSD

O: Le Windows cloné, sur le HDD

C: La partition dans laquelle est installée Windows, lorsqu'on est dans Windows (que ce soit le windows cloné, ou le clone)

Les commandes doivent être lancées en tant qu'administrateur.

Procédure de base

  • Fixer et brancher le SSD dans l’ordinateur

  • Désactiver Windows FastStart (cf votre moteur de recherche préféré)
  • Initialiser et partitionner le disque à l'aide de Windows

    • Démarrer sur le Windows installé ou WinPE

    • Pour initialiser le disque, d'abord créer une table de partition, puis partitionner le disque. Pour ce faire :

      • Suivre les instructions de partitionnement UEFI/GPT selon Microsoft. Ci-dessous mon exemple, mais peut-être avez-vous besoin d'une partition "recovery" aussi, ou votre configuration nécessite quelques aménagements. Dans ce cas, voir les instructions de Microsoft et adapter pour vos besoins.
      • Par exemple: une partition EFI de 260Mo, une partition Microsoft Reserved (MSR) de 16Mo, une partition pour Windows (taille au moins égale à la taille de la partition de Windows à cloner). Pour informations, dans diskpart, les tailles que vous donnez en MB/Mo sont en réalité des MiB/Mio (2^20 = 1024^2 octets).
        • Ouvrir une invite de commande en mode administrateur et lancer diskpart. Et une fois dans diskpart :
          • list disk pour lister les disques et connaître le n° du SSD.
          • select disk # avec le numéro du SSD à la place de #
          • clean Supprime le contenu du disque / l'initialise
          • convert gpt Définit que le disque aura une table de partition GPT
          • create partition efi size=260 Crée une partition EFI de 260MiB
          • format quick fs=fat32 label="System" Formater la partition EFI au format FAT32
          • assign letter="S" Lui donner la lettre S
          • create partition msr size=16 Créer une partition Microsoft Reserved de 16MiB
          • create partition primary Créer la partition pour Windows (l'équivalent du C:)
          • format quick fs=ntfs label="Windows" Formater la partition pour Windows au format NTFS
          • assign letter="N" Lui donner la lettre N
          • list volume Liste les volumes. Permet de voir la table de partition.
          • exit Quitte diskpart
  • Cloner le Windows installé sur le HDD. Ceci sera fait à l'aide de Clonezilla

    • Redémarrer dans Clonezilla
    • Une fois dans clonezilla, et si vous êtes confortable avec les lignes de commande Linux, éventuellement supprimer de la partition Windows du HDD les fichiers pagefile.sys, hyberfil.sys (désactiver windows faststart avant), swapfile.sys.
    • Cloner la partition Windows du HDD vers le SSD (de préférence, partition de même taille, et de toutes façons, la partition de destination doit être plus grande que la source. Si ce n'est pas le cas, réduisez d'abord la taille de votre partition Windows depuis Windows). Dans clonezilla, utiliser le mode Partition vers Partition, et en mode Expert. Utiliser les options -e1 auto (automatically adjust file system geometry for a ntfs boot partition if exists) -e2 (sfdisk uses CHS of hard drive from EDD (for non grub loader) -r (resize filesystem to fit partition size of target) -m (do NOT clone boot loader) -v (verbose)
    • Optionnellement cacher la partition contenant le windows source de la table de partition du disque source (si vous ne savez pas à quoi ça sert, passez votre chemin). Pour cela modifier le type de partition de la partition NTFS de windows (en principe, NTFS a un id de « 7 ». On peut utiliser id 17 pour la partition cachée : 17 correspond à « IFS Hidden »). Utiliser cfdisk ou fdisk pour faire ce changement (ce sont des programmes linux).
  • Dans le Firmware UEFI (ou BIOS-UEFI), on peut en profiter pour passer du mode SATA "IDE" vers "AHCI". Windows n'aime pas ce changement et il faut donc faire une opération dans le registre qui est détaillée ci-dessous. Tant que vous ne le faites pas, vous aurez un écran de plantage bleu de windows au démarrage (BSOD).

  • Si vous voulez être sûr de ne pas faire de bêtise dans le Windows que vous venez de cloner, je vous conseille d'éteindre l’ordinateur & de débrancher l’ancien disque. Ainsi vous ne risquez pas de modifier le mauvais fichier de registre (en l'occurrence celui de votre Windows sur le HDD)

  • Effectuer quelques opérations sur le Windows de destination (celui sur le SSD) avant qu'on ne démarre dessus. En particulier corriger le registre pour affecter la lettre de lecteur C: à la bonne partition, et si le paramétrage du Firmware UEFI (BIOS-UEFI) a été modifié pour passer de SATA Mode PCI vers AHCI, on va aussi faire ce changement pour que ca fonctionne.

    • Redémarrer dans WinPE (en Mode UEFI, pas MBR !)
      • Tout d'abord déterminer la lettre de lecteur affectée au clone de Windows, celui qui est sur le SSD. Ou, s'il n'y a pas de lettre affectée, lui en donner une, par exemple N: (lettre utilisée dans les exemples qui suivent)
        • Pour cela, lancer dans diskpart
          • list volume
          Ce qui retourne la liste des volumes avec la lettre de lecteur qui a été affectée à chacun.
        • Si aucune lettre de lecteur n'est affectée, il faut alors lui en affecter une. Pour cela, lancer dans diskpart
          • select volume # (avec # étant le numéro du volume qui contient le nouveau windows)
          • assign letter=N
          S'il n'est pas possible d'utiliser select volume alors faire comme ceci
          • list disk
          • select disk # (# étant le numéro affecté au SSD)
          • list partition
          • select partition # (# étant le numéro affecté à la partition de Windows sur le SSD, probablement 3)
          • assign letter=N
      • Faire un CHKDSK /F sur la lettre du nouveau Win
      • Pour que la partition C: utilisée par Windows soit celle du SSD et pas celle de l’ancien disque, modifier une clé de registre du nouveau Windows :
        • Lancer REGEDIT et dans le registre HKEY_LOCAL_MACHINE monter la ruche N:\Windows\System32\Config\SYSTEM. Lui donner le nom "NewWin" On s’intéresse à HKEY_LOCAL_MACHINE\NewWin\MountedDevices. Ce sont là les valeurs qui sont dans le registre "HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices" lorsqu'on est dans l'installation de Windows.
          • Dans HKEY_LOCAL_MACHINE\NewWin\MountedDevices modifier la lettre de lecteur C: en renommant \DosDevices\C: par \DosDevices\O: (car la valeur fait référence à la partition de l'ancien Windows sur le HDD et on ne veut pas, en démarrant, utiliser cette partition mais celle de son clone qui est sur le SSD). Ainsi, lorsqu'on démarrera dans le nouveau Windows, la partition contenant le Windows sur le HDD aura la lettre O:, et la partition contenant le Windows sur le SSD aura la lettre C:
          • Créer une nouvelle valeur binaire nommée \DosDevices\C: et lui donner comme contenu celui de \DosDevices\N: qui est renseignée dans le registre WinPE, c'est-à-dire là HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices (C: étant la lettre qu'utilisait le Windows du HDD comme partition où il y a le dossier \Windows)
          • ATTENTION: Bien vérifier que la copie a fonctionné et qu'il y a les bonnes valeurs, car dans mes essais, j'ai du m'y reprendre à 2 fois car le 1er "coller" ne collait pas ce que je voulais.
          • En principe c'est tout. Mais d'après certaines sources, il y aurait une clé \\?\Volume{GUID} ayant le même contenu que le \DosDevices\O: qu’on vient de modifier. Chez moi ce n'était pas le cas. Si vous avez une telle valeur, alors il faut lui donner le contenu de \DosDevices\N: depuis le registre WinPE
      • Si en même temps que la migration on veut aussi passer du mode SATA IDE vers AHCI alors il faut encore faire ceci. Cela a été repris du site tomshardware.co.uk
        • Toujours dans REGEDIT avec la ruche montée en HKEY_LOCAL_MACHINE\NewWin
        • Aller à HKEY_LOCAL_MACHINE\NewWin\ControlSet000\Services\storahci\StartOverride
        • Changer la valeur DWORD de 3 à 0.
        • Au redémarrage, si ça n'a pas été fait, changer la paramétrage du contrôleur SATA de IDE à AHCI. Au redémarrage, Windows devrait directement démarrer correctement et sans plantage (BSOD).
      • Rendre le disque bootable en installant les outils EFI de microsoft et configurant le Magasin BCD (BCD Store)
        • D'abord assigner une lettre de lecteur à la partition ESP
          • MOUNTVOL S: /S
          Si ca n'a pas fonctionné, faire comme ceci dans diskpart
          • list disk
          • select disk # (# est le numero du SSD retourné par list disk)
          • list partition
          • select partition # (# est probablement 1)
          • assign letter=S
        • Puis lancer bcdboot N:\windows /l fr-fr /s S: /f UEFI
          • N:\Windows est le répertoire contenant le clone de Windows sur le SSD)
          • S: = partition EFI
  • Redémarrer, et avant le lancement de Windows vérifier votre UEFI (ou BIOS-UEFI). Il faut qu'il soit configuré pour démarrer par défaut en mode UEFI et pas en mode BIOS. Penser aussi à corriger le paramétrage SATA si cela a été modifié dans le registre de Windows.

    Le paramétrage du démarrage avec bcdboot N:\windows /l fr-fr /s S: /f UEFI a normalement créé le magasin BCD, mis tous les fichiers EFI sur la partition SYSTEME (ESP, partiton EFI, la 1ère du SSD) et dit au firmware UEFI qu'il doit automatiquement démarrer avec le gestionnaire de démarrage (boot manager) de Windows.

  • Une fois qu’on a réussi à démarrer dans la copie de Windows

    • Réactiver le "FastBoot"
    • Réactiver l'environnement de récupération de Windows en lançant, depuis une ligne de commande avec les droits administrateur, la commande reagentc.exe /enable. Vérifier avec reagentc.exe /info. Et s'il y a une erreur essayer avec reagentc.exe /enable /setreimage /path C:\Recovery\WindowsREC:\Recovery\WindowsRE est le dossier où se trouve le fichier Winre.wim
    • Vérifier que tout est en ordre. Eventuellement donner un nouveau nom à votre partition C: (pour la différencier de celle sur le HDD) en lançant: LABEL [drive:][label]
    • Redémarrer encore une fois en laissant le processus de démarrage se faire tout seul pour vérifier que tout est ok.
  • Réinsérer l'ancien disque dur.

  • Normalement, il devrait être possible de redémarrer dans l'ancien Windows, du moment que vous savez comment booter en MBR, et sous réserve de ne pas avoir modifié le mode SATA dans le UEFI/BIOS. SI c'est le cas, vous pouvez envisager de modifier le registre du Windows du HDD, ou de modifier le paramétrage du UEFI/BIOS.

    Si vous avez aussi Linux d'installé sur le HDD, il devrait toujours être possible de le démarrer en mode BIOS

  • On peut diminuer/augmenter la taille de la partition C: du SSD (Pour un SSD TLC ou VNAND, on peut par exemple laisser de l’espace libre à la fin ~10 % de la capacité du disque d'après le logiciel Samsung Magician, pour un SSD 860 EVO)

  • En principe, puisqu’on boot en EFI on peut enlever sur le clone Windows sur le SSD les fichiers \bootmgr et \Boot\BCD puisque ce sont ceux qui étaient utilisés pour un boot en mode BIOS/MBR et que désormais on est en EFI. Vous pouvez d'abord les renommer et vérifier que ca ne change rien au prochain boot, plutôt que de les supprimer tout de suite.

Quelques pistes si ça ne fonctionne pas...

  • Faire un chkdsk sur la nouvelle partition
  • Recréer le bootsector du NTFS avec testdisk (dispo sur System Rescue CD, mais peut être aussi dans Clonezilla ? Je n'ai pas vérifié)
  • Vérifier le BCD:
    • On peut vérifier si le Magasin BCD est ok en lançant (en tant qu'administrateur) bcdedit /store s:\EFI\Boot\Microsoft\BCD /enum (Si la partition système n'est pas montée sur S:, lancer Mountvol s: /s )
      • Doc BCDEDIT (sur la page, il y a aussi les liens vers bcdboot (initialise BCD et copie fichiers de démarrage sur la partition systeme) et bootsect (pour basculer entre NTLDR et Bootmgr)
      • https://msdn.microsoft.com/fr-fr/library/windows/hardware/mt450468(v=vs.85).aspx
      • https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/bcd-system-store-settings-for-uefi
  • Vérifier que la partition EFI est bien initialisée (présence des fichiers \EFI, \EFI\Boot\, \EFI\Microsoft\...) Si ce n'est pas le cas, il y a eu un problème avec bcdboot N:\windows /l fr-fr /s S: /f UEFI
  • Vérifier le boot manager du bios (démarrage en UEFI ou MBR ? Gestionnaire de démarrage par défaut ? Présence du gestionnaire de démarrage de Windows ?)
  • A priori, pas utile : Commandes à lancer dans WinPE
    • Pour recréer le boot sector de la partition systeme (EFI): bootrec /fixboot
    • Pour chercher les OS sur le disque et les mettre dans le bootloader bootrec /scanos
  • Quelques commandes de bcdedit pour modifier la valeur de certains éléments du magasin BCD. Inutile car le BCD Store qui est utilisé lorsqu'on démarre en mode EFI n'est pas le même que celui utilisé dans un démarrage en mode MBR. Donc, pas besoin de chercher à modifier le BCD. Je garde pour info : les lettres sont celles telles que définies dans le système où on est (WinPE par ex). Doc BCDEDIT
    • bcdedit /set {bootmgr} device \Device\HarddiskVolume1
    • bcdedit /set {default} device \Device\HarddiskVolume3
    • bcdedit /set {default} osdevice \Device\HarddiskVolume3
    • Ou à la place de \Device\HarddiskVolume1 mettre les lettres de lecteur :
    • bcdedit /set {bootmgr} device partition=S:
    • bcdedit /set {default} device partition=C:
    • bcdedit /set {default} osdevice partition=C:

Documentation, pour aller plus loin...

A propos du EFI/UEFI:

A propos de l'entrée MountedDevices du registre: http://diddy.boot-land.net/firadisk/files/mounteddevices.htm

Si on veut y accéder, par défaut les fichiers du BCD sont cachés. Pour les rendre visibles:

  • attrib bcd -s -h -r
  • mv bcd bcd.bak
  • bootrec /rebuildbcd

Documentation bcdedit:

MBR Partition ID

A propos des disk ID (=Disk signatures):

Si besoin de supprimer du registre les entrées de disques qui ne sont pas connectés ou sans lettre assignée lancer: mountvol /R. Ce programme permet aussi de lister les lettres de volumes avec leur GUID (GUID pour ce système uniquement, il n’est pas stocké dans la partition, ni ailleurs sur le disque, il est assigné par windows pour un couple (signature de disque/partition offset) dans une instance de windows alors que dans une autre instance de windows la même partition sur le même disque aura ce GUID différent)

Changer le label du volume: commande LABEL [drive:][label]

Historique de révisions

  • Vous trouverez la dernière version de ce tutoriel sur ma page perso de tutoriels informatique. Vous y trouverez aussi la version HTML, PDF et TXT.
  • 2018-06-17 : Ajout d'une note indiquant que ce tutoriel utilise des logiciels libres
  • 2018-06-11 : Correction de la forme et de fautes d'orthographe
  • 2018-05-28