Efibootmgr
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="une_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 !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 héxadé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.