Créer un triple boot en uefi

1. Présentation de la situation

Si le principe d’associer 2 Windows et un Linux n’est pas compliqué en soi, le souci réside dans le résultat : Grub va s’installer dans la partition efi et proposer un menu de ce genre :

1. Ubuntu.
2. Ubunty Recovery
3. Windows Boot Manager

Pourquoi  un seul Windows ? Tout simplement parce que grub cherche le fichier bootmgfw.efi dans le dossier /efi/Microsoft/boot de la partition efi. Il faudra donc lancer WBM pour enfin obtenir le choix entre les deux versions de Windows de son dual-boot. C’est fonctionnel, mais lourd. Comment éviter cela ?

2. Situation de départ  un double boot Windows en uefi.

Ici, il s’agit de W10 /W7 (voir ce tuto d’installation), mais c’est pareil pour W10 et W8. On fait un état du gestionnaire de disque et des fichiers de démarrage depuis W10.

Mon image

On voit que c’est W10 qui commande le dual-boot. W10 est installé sur C, et W7 est placé sur D.

3. Création d’une seconde partition efi.

Pour rendre le triple boot possible, il va falloir créer une seconde partition efi pour faire comprendre à grub qu’on a deux lanceurs windows différents, un peu comme si on avait deux disques durs différents. L’déal serait de créer la seconde partition efi avant le disque C. Mais pour mon exemple, je vais la placer après.

On réduit donc la partition C pour créer un espace libre  de 200 Mo, et on passe en invite de commandes. La série suivante permet de créer une nouvelle partition efi et de lui attribuer la lettre Z:

C:\windows\system32>diskpart
Microsoft DiskPart version 10.0.10240
Copyright (C) 1999-2013 Microsoft Corporation.
Sur l’ordinateur : DESKTOP-I2H691G

DISKPART> sel disk 0
Le disque 0 est maintenant le disque sélectionné.

DISKPART> create partition efi
DiskPart a réussi à créer la partition spécifiée.

DISKPART> format fs=fat32
  100 pour cent effectués
DiskPart a formaté le volume.

DISKPART> assign letter=z
DiskPart a correctement assigné la lettre de lecteur ou le point de montage.

DISKPART>exit
C:\windows\system32>

Mon image

On a donc maintenant une nouvelle partition efi système de 200 Mo

4. Création des fichiers de démarrage.

La commande bcdboot, tapée depuis Windows 10, va se limiter à la copie des fichiers depuis /windows/system32/ vers la partition efi. Il suffit donc de faire les bons choix. Dans mon cas, la commande est simple :

bcdboot d:\windows /l fr-FR /s z:
Les fichiers ont été correctement créés

On a copié les fichiers de démarrage de W7 dans la nouvelle partition. La commande ne cherche pas d’autre version de Windows, ce qui nous convient bien. On vérifie via une série de dir :

Mon image

La vérification via la commande dir montre bien que les fichiers sont correctement créés. En revanche, la commande bcdedit /v montre que c’est toujours la première partition efi qui commande le démarrage. Un extrait pour preuve :

C:\windows\system32>bcdedit /v
Gestionnaire de démarrage Windows
---------------------------------
identificateur          {9dea862c-5cdd-4e70-acc1-f32b344d4795}
device                  partition=\Device\HarddiskVolume2
path                    \EFI\Microsoft\Boot\bootmgfw.efi
description             Windows Boot Manager

Chargeur de démarrage Windows
-----------------------------
identificateur          {355f51c7-6862-11e6-bcf1-a302a5269f7a}
device                  partition=C:
path                    \windows\system32\winload.efi
description             Windows 10

Chargeur de démarrage Windows
-----------------------------
identificateur          {355f51c8-6862-11e6-bcf1-a302a5269f7a}
device                  partition=D:
path                    \windows\system32\boot\winload.efi
description             Windows 7

Un redémarrage va confirmer que nous avons toujours notre dual-boot Windows. Rien n’a changé en apparence (mais il serait facile maintenant, depuis le bios, de faire démarrer W7 tout seul).  On laisse comme cela pour l’instant, et on va lancer l’installation de notre Linux.

5. Installation de Linux.

Comme pour un dual-boot, on lance la clé usb en uefi et on fait un point avec gparted et sudo parted. On voit bien les deux partitions efi et le drapeau boot qui leur est associé.

Mon image

J’ai préparé un espace libre de 10 Gb sur mon second disque dur (/dev/sdb) pour y placer ma Linux Mint. Je choisis le partitionnement manuel via « autre chose ». Je choisis l’espace libre et je m’assure que grub va bien s’installer dans le premier disque (dans mon cas /dev/sda). Pas de problème, on peut installer notre Linux. Rien de particulier dans cette installation qui s’avère tout à fait classique.

