EFISTUB (Français)
Depuis sa version 3.3, le noyau Linux sur ArchLinux prends en charge l'EFISTUB (aussi appelé EFI BOOT STUB). Le principe est de démarrer le système d'exploitation sans avoir recours à un chargeur d'amorçage (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 prends en charge au plus une seule entrée EFI. Mais il est bien entendu possible d'utiliser plusieurs noyaux différents.
Prérequis
Contrairement au BIOS qui exécute le chargeur d'amorçage depuis le MBR du disque, l'UEFI, lui, charge les fichiers placés dans la partition prévue à cette effet, l'ESP.
Se référer à la page ESP pour la création de l'ESP, le montage de l'ESP, et la mise en place des fichiers nécessaires dans l'ESP.
Mise en place de l'entrée pour l'UEFI
Chargement des modules nécessaires
Avant toute chose, il faudra charger le module efivarfs
, sans cela la suite ne pourra pas fonctionner.
modprobe efivarfs
Si cela ne fonctionne pas, assurez-vous que vous ayez bien démarré en mode dit "EFI" et non en mode "BIOS".
Installation d'efibootmgr
Maintenant nous avons besoin de créer l'entrée de boot qu'utilisera l'UEFI pour charger le noyau directement sans passer par un bootloader. Nous utiliserons efibootmgr
, mais il faut d'abord l'installer si ce n'est pas le cas :
pacman -S efibootmgr
Création de l'entrée
Tout d'abord, on a besoin de connaître l'UUID de votre partition racine (/
) :
blkid
blkid
[...] /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" [...]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 :
efi_no_storage_paranoia
au noyau avant de le démarrer, ou bien vous pouvez supprimer les fichiers /sys/firmware/efi/efivars/dump-*
, s'ils existent, puis redémarrer. Voir le rapport de bug #34641 pour davantages d'informations. efibootmgr -c -g -d /dev/sda -p 1 -L "Arch Linux" -l "\EFI\arch\vmlinuz-linux.efi" -u "root=UUID=<uuid_partition_Arch> rootfstype=<système_de_fichiers> initrd=\EFI\arch\initramfs-linux.img rw"
On peut désormais redémarrer la machine, qui devrait normalement démarrer directement sur cette nouvelle entrée, ou bien on peut en apprendre un peu plus sur efibootmgr
.
Cas du microcode d'Intel
Il faut d'abord copier le nouveau ramdisk dans l'ESP :
cp /boot/intel-ucode.img /boot/efi/EFI/arch/intel-ucode.img
Puis il faut modifier la ligne de boot pour ajouter un nouvel initrd, comme ceci :
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\intel-ucode.img initrd=\EFI\arch\initramfs-arch.img rw"
Il est impératif de placer intel-ucode.img avant initramfs-arch.img.
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"
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 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 vga=790 splash resume=/dev/sdXY"
Et ainsi de suite.