Créer une clé d’installation de Windows UEFI et Legacy depuis LinuxMint

Sous Windows, la création de clé USB d’installation est plutôt facile : on peut utiliser l’outil maison de M$ appelé « Média Creation Tools » (MCT) ou des logiciels de création tels que Rufus qui font le travail plutôt correctement.

Sous Linux, c’est moins évident. Des outils tels que Etcher, Ventoy, Woeusb, voire la commande dd existent, mais ils demandent pas mal de manipulations et on n’est pas certain du résultat. Par ailleurs, ces outils créent un format particulier sur la clé que seuls les spécialistes savent récupérer.

S’ajoute à ces difficultés le problème des fichiers de plus de 4 Go, dont on sait qu’ils ne sont pas utilisables sur les partitions fat32, format « attendu » pour l’UEFI. Or, /source/install.wim peut dépasser les 4 Go.

L’idée de cette démo est de fabriquer une clé qui soit l’exacte réplique d’une clé d’installation faite avec l’outils M$.

I. Observation d’une clé opérationnelle fabriquée sous Windows avec MCT

Le plus simple est d’en voir des captures d’écran

1.1. Le contenu de la clé

Mon image

On peut noter qu’on a bien les tous les éléments pour booter sur DVD, sur clé en Legacy et en UEFI.

1.2. Vue du partitionnement depuis gparted

Mon image

Le clé est bien au format mbr (ms-dos) et la partition en fat32 s’est vu attribuer les drapeaux boot et lba.

1.3. Vue depuis un rapport boot-info

 => Windows 7/8/2012 is installed in the MBR of /dev/sdb.

sdb1: __________________________________________________________________________
    File system:       vfat
    Boot sector type:  Windows 8/2012: FAT32
    Boot files:        /efi/boot/bootx64.efi /efi/microsoft/boot/cdboot.efi 
                       /efi/microsoft/boot/cdboot_noprompt.efi 
                       /efi/microsoft/boot/memtest.efi /bootmgr /boot/bcd

fdisk -l (filtered): ___________________________________________________________
Disk sdb: 7.3 GiB, 7811891200 bytes, 15257600 sectors
Disk identifier: 0x0238cbf8
      Boot Start      End  Sectors  Size Id Type
sdb1  *     2048 15257599 15255552  7.3G  c W95 FAT32 (LBA)

La clé s’appuie bien un mbr adapté à Windows, elle possède les fichiers de démarrage pour L’UEFI. Elle sait donc démarrer ne Legacy et en UEFI. La suite de la démo va s’efforcer de reproduire exactement le même schéma, tant pour le partitionnement que pour le contenu.

2. Création d’une clé d’installation avec une ISO de Windows contenant un fichier /sources/install.wim  inférieur à 4 Go

Le souci des images iso de Windows 10, c’est qu’elles contiennent quasi toutes les versions de l’OS, ce qui conduit à un alourdissement des fichiers qui pour certains, dépassent les 4 Go. Or, le format fat32 ne sait pas gérer ces fichiers. On peut donc récupérer sur ce site des images iso contenant un fichier /source/install.esd réduit à ce dont on a besoin. C’est mon choix pour cette partie de démo. Dans le point 3, nous verrons le second cas.

2.1. Partitionnement de la clé usb

Le plus simple est d’utiliser gparted qu’on peut installer facilement sur LinuxMint, depuis la logithèque. On l’exécute, et on insère une clé USB vierge dont on voit la constitution ici:

Mon image

Comme l’image l’indique, on va donc créer une nouvelle table de partitions de type ms-dos (qui signifie « mbr ») car on veut qu’elle boote aussi bien en Legacy qu’en UEFI.

Rem. Pour une clé purement UEFI, on choisirait gpt, et toutes les manipulations sur le mbr qui vont suivre au point 2.3  seraient inutiles, car le mbr n’est pas utilisé dans ce mode. 

On crée une partition fat32 sur l’ensemble de la clé, et par clic droit, on lui associe les drapeaux boot et lba, comme pour la clé faite sous Windows.

Mon image

On peut dès lors ajouter le contenu complet de l’ISO de Windows 10 qu’on ouvre avec le gestionnaire d’archives, et qu’on décompresse en direction de la clé USB.

Remarque 1 : certains gestionnaires d’archive par défaut ne fonctionnent pas et peinent à lire ou à extraire le contenu de l’ISO W10. Le gestionnaire d’archives de Mate, « Engrampa », fonctionne parfaitement.

Remarque 2 : On peut aussi le faire depuis un terminal. Si l’iso s’appelle Windows10.iso et qu’elle est dans le dossier /home/ikewdu/Bureau :

sudo mkdir /media/iso
sudo mount -o loop /home/ikewdu/Bureau/windows10.iso /media/iso

Et on n’a plus qu’à copier le contenu du dossier /media/iso vers la clé USB

2.2. Résultats de l’opération de formatage et d’extraction de l’ISO Windows

La clé semble identique à celle créé sous Windows (le contenu de la clé est plus léger chez moi, car j’ai extrait le contenu de l’ISO de Dart, dont j’avais besoin pour un dépannage) :

Mon image

On vérifie avec un rapport boot-info :

=> libparted MBR boot code is installed in the MBR of /dev/sdb.

sdb1: __________________________________________________________________________

File system:       vfat
    Boot sector type:  Windows 8/2012: FAT32
    Boot files:        /efi/boot/bootx64.efi /efi/microsoft/boot/cdboot.efi 
                       /efi/microsoft/boot/cdboot_noprompt.efi 
                       /efi/microsoft/boot/memtest.efi /bootmgr /boot/bcd
fdisk -l (filtered): ___________________________________________________________ Disk sdb: 7.3 GiB, 7811891200 bytes, 15257600 sectors Disk identifier: 0x41b88db7 Boot Start End Sectors Size Id Type sdb1 * 2048 15255551 15253504 7.3G c W95 FAT32 (LBA)

Il n’y a qu’une différence, mais elle est de taille : la clé contient « libparted » dans le mbr et non les éléments nécessaires à Windows.

Bilan : la clé sera fonctionnelle en UEFI car le PC va trouver /efi/boot/bootx64.efi, mais pas en Legacy, car « Libparted » ne sera pas capable de lancer /bootmgr.

2. 3. Adaptation du mbr à Windows

On a besoin pour rectifier le mbr d’ajouter un outil à notre Linux Mint : il s’agit de ms-sys. Il permet de réécrire le mbr de toutes les manières possibles : on le trouve ici.

On choisit la dernière version, et on extrait le dossier contenu dans le  fichier compressé qu’on place par exemple sur le bureau :

Mon image

On installe le logiciel en suivant les recommandations du concepteur du logiciel :

ikewdu@ikewdu-fixe ~ $ cd Bureau
ikewdu@ikewdu-fixe ~/Bureau $ cd ms-sys-2.7.0
ikewdu@ikewdu-fixe ~/Bureau/ms-sys-2.7.0 $ make
mkdir -p build/dep
cc -MM -O2 -ansi -pedantic -Wall -c -I inc -D PACKAGE=\"ms-sys\" -D LOCALEDIR=\"/usr/local/share/locale\" -idirafter include-fallback -D_FILE_OFFSET_BITS=64 -MT build/dep/partition_info.d src/partition_info.c > build/dep/partition_info.d
mkdir -p build/obj
mkdir -p build/bin
cc -O2 -ansi -pedantic -Wall -c -I inc -D PACKAGE=\"ms-sys\" -D LOCALEDIR=\"/usr/local/share/locale\" -idirafter include-fallback -D_FILE_OFFSET_BITS=64 -o build/obj/partition_info.o (...)

Je fais l’impasse sur la liste des processus d’installation, pour ne proposer que la seconde commande :

ikewdu@ikewdu-fixe ~/Bureau/ms-sys-2.7.0 $ su
Mot de passe : 
ikewdu-fixe ms-sys-2.7.0 # make install
install -d /usr/local/bin
install -m 755 build/bin/ms-sys /usr/local/bin/ms-sys (...)

Idem. L’installation est faite, il ne reste plus qu’à réécrire le mbr.  En tapant ms-sys, on obtient toutes les options disponibles :

ikewdu@ikewdu-fixe ~ $ ms-sys
Utilisation :
 ms-sys [paramètres] [périphérique]
Paramètres :
 -1, --fat12 Écrit un secteur de démarrage pour FAT12 de type disquette
 -2, --fat32nt5 Write a FAT32 partition NT5.0 boot record to device (etc.)

Deux d’entre elles m’intéressent :

-8, --fat32nt6 Write a FAT32 partition NT6.0 boot record to device-7, 
-7  --mbr7 Écrit un Master Boot Record de type Windows 7

On va donc les appliquer à la clé USB :

ikewdu@ikewdu-fixe ~ $ sudo ms-sys -8 /dev/sdb1
[sudo] Mot de passe de ikewdu
Secteur de démarrage FAT32 NT6.0 écrit avec succès sur /dev/sdb1
ikewdu@ikewdu-fixe ~ $ sudo ms-sys -7 /dev/sdb
Master Boot Record de type Windows 7 écrit avec succès sur /dev/sdb
ikewdu@ikewdu-fixe ~ $

On vérifie avec boot-info que l’opération s’est bien passée :

 => Windows 7/8/2012 is installed in the MBR of /dev/sdb.

Il ne reste plus qu’à tester la clé. Et effectivement, le menu de démarrage d’un autre PC UEFI / Legacy me propose les deux formats de boot pour la clé :

Mon image

3. Création d’une clé avec un fichier wim de plus de 4 Go

On va maintenant imaginer qu’on est confronté à une image ISO de Windows qui contient un fichier install.wim supérieur à 4 Go. Comme c’est le cas ici.

On rappelle que le fat32 ne tolère pas de dépasser cette limite de 4 Go. On aurait donc la solution de créer une clé usb avec une partition NTFS, mais on risque de ne pas booter en UEFI. Une solution existe pour régler ce souci.

3.1. Préparation de la clé USB

A nouveau, on utilise gparted. On recrée une table de partitions ms-dos (comme en 2.1), mais cette fois, on va créer deux partitions : une partition fat32 de 1 Go à laquelle on appliquera les drapeaux boot et lba, et une simple partition NTFS sur le reste de la clé. On aboutira à ceci :

Mon image

On en profite, puisqu’on a vu comment faire au point 2.3.,  pour réparer le mbr afin de le rendre compatible avec Windows. C’est la partition /dev/sdb1 qui est concernée :

ikewdu@ikewdu-fixe ~ $ sudo ms-sys -8 /dev/sdb1
[sudo] Mot de passe de ikewdu : 
Secteur de démarrage FAT32 NT6.0 écrit avec succès sur /dev/sdb1
ikewdu@ikewdu-fixe ~ $ sudo ms-sys -7 /dev/sdb
Master Boot Record de type Windows 7 écrit avec succès sur /dev/sdb
ikewdu@ikewdu-fixe ~ $

La clé est prête et bootable. Reste à installer les fichiers de Windows 10 issus de l’image ISO

3.2. Décompression et adaptation de la clé USB à Windows 10

Pour cette partie, je m’inspire et j’adapte ce que propose ce tutoriel.

La première chose à faire est d’ouvrir l’image ISO avec le gestionnaire d’archives, et de copier le contenu intégral sur la partition NTFS, autrement dit, dans mon cas, /dev/sdb2 :

Mon image

Lorsque c’est terminé, on copie les fichiers bootmgr et bootmgr.efi, puis les dossiers boot et efi de la partition NTFS (/dev/sdb2) vers la partition fat32 (/dev/sdb1).

Mon image

Enfin, on crée sur la partition fat32 (/dev/sdb1) un nouveau dossier appelé sources, on y copie le seul fichier boot.wim (c’est le fichier qui contient le programme d’installation de Windows) qui se trouve dans le dossier sources de la partition NTFS (/dev/sdb2). Le résultat est le suivant :

Mon image

Nb. J’ai même ajouté « setup.exe » dans mon élan, mais ce n’est pas préjudiciable.

La clé est prête : elle va booter, lancer le programme d’installation, soit en Legacy, soit en UEFI (test fait sur deux PC), et le problème des fichiers supérieurs 4 Go ne sera plus pénalisant.