Passage en boot UEFI d’Ubuntu sur le PC

Ça faisait un bout de temps que je traînais ce problème : un message d’erreur quasi systématique au démarrage du PC que je résolvais en redémarrant par la combinaison de touches Ctrl-Alt-Supp : en le faisant plusieurs fois, le PC finissait par démarrer.

error: environment block too small
error: attempt to read or write outside of disk ‘hd0’.
error: you need to load the kernel first.

Press any key to continue…_

Si je pressais « any key » pour continuer, j’obtenais un beau « kernel panic », et il fallait éteindre manuellement le PC. 🙁

J’avais cherché pendant pas mal de temps, lu pas mal d’articles sur divers forums, sans vraiment trouver de solutions : fichier /boot/grub/grubenv endommagé ? problème avec le disque SSD ? … J’en avais parlé dans cet article, qui date de 2014 : j’ai donc vécu avec ça pendant plusieurs années !! Utiliser la mise en veille évitait le problème. Et au pire, je démarrais sur un CD Boot Repair que je m’étais préparé, mais il était rare que j’aie besoin d’aller jusque là.

Et puis patatras hier, après avoir ajouté une belle carte graphique dans le boîtier (aucun rapport à priori), voilà que je n’arrive plus du tout à démarrer. Boot Repair ne me débloque pas non plus… Je suis bloqué.

Après quelques essais infructueux (amorcer sur le deuxième disque, puisque boot repair m’a installé grub sur les deux disques que j’ai, ou encore utiliser la toute dernière version de boot repair), j’ai fini par résoudre le problème en activant l’UEFI sur le PC ! Il a fallu pour cela faire quelques modifications sur le disque dur pas forcément évidentes, d’où cet article. J’ai principalement suivi ces deux tutos :

C’est le deuxième, en anglais, qui détaille comment convertir le disque dur.

Boot UEFI

Le mode standard (BIOS) pour amorcer un disque (boot) est d’aller lire le MBR (Master Boot Record) au tout début du disque sélectionné. Mais en UEFI, ce n’est plus le cas : le MBR est remplacé par la GPT (GUID Partition Table). Cela permet accessoirement de lever la limitation des disques de taille supérieures à 2,2 To (limite du MBR).

La première chose à faire est d’activer le mode UEFI dans le BIOS. Mais comme j’ai installé Ubuntu précédemment en mode standard, je n’ai pas de GPT, et il m’est donc impossible de démarrer. Il va donc falloir convertir le disque de MBR à GPT.

Je démarre donc une session Live à partir d’une clef USB ou d’un CD (ATTENTION : il est important de le faire avec le mode UEFI d’activé dans le BIOS). Il va d’abord falloir modifier les partitions du disque Ubuntu, donc soyez certains d’être à jour sur vos sauvegardes !

Partitionner avec gParted

Choisir « Essayer Ubuntu », et vérifier que vous être bien en mode UEFI :

[ -d /sys/firmware/efi ] && echo "mode EFI" || echo "mode classique"
mode EFI

Puis lancer gparted, l’outil de partitionnement. Il faut créer une nouvelle partition au début du disque, d’une taille de 200MB, et une autre à la fin du disque, d’une taille de 2MB.

Au premier essai, gparted m’a bien créé une partition de 200 MB, mais après ma partition Ubuntu. Pour pouvoir créer la première au début du disque, j’ai du préciser de réduire en même temps la taille de la partition Ubuntu, sinon gparted essayait de la remettre à taille d’origine, et l’ensemble échouait. Aucun problème pour créer la seconde en fin de disque.

Voilà ce que cela donne une fois l’opération terminée :

La nouvelle partition en début de disque dans mon cas est /dev/sda2. Elle est bien identifiée en tant que EFI System.

Convertir le disque avec gdisk

Lancer maintenant la commande suivante (à adapter selon votre disque/partition) :

gdisk /dev/sda

L’écran suivant doit logiquement s’afficher :

GPT fdisk (gdisk) version 0.6.14

Partition table scan:
  MBR: MBR only
  BSD: not present
  APM: not present
  GPT: not present


***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format.
THIS OPERATION IS POTENTIALLY DESTRUCTIVE! Exit by typing 'q' if
you don't want to convert your MBR partitions to GPT format!
***************************************************************


Command (? for help): 

Il faut maintenant créer une nouvelle partition, de type ‘EFI system’. Taper ‘2’ comme numéro de partition. L’utilitaire devrait ensuite trouver la place au début du disque (choisir un numéro de secteur bas comme 34), et utiliser le reste de l’espace libre. Taper ensuite ‘L’ pour lister les types de partitions possibles, et choisir ‘ef00’ pour ‘EFI System’.

