Efibootmgr

De Wiki doc

Révision datée du 18 décembre 2017 à 13:59 par Ycharbi (discussion | contributions) (Corrections de quelques fautes et ajout de détails sur blkid)

ATTENTION

Cette page s'adresse uniquement aux possesseurs de carte-mère disposant d'un UEFI, ainsi qu'un disque avec une table de partitionnement GUID (dit GPT), contenant une partition en FAT16/32 pour le système EFI (appelée ESP).

Depuis sa version 3.3, le noyau Linux sur ArchLinux supporte l'EFISTUB (aussi appelé EFI BOOT STUB). Le principe est de démarrer le système d'exploitation sans avoir recours à un chargeur de démarrage (GRUB, Lilo, Syslinux...), aussi appelé bootloader, c'est-à-dire qu'après le POST, aucun menu de choix ne sera affiché, démarrant immédiatement le système d'exploitation.

Cette méthode ne permet pas d'utiliser de multiples lignes de boot pour le même noyau ; chaque noyau supporte au plus une seule entrée EFI. Mais il est bien entendu possible d'utiliser plusieurs noyaux différents.

Création de l'entrée

Tout d'abord, on a besoin de connaître l'UUID de votre partition racine (/) :

blkid

La commande va retourner plusieurs UUID en général, exemple :

[...]
/dev/sdaX: LABEL="Boot" UUID="un_uuid_qui_ne_nous_intéresse_pas" TYPE="ext2" PARTLABEL="Boot" PARTUUID="partuuid_qui_ne_nous_intéresse_pas" 
/dev/sdaY: LABEL="ArchLinux" UUID="'''uuid_désirée'''" TYPE="ext4" 
[...]

ATTENTION

Il est important de ne pas se tromper de partition et d'UUID. À ne pas confondre UUID avec PARTUUID !

Afin de ne pas ce tromper, nous pouvons utiliser la syntaxe suivante pour récupérer l'UUID de sda3 par exemple:

blkid -s UUID -o value /dev/sda3

Il est alors possible de remplir une variable avec cette valeur comme exposé ici, de cette façon:

export UUID=$(blkid -s UUID -o value /dev/sda3)
efibootmgr -c -g -L "Debian (EFI stub)" -l '\EFI\debian\vmlinuz' -u "root=UUID=$UUID ro quiet rootfstype=ext4 add_efi_memmap initrd=\\EFI\\debian\\initrd.img"

On aura donc besoin des informations suivantes :

  • uuid_désirée, ce que vous venez de trouver précédemment.
  • ext4, le système de fichiers de votre partition root (/). À adapter si ce n'est pas votre système de fichiers.
  • /dev/sda, le disque qui contient la partition EFI. À adapter s'il est question d'un autre disque.
  • -p 1, le nombre correspondant à la partition EFI (exemple : pour une partition EFI qui serait la /dev/sda2, on utilisera -p 2)

Puis on entre enfin dans le vif du sujet :

efibootmgr -c -g -d /dev/sda -p 1 -L "Arch Linux" -l "\EFI\arch\vmlinuz-arch.efi" -u "root=UUID=uuid_partition_Arch" rootfstype=système_de_fichiers initrd=\EFI\arch\initramfs-arch.img rw add_efi_memmap

On peut désormais redémarrer la machine, qui devrait normalement démarrer directement sur cette nouvelle entrée.

Pour aller plus loin avec efibootmgr

Changer l'ordre de démarrage

Pour voir l'ordre de boot courant, on peut utiliser :

efibootmgr | grep BootOrder

En sortie vous devriez avoir des nombres en hexadécimal, qui correspondent chacun à une entrée dans l'UEFI. On peut savoir à quelle entrée correspond chaque nombre avec :

efibootmgr | grep Boot0

Puis pour changer l'ordre de boot, il suffit de classer ces valeurs en hexadécimal de sorte qu'en premier vous écrirez le premier ordre de boot (c'est-à-dire le premier périphérique sur lequel l'UEFI tentera de démarrer) et en dernier le dernier ordre de boot :

efibootmgr -o XXX,YYYY,ZZZZ

Il est possible de réinitialiser l'ordre de boot :

efibootmgr -O

Supprimer des entrées

On peut facilement supprimer une entrée dans l'UEFI avec :

efibootmgr -B -b XXXX

Où XXXX est la valeur en hexadécimal de l'entrée que vous désirez supprimer.

Changer le timeout

Il est possible de changer le timeout avant que l'UEFI ne démarre :

efibootmgr -t X

Où X est le temps en secondes.

On peut aussi facilement supprimer ce timeout avec :

efibootmgr -T

Pour ceux qui apprécient avoir un boot rapide.

Ajouter plus d'options au boot

À l'instar d'un bootloader, il est possible de spécifier des options au noyau. Toutes les options du noyau sont spécifiées avec le paramètre -u. Par exemple, par défaut nous avions utilisé cette commande plus haut, les options sont mises en gras sur cette ligne :

efibootmgr -c -g -d /dev/sda -p 1 -L "Arch Linux" -l "\EFI\arch\vmlinuz-arch.efi" -u "root=UUID=uuid_partition_Arch rootfstype=système_de_fichiers initrd=\EFI\arch\initramfs-arch.img rw add_efi_memmap"

Si on veut ajouter une option (telle quiet), on écrira donc :

efibootmgr -c -g -d /dev/sda -p 1 -L "Arch Linux" -l "\EFI\arch\vmlinuz-arch.efi" -u "root=UUID=uuid_partition_Arch rootfstype=système_de_fichiers initrd=\EFI\arch\initramfs-arch.img rw add_efi_memmap quiet"

Ou encore :

efibootmgr -c -g -d /dev/sda -p 1 -L "Arch Linux" -l "\EFI\arch\vmlinuz-arch.efi" -u "root=UUID=uuid_partition_Arch rootfstype=système_de_fichiers initrd=\EFI\arch\initramfs-arch.img rw add_efi_memmap vga=790 splash resume=/dev/sdXY"

Et ainsi de suite.

Sources