Installer un Linux bootable tant en Legacy qu’en uefi

C’est plus un exercice qu’un véritable tutoriel, mais certains se sont penchés sur cette question : peut-installer un Linux qui puisse booter tant en Legacy qu’en Uefi ? La réponse est clairement oui.

Pour la démo, j’utilise une Mint 17, mais c’est adaptable assez aisément à toutes les distributions.

I) Situation de départ

On règle son PC pour booter en Legacy. On installe volontairement une Linux Mint sur un disque gpt (on peut faire ça avec gparted) en faisant booter le Live-USB en mode Legacy. Pour la démonstration, j’ai ajouté une partition efi dès le départ  pour anticiper la suite de mon installation, mais on pourrait parfaitement la créer a posteriori. Voici une capture faite avec gparted :

gparted

Une partition fat32 avec le drapeau boot est présente (je l’ai créée volontairement). Et l’installation en mode Legacy a ajouté spontanément une partition bios-boot (nommée ici bios_grub).

Et le résultat d’un boot-info : Boot-info initial.

On note une installation somme toute classique en Legacy, si ce n’est que le disque est au format gpt. La partition es totalement vide, ce qui bien sûr va empêcher de booter en uefi. On va le vérifier.

(la réparation finale est le résultat d’un retour à ce Linux purement Legacy, après un autre test- donc, sans intérêt pour nous)

II) Tentative de boot en uefi

Nous basculons notre bios en UEFI. Le résultat est édifiant. Notre Mint n’est pas capable de démarrer en UEFI :

boot-planté
(Les entrées en échec sont les résidus d’anciens tests, que j’ai négligé de supprimer dans le bios.)

III)  Démarrage en UEFI grâce à SG2D

Nous allons lui donner un petit coup de pouce. Le live-cd Supergrub2disk va nous permettre de faire démarrer ce Linux malgré tout, ce qui va grandement nous simplifier les choses pour la future modification. On voit qu’il me permet de booter sur deux noyaux différents. Nous allons simplement choisir de démarrer sur l’entrée Ubuntu qui est proposée.

SG2D

Nous obtenons un bureau fonctionnel en UEFI. L’occasion de faire un second boot-info avant réparation.

Nous constatons que nous sommes bien en uefi, et que boot-repair est impuissant pour proposer une réparation efficace, puisqu’il ne détecte pas la partition efi qui est pourtant présente.

Le boot de votre PC est en mode EFI, mais aucune partition EFI n'a été détectée. Vous voudrez peut-être re-essayer après avoir créé une partition EFI (FAT32, 100MB~250MB, en début de disque, drapeau boot)./pre>

IV) La réparation de grub pour booter en UEFI

On va donc suppléer à cette faiblesse et réparer notre grub pour qu’il boote en Uefi grâce à une série de commandes. Les voici :

essai@essai-virtual-machine ~ $ sudo mount /dev/sda1 /boot/efi
[sudo] password for essai: 
essai@essai-virtual-machine ~ $ sudo apt-get install grub-efi-amd64-signed
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances       
Lecture des informations d'état... Fait
Les paquets suivants ont été installés automatiquement et ne sont plus nécessaires :
  libefivar0 mokutil sbsigntool shim
Veuillez utiliser « apt-get autoremove » pour les supprimer.
Les paquets supplémentaires suivants seront installés : 
  grub-efi-amd64 grub-efi-amd64-bin
Paquets recommandés :
  secureboot-db
Les paquets suivants seront ENLEVÉS :
  grub-gfxpayload-lists grub-pc
Les NOUVEAUX paquets suivants seront installés :
  grub-efi-amd64 grub-efi-amd64-bin grub-efi-amd64-signed
0 mis à jour, 3 nouvellement installés, 2 à enlever et 74 non mis à jour.
Il est nécessaire de prendre 0 o/939 ko dans les archives.
Après cette opération, 5 295 ko d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer ? [O/n] o
Préconfiguration des paquets..
(Lecture de la base de données... 181079 fichiers et répertoires déjà installés.)
Suppression de grub-gfxpayload-lists (0.6) ...
Suppression de grub-pc (2.02~beta2-9ubuntu1.12) ...
Traitement des actions différées (« triggers ») pour man-db (2.6.7.1-1ubuntu1) ...
Sélection du paquet grub-efi-amd64-bin précédemment désélectionné.
(Lecture de la base de données... 181060 fichiers et répertoires déjà installés.)
Préparation du dépaquetage de .../grub-efi-amd64-bin_2.02~beta2-9ubuntu1.12_amd64.deb ...
Dépaquetage de grub-efi-amd64-bin (2.02~beta2-9ubuntu1.12) ...
Sélection du paquet grub-efi-amd64 précédemment désélectionné.
Préparation du dépaquetage de .../grub-efi-amd64_2.02~beta2-9ubuntu1.12_amd64.deb ...
Dépaquetage de grub-efi-amd64 (2.02~beta2-9ubuntu1.12) ...
Sélection du paquet grub-efi-amd64-signed précédemment désélectionné.
Préparation du dépaquetage de .../grub-efi-amd64-signed_1.34.14+2.02~beta2-9ubuntu1.12_amd64.deb ...
Dépaquetage de grub-efi-amd64-signed (1.34.14+2.02~beta2-9ubuntu1.12) ...
Paramétrage de grub-efi-amd64-bin (2.02~beta2-9ubuntu1.12) ...
Paramétrage de grub-efi-amd64 (2.02~beta2-9ubuntu1.12) ...
Création du fichier de configuration GRUB…
Found linux image: /boot/vmlinuz-3.13.0-96-generic
Found initrd image: /boot/initrd.img-3.13.0-96-generic
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
fait
Paramétrage de grub-efi-amd64-signed (1.34.14+2.02~beta2-9ubuntu1.12) ...
essai@essai-virtual-machine ~ $ sudo grub-install --target=x86_64-efi
Installation pour la plate-forme x86_64-efi
Installation terminée, sans erreur.
essai@essai-virtual-machine ~ $ sudo update-grub
Création du fichier de configuration GRUB…
Found linux image: /boot/vmlinuz-3.13.0-96-generic
Found initrd image: /boot/initrd.img-3.13.0-96-generic
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
fait
essai@essai-virtual-machine ~ $

On a d’abord monté la partition sda1 dans boot/efi, puis installé les paquets grub pour l’uefi (je me limite à grubx64.efi car Vmware n’ayant pas de boot-secure n’a pas besoin de shimx64.efi), et enfin, on a lancé une réparation de grub (l’option –target=x86_64-efi est probablement superflue.

Après un redémarrage, c’est l’occasion de faire une dernier boot-info, pour voir la situation finale

Une seule chose est gênante : la partition efi n’est pas montée dans /etc/fstab (ici, elle est placée en commentaire). On va donc forcer son montage en éditant le fichier fstab via la commande sudo gedit /etc/fstab et supprimer le # sur la ligne concernée (la dernière, dans mon cas).
fstab

(quelques entrées bizarres dans efibootmgr -v sont les traces d’essais précédents que j’ai eu la flemme de supprimer. Donc, ils sont sans importance)

Il ne reste plus qu’à redémarrer en UEFI pour voir si Mint va se lancer en UEFI.  Aucun problème :  Grub affiche son menu et Mint boote correctement.

boot-uefi

V) Tentative de boot en Legacy.

On repasse en mode bios-legacy. On vérifie que les entrées fonctionnent. En effet.

boot-bios

D’ailleurs, tout cette démo est tapée dans ce mode Legacy. J’ai donc une Mint qui fonctionne aussi bien en Legacy qu’en UEFI.