En principe, l’ajout d’un système d’exploitation (Windows) gère intégralement et automatiquement le dual-boot en UEFI, et notamment les entrées NVram qui vont permettre au système de lancer tel ou tel système d’exploitation.
Par exemple, si on ajoute une distribution Ubuntu sur un PC Windows, l’installateur copie de lui-même tous les fichiers efi nécessaires au lanceur Grub, et il crée une entrée Ubuntu dans la NVram, ce qui permet au système de démarrer.
Mais parfois, l’opération échoue, et Windows continue de démarrer par lui-même. Mieux, on peut avoir envie d’ajouter un lanceur indépendant comme dans cet exemple où j’ai ajouté le lanceur Refind manuellement (voir le lien précédent pour la mise en place des fichiers sur la partition efi). Il faut donc savoir paramétrer la NVram pour qu’une telle configuration fonctionne. Nous allons voir quatre méthodes pour le faire.
I) L’ajout d’une entrée via l’UEFI
C’est en principe la méthode la plus naturelle, mais il faut que les options soient proposées. De plus, il y a tellement de version d’UEFI qu’il est difficile de proposer un tuto universel. Je présent la méthode depuis l’UEFI d’un PC Virtuel sous Vmware. On accède à l’UEFI en appuyant une touche préconisée par le constructeur (souvent F2). On obtient dans mon cas ceci :
On va utiliser l’option « Boot Maintenance Manager« , puis « Configure Boot Options« et on choisit d’ajouter une entrée via « Add Boot Option« . Ce qui me conduit ici :
On écarte les entrées inutiles (ici en CDROM en rouge, un disque Winre, une entrée MAC) et on sélectionne notre disque dur par entrée. Ceci conduit à une entrée <EFI>, puis à un choix entre <Microsoft>, <Boot>, <Ubuntu> et <REfind>. On choisit le dernier et on aboutit à une liste de fichiers :
Le fichier refind_x64.efi semble approprié. Une description est demandée (ici je saisis « mon-refind« ). On valide le tout : l’entrée est créée. Il faut encore la placer en tête. L’entrée « Configure Boot Options » conduit à une option « Change Boot Order » . Elle ouvre cette fenêtre :
Comme préconisé, on sélectionne l’entrée « Mon-Refind » par la touche entrée, et on la passe en première position. On enregistre. Et il ne reste plus qu’à redémarrer pour tester. Le démarrage se fait bien sur mon lanceur.
La méthode fonctionne probablement très différemment sur l’UEFI d’un PC, cette méthode n’est proposée que pour information.
II) L’ajout d’entrée via un Linux installé.
En principe, il suffit de deux commandes pour ajouter une entrée Ubuntu sur un PC en UEFI :
essai@essai-virtual-machine ~ $ sudo grub-install essai@essai-virtual-machine ~ $ sudo update-grub Création du fichier de configuration GRUB… Found linux image: /boot/vmlinuz-3.13.0-24-generic Found initrd image: /boot/initrd.img-3.13.0-24-generic No volume groups found Windows Boot Manager trouvé sur /dev/sda2@/EFI/Microsoft/Boot/bootmgfw.efi essai@essai-virtual-machine ~ $
On peut vérifier que l’entrée a été ajoutée en NVram. L’entrée Ubuntu liée à Grub a été ajoutée, et elle passée en première position dans la ligne bootOrder
essai@essai-virtual-machine ~ $ sudo efibootmgr BootCurrent: 0002 Timeout: 2 seconds BootOrder: 0004,0002,0003,0001,0008,0009,000A,000B,0000 Boot0000* EFI VMware Virtual SCSI Hard Drive (2.0) Boot0001* Windows Boot Manager Boot0002* REfind Boot0003* EFI VMware Virtual SCSI Hard Drive (0.0) Boot0004* ubuntu Boot0008* EFI VMware Virtual SCSI Hard Drive (0.0) Boot0009* EFI VMware Virtual SATA CDROM Drive (1.0) Boot000A* EFI Network Boot000B* EFI Internal Shell (Unsupported option) essai@essai-virtual-machine ~ $
Malheureusement, cette méthode ne permettrait pas d’ajouter l’entrée Refind, et c’est celle qui m’intéresse (et encore moins Windows). On va la supprimer pour mieux la recréer. C’est très simple (on obtient les détails de la commande avec l’extension -help. Notre entrée Refind a disparu.
essai@essai-virtual-machine ~ $ sudo efibootmgr -b 0002 -B
BootCurrent: 0002
Timeout: 2 seconds
BootOrder: 0004,0003,0001,0008,0009,000A,000B,0000
Boot0000* EFI VMware Virtual SCSI Hard Drive (2.0)
Boot0001* Windows Boot Manager
Boot0003* EFI VMware Virtual SCSI Hard Drive (0.0)
Boot0004* ubuntu
Boot0008* EFI VMware Virtual SCSI Hard Drive (0.0)
Boot0009* EFI VMware Virtual SATA CDROM Drive (1.0)
Boot000A* EFI Network
Boot000B* EFI Internal Shell (Unsupported option)
Première chose à faire, identifier le disque et les partitions.
essai@essai-virtual-machine ~ $ sudo parted -l Modèle: VMware, VMware Virtual S (scsi) Disque /dev/sda : 39,7GB Taille des secteurs (logiques/physiques): 512B/512B Table de partitions : gpt Numéro Début Fin Taille Système de fichiers Nom Fanions 1 1049kB 473MB 472MB ntfs Basic data partition msftdata 2 473MB 683MB 210MB fat32 EFI system partition démarrage 3 683MB 817MB 134MB Microsoft reserved partition msftres 4 817MB 20,6GB 19,8GB ntfs Basic data partition msftdata 5 20,9GB 39,2GB 18,3GB ntfs Basic data partition msftdata 6 39,2GB 39,7GB 566MB fat32 Basic data partition msftdata
Le nom du disque est /dev/sda et la partition efi est la numéro 2. On n’a plus qu’à recréer l’entrée qui nous intéresse.
essai@essai-virtual-machine ~ $ sudo efibootmgr -c -d /dev/sda -p 2 -L "Refind-new" -l "\EFI\refind\refind_x64.efi" Timeout: 2 seconds BootOrder: 0002,0004,0003,0001,0008,0009,000A,000B,0000 Boot0000* EFI VMware Virtual SCSI Hard Drive (2.0) Boot0001* Windows Boot Manager Boot0003* EFI VMware Virtual SCSI Hard Drive (0.0) Boot0004* ubuntu Boot0008* EFI VMware Virtual SCSI Hard Drive (0.0) Boot0009* EFI VMware Virtual SATA CDROM Drive (1.0) Boot000A* EFI Network Boot000B* EFI Internal Shell (Unsupported option) Boot0002* Refind-new
Quelques explications: -c signifie « create », -d signifie « disque », -p signifie « partition », -L signifie « label » et -l indique le chemin du fichier refind_x64.efi précédemment trouvé. Il ne reste qu’à tester. Aucun problème, nous retrouvons notre démarrage sur Refind :
III) Ajout d’une entrée via Windows.
Sous Windows, on peut utiliser deux moyens différents : l’un s’appuie sur une logiciel nommé EasyUEFI, et l’autre sur la commande bcdedit.
1) L’utilisation de EasyUEFI
J’ai déjà fait cette démonstration sur l’autre sujet, et par conséquent, je me contente d’en donner le lien : http://ikewdu.free.fr/creer-un-dual-boot-windows-winre-en-uefi/#easyuefi
2) L’utilisation de bcdedit
Un logiciel, c’est pratique, mais ça peut devenir payant. Donc, autant se préparer à utiliser les outils Windows. La commande bcdedit est là pour ça. Mon intention première était d’utiliser la commande bcdedit /create, mais en dépit de nombreux essais et de recherches infructueuses, j’ai renoncé à cette solution. Nous allons donc utiliser l’option /copy.
Première chose à faire, monter la partition efi avec une lettre Z (ou autre):
C:\windows\system32>mountvol z: /s
C:\windows\system32>
Ensuite, on fait un état des entrées présentes dans la NVRAM :
C:\windows\system32> bcdedit /enum firmware Gestionnaire de démarrage du microprogramme ------------------------------------------- identificateur {fwbootmgr} displayorder {bootmgr} {5463a4c4-4b6d-11e7-886a-ed04ad7ce4d1} {5463a4ac-4b6d-11e7-886a-ed04ad7ce4d1} {5463a4ae-4b6d-11e7-886a-ed04ad7ce4d1} {5463a4af-4b6d-11e7-886a-ed04ad7ce4d1} {5463a4b0-4b6d-11e7-886a-ed04ad7ce4d1} {5463a4c6-4b6d-11e7-886a-ed04ad7ce4d1} {5463a4c7-4b6d-11e7-886a-ed04ad7ce4d1} timeout 2 Gestionnaire de démarrage Windows --------------------------------- identificateur {bootmgr} device partition=\Device\HarddiskVolume2 path \EFI\Microsoft\Boot\bootmgfw.efi description Windows Boot Manager locale fr-fr inherit {globalsettings} default {current} resumeobject {5463a4b6-4b6d-11e7-886a-ed04ad7ce4d1} displayorder {current} {5463a4ba-4b6d-11e7-886a-ed04ad7ce4d1} toolsdisplayorder {memdiag} timeout 30 Application logicielle (101fffff) -------------------------------- identificateur {5463a4ac-4b6d-11e7-886a-ed04ad7ce4d1} description EFI VMware Virtual SCSI Hard Drive (0.0) Application logicielle (101fffff) -------------------------------- identificateur {5463a4ae-4b6d-11e7-886a-ed04ad7ce4d1} description EFI Network Application logicielle (101fffff) -------------------------------- identificateur {5463a4af-4b6d-11e7-886a-ed04ad7ce4d1} description EFI Internal Shell (Unsupported option) Application logicielle (101fffff) -------------------------------- identificateur {5463a4b0-4b6d-11e7-886a-ed04ad7ce4d1} description EFI VMware Virtual SCSI Hard Drive (2.0) Application logicielle (101fffff) -------------------------------- identificateur {5463a4c4-4b6d-11e7-886a-ed04ad7ce4d1} device partition=\Device\HarddiskVolume2 path \efi\ubuntu\grubx64.efi description EFI VMware Virtual SCSI Hard Drive (0.0) Application logicielle (101fffff) -------------------------------- identificateur {5463a4c6-4b6d-11e7-886a-ed04ad7ce4d1} device partition=\Device\HarddiskVolume2 path \efi\refind\refind_x64.efi description EFI VMware Virtual SATA CDROM Drive (1.0) C:\windows\system32>
Je constate que Bootmgr est l’entrée qui démarre en priorité, et que j’ai de nombreuses entrées vides comme le CD-Rom, le shell, etc. Je vais copier l’entrée bootmgr pour paramétrer ma nouvelle entrée. Je copie l’entrée en la renommant « Refind-bcd« .
C:\windows\system32>bcdedit /copy {bootmgr} /d "Refind-bcd" L’entrée a été correctement copiée dans {5463a4c7-4b6d-11e7-886a-ed04ad7ce4d1}. C:\windows\system32>
A ce stade, ma nouvelle entrée crée me donne un un nouvel identificateur que je copie. Je modifie mon device et mon path pour les rediriger vers z:\efi\refind\refind_x64.efi :
C:\windows\system32>bcdedit /set {5463a4c7-4b6d-11e7-886a-ed04ad7ce4d1} device partition=z: L’opération a réussi. C:\windows\system32>bcdedit /set {5463a4c7-4b6d-11e7-886a-ed04ad7ce4d1} path \efi\refind\refind_x64.efi L’opération a réussi.
Et enfin, je passe ma nouvelle entrée en tête de liste dans fwbootmgr (le gestionnaire de firmware) :
C:\windows\system32>bcdedit /set {fwbootmgr} displayorder {5463a4c7-4b6d-11e7-886a-ed04ad7ce4d1} /addfirst
L’opération a réussi.
Il ne reste plus qu’à tester la nouvelle entrée dans le firmware. Et là encore :
Ce n’est certes pas la méthode la plus simple, mais c’est la seule qui se fait depuis Windows, et sans logiciel tiers. Et on aurait pu ajouter une entrée Windows, Linux ou autre.