« Efibootmgr » : différence entre les versions
(Corrections de quelques fautes et ajout de détails sur blkid) |
m (Ycharbi a déplacé la page Efi boot stub vers Efibootmgr sans laisser de redirection : L'EFI boot stub n'est qu'une partie de l'outil "efibootmgr" et il est plus cohérant de parler de lui en y intégrant cette partie précise (plus évolutif).) |
||
(Une version intermédiaire par le même utilisateur non affichée) | |||
Ligne 1 : | Ligne 1 : | ||
[[Category:service_démarrage]] | [[Category:service_démarrage]] | ||
Le programme <source lang="bash" inline>efibootmgr</source> permet d'intéragir avec les entrées de démarrage d'un ordinateur. Les modification apportés par celui-ci sont stockés dans la configuration de l{{'}}''UEFI'' et sont donc indépendantes du système d'exploitation à amorcer. Certaines cartes mères ne permettants pas la modification de ces paramètres (honte à leur constructeur), l'usage de cet outil permet de palier ce défaut majeur. | |||
{{Attention|Les commandes de cette page s'adressent '''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''').}} | |||
== | =Création d'une entrée de type ESP= | ||
Tout d'abord, on a besoin de connaître l'UUID de votre partition racine (/) : | L{{'}}''ESP'' (pour ''EFI System Partition'') est un volume formaté en ''FAT'' 16 ou 32 comportant un ou plusieurs programmes exécutables par l{{'}}''UEFI''. Normalement, ce dernier est censé parcourir l'ensemble des périphériques reconnus au démarrage pour y trouver les programmes compatibles mais il n'est pas rare que cela ne se face pas (les ''UEFI'' sont généralement des grosses merdes bogués). Afin de forcer le système à trouver un fichier d'amorce, il faut créer une [https://bbs.archlinux.org/viewtopic.php?id=251931 entrée spécifique] menant à lui. Certains ''UEFI'' permettent de le faire depuis leur interface de configuration mais pas tous... Cette méthode est donc universelle : | ||
efibootmgr --disk /dev/sda --part 1 --create --label "Un nom pour votre entrée" --loader /EFI/debian/grubx64.efi | |||
Cette ligne précise, dans l'ordre : | |||
* '''--disk''' : le disque contenant l{{'}}''ESP'' | |||
* '''--part''' : le numéro de la partition faisant office d{{'}}''ESP'' et contenant le programme d’amorçage | |||
* '''--create''' : paramètre précisant la création de l'entrée | |||
* '''--label''' : permet de définir un nom arbitraire pour reconnaître l'entrée parmi les autres | |||
* '''--loader''' : le chemin complet du chargeur d’amorçage ''UEFI'' | |||
=Création d'une entrée de type STUB= | |||
Depuis sa version '''3.3''', le noyau Linux supporte l{{'}}''EFISTUB'' (aussi appelé ''EFI BOOT STUB''). Le principe est de démarrer le système d'exploitation sans avoir recours à un [[:Category:service_démarrage|chargeur de démarrage]] additionnel (''GRUB, Lilo, Syslinux...''), aussi appelé ''bootloader'', c'est-à-dire qu'après le [http://fr.wikipedia.org/wiki/Power-On_Self-Test POST], aucun menu de choix ne sera affiché, démarrant ainsi immédiatement le système d'exploitation. | |||
Cette méthode ne permet pas d'utiliser de multiples lignes de démarrage 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. | |||
Tout d'abord, on a besoin de connaître l{{'}}''UUID'' de votre partition racine (/) : | |||
blkid | blkid | ||
La commande va | |||
La commande va un ''UUID'' par partition. Exemple : | |||
<source lang="bash"> | <source lang="bash"> | ||
[...] | [...] | ||
Ligne 15 : | Ligne 30 : | ||
[...] | [...] | ||
</source> | </source> | ||
Afin de ne pas | {{attention|Il est important de ne pas se tromper de partition et d{{'}}''UUID''. Ne pas confondre ''UUID'' avec ''PARTUUID'' !}} | ||
Afin de ne pas se tromper, nous pouvons utiliser la syntaxe suivante pour récupérer l{{'}}''UUID'' de ''sda3'' par exemple : | |||
blkid -s UUID -o value /dev/sda3 | blkid -s UUID -o value /dev/sda3 | ||
On aura donc besoin | Il est alors possible de remplir une variable avec cette valeur comme exposé [https://wiki.debian.org/EFIStub ici], de cette façon : | ||
* ''uuid_désirée'' | export '''UUID'''=$(blkid -s UUID -o value /dev/sda3) | ||
* ''ext4'' | 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" | ||
* ''/dev/sda'' | |||
* ''-p 1'' | On aura donc besoin les 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/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='''uuid_partition_Arch'''" rootfstype='''système_de_fichiers''' initrd=\EFI\arch\initramfs-arch.img rw add_efi_memmap | 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 amorcer directement sur cette nouvelle entrée. | |||
Pour voir l'ordre de | =Changer l'ordre de démarrage= | ||
Pour voir l'ordre de démarrage courant, on peut utiliser : | |||
efibootmgr | grep BootOrder | efibootmgr | grep BootOrder | ||
En sortie vous devriez avoir des nombres | |||
En sortie vous devriez avoir des nombres hexadécimaux, qui correspondent chacun à une entrée dans l{{'}}''UEFI''. On peut savoir à quelle entrée correspond chaque nombre avec : | |||
efibootmgr | grep Boot0 | efibootmgr | grep Boot0 | ||
Pour changer l'ordre de démarrage, il suffit de classer ces valeurs selon vos désirs : | |||
efibootmgr -o XXX,YYYY,ZZZZ | efibootmgr -o XXX,YYYY,ZZZZ | ||
Il est possible de réinitialiser l'ordre de | |||
{{info|Si vous ne précisez qu'une entrée, elle deviendra la valeur par défaut pour le démarrage.}} | |||
Il est possible de réinitialiser l'ordre de démarrage : | |||
efibootmgr -O | efibootmgr -O | ||
=Supprimer des entrées= | |||
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 hexadécimal de l'entrée que vous désirez supprimer. | |||
Il est possible de changer le | |||
=Changer le délais de démarrage= | |||
Il est possible de changer le délais de démarrage avant que l{{'}}''UEFI'' n'utilise une entrée : | |||
efibootmgr -t X | efibootmgr -t X | ||
On peut aussi facilement supprimer ce | Où ''X'' est le temps en secondes. | ||
On peut aussi facilement supprimer ce délais avec : | |||
efibootmgr -T | efibootmgr -T | ||
Pour ceux qui apprécient avoir un démarrage rapide. | |||
À l'instar d'un | |||
=Ajouter plus d'options au démarrage= | |||
À l'instar d'un chargeur d'amorçage, il est possible de spécifier des options au noyau. Toutes les options du noyau sont spécifiées avec le paramètre <source lang="bash" inline>-u</source>. Pour l'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=uuid_partition_Arch rootfstype=système_de_fichiers initrd=\EFI\arch\initramfs-arch.img rw add_efi_memmap'''" | 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=uuid_partition_Arch rootfstype=système_de_fichiers initrd=\EFI\arch\initramfs-arch.img rw add_efi_memmap '''quiet'''" | 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=uuid_partition_Arch rootfstype=système_de_fichiers initrd=\EFI\arch\initramfs-arch.img rw add_efi_memmap '''vga=790 splash resume=/dev/sdXY'''" | 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 |
Dernière version du 14 novembre 2020 à 19:53
Le programme efibootmgr
permet d'intéragir avec les entrées de démarrage d'un ordinateur. Les modification apportés par celui-ci sont stockés dans la configuration de l'UEFI et sont donc indépendantes du système d'exploitation à amorcer. Certaines cartes mères ne permettants pas la modification de ces paramètres (honte à leur constructeur), l'usage de cet outil permet de palier ce défaut majeur.
ATTENTION
Les commandes de cette page s'adressent 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).Création d'une entrée de type ESP
L'ESP (pour EFI System Partition) est un volume formaté en FAT 16 ou 32 comportant un ou plusieurs programmes exécutables par l'UEFI. Normalement, ce dernier est censé parcourir l'ensemble des périphériques reconnus au démarrage pour y trouver les programmes compatibles mais il n'est pas rare que cela ne se face pas (les UEFI sont généralement des grosses merdes bogués). Afin de forcer le système à trouver un fichier d'amorce, il faut créer une entrée spécifique menant à lui. Certains UEFI permettent de le faire depuis leur interface de configuration mais pas tous... Cette méthode est donc universelle :
efibootmgr --disk /dev/sda --part 1 --create --label "Un nom pour votre entrée" --loader /EFI/debian/grubx64.efi
Cette ligne précise, dans l'ordre :
- --disk : le disque contenant l'ESP
- --part : le numéro de la partition faisant office d'ESP et contenant le programme d’amorçage
- --create : paramètre précisant la création de l'entrée
- --label : permet de définir un nom arbitraire pour reconnaître l'entrée parmi les autres
- --loader : le chemin complet du chargeur d’amorçage UEFI
Création d'une entrée de type STUB
Depuis sa version 3.3, le noyau Linux 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 additionnel (GRUB, Lilo, Syslinux...), aussi appelé bootloader, c'est-à-dire qu'après le POST, aucun menu de choix ne sera affiché, démarrant ainsi immédiatement le système d'exploitation.
Cette méthode ne permet pas d'utiliser de multiples lignes de démarrage 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.
Tout d'abord, on a besoin de connaître l'UUID de votre partition racine (/) :
blkid
La commande va un UUID par partition. 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 se 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 les 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 amorcer directement sur cette nouvelle entrée.
Changer l'ordre de démarrage
Pour voir l'ordre de démarrage courant, on peut utiliser :
efibootmgr | grep BootOrder
En sortie vous devriez avoir des nombres hexadécimaux, qui correspondent chacun à une entrée dans l'UEFI. On peut savoir à quelle entrée correspond chaque nombre avec :
efibootmgr | grep Boot0
Pour changer l'ordre de démarrage, il suffit de classer ces valeurs selon vos désirs :
efibootmgr -o XXX,YYYY,ZZZZ
INFORMATION
Si vous ne précisez qu'une entrée, elle deviendra la valeur par défaut pour le démarrage.Il est possible de réinitialiser l'ordre de démarrage :
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 délais de démarrage
Il est possible de changer le délais de démarrage avant que l'UEFI n'utilise une entrée :
efibootmgr -t X
Où X est le temps en secondes.
On peut aussi facilement supprimer ce délais avec :
efibootmgr -T
Pour ceux qui apprécient avoir un démarrage rapide.
Ajouter plus d'options au démarrage
À l'instar d'un chargeur d'amorçage, il est possible de spécifier des options au noyau. Toutes les options du noyau sont spécifiées avec le paramètre -u
. Pour l'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.