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.
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>
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 :
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é.
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.
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.
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 :
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.
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é.
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):
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 ~ $