Command (? for help): n
Partition number (2-128, default 2): 2
First sector (34-7831518, default = 34) or {+-}size{KMGTP}: 
Information: Moved requested sector from 34 to 2048 in
order to align on 2048-sector boundaries.
Use 'l' on the experts' menu to adjust alignment
Last sector (2048-421887, default = 421887) or {+-}size{KMGTP}: 
Current type is 'Linux/Windows data'
Hex code or GUID (L to show codes, Enter = 0700): L
0700 Linux/Windows data    0c01 Microsoft reserved    2700 Windows RE          
4200 Windows LDM data      4201 Windows LDM metadata  7501 IBM GPFS            
7f00 ChromeOS kernel       7f01 ChromeOS root         7f02 ChromeOS reserved   
8200 Linux swap            8301 Linux reserved        8e00 Linux LVM           
a500 FreeBSD disklabel     a501 FreeBSD boot          a502 FreeBSD swap        
a503 FreeBSD UFS           a504 FreeBSD ZFS           a505 FreeBSD Vinum/RAID  
a800 Apple UFS             a901 NetBSD swap           a902 NetBSD FFS          
a903 NetBSD LFS            a904 NetBSD concatenated   a905 NetBSD encrypted    
a906 NetBSD RAID           ab00 Apple boot            af00 Apple HFS/HFS+      
af01 Apple RAID            af02 Apple RAID offline    af03 Apple label         
af04 AppleTV recovery      be00 Solaris boot          bf00 Solaris root        
bf01 Solaris /usr & Mac Z  bf02 Solaris swap          bf03 Solaris backup      
bf04 Solaris /var          bf05 Solaris /home         bf06 Solaris alternate se
bf07 Solaris Reserved 1    bf08 Solaris Reserved 2    bf09 Solaris Reserved 3  
bf0a Solaris Reserved 4    bf0b Solaris Reserved 5    c001 HP-UX data          
c002 HP-UX service         ef00 EFI System            ef01 MBR partition scheme
ef02 BIOS boot partition   fd00 Linux RAID            
Hex code or GUID (L to show codes, Enter = 0700): ef00
Changed type of partition to 'EFI System'

À ce stade, la partition est créée. Taper ‘p’ pour visualiser les changements :

Command (? for help): p
Disk /dev/sda: 234441648 sectors, 111.8 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 6A69DA4B-715C-46A4-A868-71B2204707B4
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 234441614
Partitions will be aligned on 2048-sector boundaries
Total free space is 1301357 sectors (635.4 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1          411648        91547647   43.5 GiB    8300  Linux filesystem
   2            2048          411647   200.0 MiB   EF00  EFI System
   5        92839936       116346879   11.2 GiB    8200  Linux swap
   6       116348928       234436607   56.3 GiB    8300  Linux filesystem

Puis sortir de gdisk en sauvegardant les changements en tapant ‘w’ :

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed, possibly destroying your data? (Y/N): y
OK; writing new GUID partition table (GPT).
The operation has completed successfully.

Voilà, le plus dur est fait… Reste à installer Grub.

Grub

À ce stade, le tuto n’est pas 100% certain de ce qu’il annonce, ne l’ayant pas fait lui-même. Voilà ce que j’ai fait, en tout cas, ça a marché. Il va falloir identifier votre partition EFI, la monter, et l’ajouter à /etc/fstab.

Pour identifier l’UUID de la partition, taper la commande suivante :

ls -l /dev/disk/by-uuid
lrwxrwxrwx 1 root root 10 avril 26 17:41 BA66-550E -> ../../sda2

Repérer /dev/sda2 (dans mon cas), et noter son UUID.

Ensuite, ce qui n’est pas très clair, c’est quel /etc/fstab doit-on modifier, puisque que l’on est toujours dans une session ‘Live’… Je suis allé modifier celui de mon disque Ubuntu, pas sûr que cela soit nécessaire : il semble qu’une partition EFI est automatiquement détectée et montée… Bon, dans le doute…

J’ai donc été dans /boot, créé un répertoire efi, et monté la partition /dev/sda2 sur ce point de montage :

sudo mount /dev/sda2 /boot/efi

Ensuite, j’ai donc monté mon disque Ubuntu, édité le fichier fstab :

sudo mount /dev/sda1 /mnt
vi /mnt/etc/fstab

Et j’y ai ajouté la ligne suivante :

UUID=BA66-550E	/boot/efi	vfat	defaults	0	1

Voilà, il ne reste plus qu’à installer le package grub-efi (qui va aller écrire dans notre nouvelle partition EFI, soit dans /boot/efi):

sudo apt install grub-efi

Voilà ce que j’ai maintenant dans cette partition :

Et voilà, le PC démarre désormais en mode UEFI, et tout se passe à merveille ! Et le message d’erreur du début de l’article que je traînais depuis si longtemps a enfin disparu !! 😀

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *