« Efibootmgr » : différence entre les versions
(Corrections de quelques fautes et ajout de détails sur blkid) |
|||
Ligne 11 : | Ligne 11 : | ||
<source lang="bash"> | <source lang="bash"> | ||
[...] | [...] | ||
/dev/sdaX: LABEL="Boot" UUID=" | /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" | /dev/sdaY: LABEL="ArchLinux" UUID="'''uuid_désirée'''" TYPE="ext4" | ||
[...] | [...] | ||
</source> | </source> | ||
{{attention|Il est important de ne pas se tromper de partition et d'UUID. À ne pas confondre UUID avec PARTUUID !}} | {{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é [https://wiki.debian.org/EFIStub 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 : | On aura donc besoin des informations suivantes : | ||
Ligne 23 : | Ligne 29 : | ||
* ''-p 1'', le nombre correspondant à la partition EFI (exemple : pour une partition EFI qui serait la /dev/sda'''2''', on utilisera ''-p '''2''''') | * ''-p 1'', le nombre correspondant à la partition EFI (exemple : pour une partition EFI qui serait la /dev/sda'''2''', on utilisera ''-p '''2''''') | ||
Puis on entre enfin dans le vif du sujet : | 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=''' | 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. | On peut désormais redémarrer la machine, qui devrait normalement démarrer directement sur cette nouvelle entrée. | ||
Ligne 40 : | Ligne 46 : | ||
On peut facilement supprimer une entrée dans l'UEFI avec : | On peut facilement supprimer une entrée dans l'UEFI avec : | ||
efibootmgr -B -b XXXX | efibootmgr -B -b XXXX | ||
Où XXXX est la valeur en | Où XXXX est la valeur en hexadécimal de l'entrée que vous désirez supprimer. | ||
== Changer le timeout == | == Changer le timeout == | ||
Ligne 54 : | Ligne 60 : | ||
À 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. | À 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 [[#Cr.C3.A9ation_de_l.27entr.C3.A9e|plus haut]], les options sont mises en gras sur cette ligne : | Par exemple, par défaut nous avions utilisé cette commande [[#Cr.C3.A9ation_de_l.27entr.C3.A9e|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= | 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 : | 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= | 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 : | Ou encore : | ||
efibootmgr -c -g -d /dev/sda -p 1 -L "Arch Linux" -l "\EFI\arch\vmlinuz-arch.efi" -u "root=UUID= | 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. | Et ainsi de suite. | ||
= Sources = | = Sources = | ||
* https://wiki.archlinux.fr/EFI_Boot_Stub | * https://wiki.archlinux.fr/EFI_Boot_Stub |
Version du 18 décembre 2017 à 12:59
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.