Démarrer Debian en UEFI sur certaines cartes mères buguées

Je suis tombé sur le cas il y a quelques temps, avec une carte mère MSI Z77A-GD55, qui il est vrai, n’est plus toute jeune. Cependant elle fonctionne encore bien, et j’aime bien faire durer le matériel. L’installation de Debian en UEFI s’est déroulée sans encombres, et après coup, c’est vrai que c’est rigolo que le média d’installation ait bien démarré en UEFI, mais que le système final n’arrive pas à démarrer Debian en UEFI.

Non, à la place d’un démarrage normal, j’avais droit à l’invite de commandes UEFI.

Tout se passe comme si le firmware de la carte mère ne trouvait pas de fichier d’amorçage UEFI sur le disque dur , alors que celui-ci est bien présent ici à l’endroit que l’on qualifierait d’habituel:

sudo ls -1 /boot/efi/EFI/debian
BOOTX64.CSV
fbx64.efi
grub.cfg
grubx64.efi
mmx64.efi
shimx64.efi

Si depuis le shell UEFI on se place dans ce répertoire et qu’on charge le fichier grubx64.efi, le système démarre.

uefi shell lancement manuel grub
Lancement manuel de grub depuis le shell UEFI

Le firmware de la carte mère ne cherche donc visiblement pas au bon endroit.

On peut le constater avec l’utilitaire shell UEFI bcfg, qui permet d’afficher ou de configurer les entrées de démarrage:

bcfg boot dump

uefi bcfg boot dump

On voit une entrée pointant EFI\boot\bootx64.efi, hors ce chemin n’existe pas dans la partition dédiée EFI. Et c’est là que la carte mère est buguée (ou plutôt le firmware UEFI de la carte mère) : normalement une telle entrée n’aurait jamais du être créée, car il y a un contrôle de la validité du chemin pointé à la création de l’entrée.

Bon, maintenant qu’on a vu le problème, voici deux méthodes pour palier à ce petit désagrément.

La méthode bourrin

Puisque le firmware UEFI chercher à charger le fichier EFI\boot\bootx64.efi, faisons lui plaisir et donnons le lui. Démarrons donc manuellement la Debian depuis le shell UEFI et réalisons l’opération de copie suivante:

mkdir /boot/efi/EFI/boot

cp /boot/efi/EFI/debian/grubx64.efi /boot/efi/EFI/boot/bootx64.efi

Voilà. C’est moche mais ça marche. L’inconvénient de cette solution par contre est que le fichier ne sera jamais mis à jour le cas échéant, car la distribution n’a aucune connaissance de son existence à cet endroit. D’où l’autre solution, probablement plus élégante.

La méthode classe

Elle passe par le shell UEFI et son utilitaire de configuration du démarrage bcfg.

On supprime l’entrée foireuse (elle a l’index 0 dans notre cas):

bcfg boot rm 0

Puis on créé une nouvelle entrée pointant le chargeur d’amorçage existant dans la partition efi (dans cet exemple, la partition efi est sur le volume FS0) :

bcfg boot add 0 FS0:\EFI\debian\grubx64.efi "debian"

UEFI bcfg boot add

Voilà.

o/

Références :

https://papy-tux.legtux.org/doc1249/index.html

https://wiki.archlinux.org/index.php/Unified_Extensible_Firmware_Interface#efibootmgr

Laisser un commentaire

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