Au redémarrage, on constate que Grub nous propose deux windows boot manager.

Mon image

La première des deux entrées WBM exécute notre précédent dual-boot (et propose toujours un choix W10/W7). La seconde entrée proposée par Grub lance directement W7.

Mon image

Mon image

Il ne va donc nous rester qu’à rendre tout ça lisible en modifiant l’appellation des entrées et en supprimant le dual-boot W10 /W7 devenu inutile.

6. Suppression du dual-boot de Windows

On va utiliser la commande bcdedit depuis Windows 10 pour supprimer notre entrée W7 inutile et masquer ce menu. On a vu plus haut que l’identificateur de W7 est {355f51c8-6862-11e6-bcf1-a302a5269f7a}. Donc :

c:\windows\system32>bcdedit /delete {355f51c8-6862-11e6-bcf1-a302a5269f7a}
L'opération a réussi.

c:\windows\system32>bcdedit /set {bootmgr} displaybootmenu no
L'opération a réussi.

Chaque Windows est devenu indépendant, et Grub se charge de le lancer;

7. Renommer les entrées de Grub.

On pourrait le faire depuis chaque Windows, mais je préfère bricoler le moins possible la base bcd. On va donc modifier grub pour lancer les Windows avec le nom qui nous convient. On édite le contenu du fichier /boot/grub/grub.cfg. On copie le contenu de la section 30_OS-prober. Dans mon cas :

Mon image

On édite le fichier /etc/grub.d/40-custom et on copie le contenu en modifiant l’intitulé des deux entrées mises en relief en vert.

Mon image

Il ne reste plus qu’à désactiver 30_os-prober et à faire un sudo update-grub.

sudo chmod -x /etc/grub.d/30_os-prober
sudo update-grub

Le redémarrage confirme que la modification s’est bien effectuée. Chaque Windows se lance directement avec le bon intitulé.

Mon image

Nous avons bien un triple boot intégralement géré par Grub. Le lanceur de Windows n’apparaît plus.

8. Bilan

Voilà ce que montre easyuefi  (installé sur Seven):

Mon image

Grub est bien installé sur sda2, comme le lanceur W10. En revanche, seul le lanceur W7 est sur sda5. Confirmation avec un sudo efibootmgr -v

essai@essai-virtual-machine ~ $ sudo efibootmgr -v
[sudo] password for essai: 
BootCurrent: 0006
Timeout: 2 seconds
BootOrder: 0006,0007,0004,0000,0001,0002,0003,0005
Boot0000* EFI VMware Virtual SCSI Hard Drive (0.0)	ACPI(a0341d0,0)PCI(15,0)PCI(0,0)SCSI(0,0)
Boot0001* EFI VMware Virtual SATA CDROM Drive (1.0)	ACPI(a0341d0,0)PCI(11,0)PCI(4,0)03120a00010000000000
Boot0002* EFI Network	ACPI(a0341d0,0)PCI(16,0)PCI(0,0)MAC(000c29a6acae,0)
Boot0003* EFI Internal Shell (Unsupported option)	MM(b,3efcb000,3f355fff)
Boot0004* Windows Boot Manager	HD(2,e1800,64000,8ef6bf0b-b1e3-447a-89f9-61194292d2e2)File(\EFI\Microsoft\Boot\bootmgfw.efi)WINDOWS.........x...B.C.D.O.B.J.E.C.T.=.{.9.d.e.a.8.6.2.c.-.5.c.d.d.-.4.e.7.0.-.a.c.c.1.-.f.3.2.b.3.4.4.d.4.7.9.5.}...f................
Boot0005* EFI VMware Virtual SCSI Hard Drive (2.0)	ACPI(a0341d0,0)PCI(15,0)PCI(0,0)SCSI(2,0)
Boot0006* ubuntu	HD(2,e1800,64000,8ef6bf0b-b1e3-447a-89f9-61194292d2e2)File(\EFI\ubuntu\shimx64.efi)
Boot0007* Windows Boot Manager	HD(5,2673800,64000,52e030eb-32e7-41a7-b4ba-cf293db78a9a)File(\EFI\Microsoft\Boot\bootmgfw.efi)WINDOWS.........x...B.C.D.O.B.J.E.C.T.=.{.9.d.e.a.8.6.2.c.-.5.c.d.d.-.4.e.7.0.-.a.c.c.1.-.f.3.2.b.3.4.4.d.4.7.9.5.}....................
essai@essai-virtual-machine ~ $