Efibootmgr

efibootmgr is a tool for managing UEFI boot entries.

It is not a bootloader. It is a tool that interacts with the EFI firmware of the system, which itself is acting as a bootloader. Using efibootmgr boot entries can be created, reshuffled and removed.

Installation[edit | edit source]

Kernel[edit | edit source]

CONFIG_EFI_VARS support needs to be enabled:

KERNEL Enable EFI variable support
Firmware Drivers  --->
   EFI (Extensible Firmware Interface) Support  --->
       <*> EFI Variable Support via sysfs

Emerge[edit | edit source]

The sys-boot/efibootmgr package does not have any USE flags. All that is needed is to install it:

root #emerge --ask sys-boot/efibootmgr

Configuration[edit | edit source]

EFI vars[edit | edit source]

In order to successfully use efibootmgr the EFI variables filesystem must be accessible. This requires that the system has been booted in EFI mode (and not through the firmware's MBR mode) as otherwise the EFI variables themselves cannot be accessed. If the system is in MBR mode, reboot and do what is necessary in order to tell the system firmware to boot in EFI mode. Usually this involved either changing an option in the firmware's settings or selecting an EFI boot entry in the system's boot menu.

When the system is in EFI mode, run the following command to check for the existence of efivarfs:

root #mount | grep efivars
efivarfs on /sys/firmware/efi/efivars type efivarfs (ro,relatime)

It is mounted read-only (ro) through the sysfs init script), so it needs to be remounted read-write (rw) manually using the following command:

root #mount -o remount,rw -t efivarfs efivarfs /sys/firmware/efi/efivars

Preconditions[edit | edit source]

If an EFI System Partition (ESP) does not exist, one needs to be created, see EFI System Partition

Usage[edit | edit source]

Listing boot entries[edit | edit source]

To list the current boot entries by using the --verbose or -v option:

root #efibootmgr -v
BootCurrent: 0002
Timeout: 3 seconds
BootOrder: 0003,0003,0002,0000,0004
Boot0000* CD/DVD Drive  BIOS(3,0,00)
Boot0001* Hard Drive    BIOS(2,0,00)
Boot0002* Gentoo        HD(1,800,61800,6d98f360-cb3e-4727-8fed-5ce0c040365d)File(\EFI\boot\bootx64.efi)
Boot0003* Hard Drive    BIOS(2,0,00)P0: ST1500DM003-9YN16G

Creating a boot entry[edit | edit source]

To create an EFI boot entry, a couple of arguments are passed to efibootmgr:

  • --create or -c to create a new entry;
  • --part or -p followed by the partition number on which the EFI System Partition is hosted;
  • --disk or -d followed by the disk on which the EFI System Partition is hosted;
  • --label or -L followed by the label to use as the boot entry;
  • --loader or -l followed by the path of the EFI image to boot
Important
The path of the EFI image to boot must use \ (backslash) instead of / (forward slash) as path separator.
Important
Additionally, if the ESP was already created by another OS, it might be named differently than /boot/efi. If an ESP was created by another OS, begin the EFI Boot entry using this directory name, which immediately follows /boot.


If this is the folder structure:

root #tree /boot/ -L 3
/boot/
└── EFI
    ├── Grub
    │   └── grubx64.efi
    └── Gentoo
        └── bzImage-4.14.83.efi

then the loader paths will be:

root #efibootmgr -c -L "Grub" -l '\EFI\Grub\grubx64.efi'
root #efibootmgr -c -L "Gentoo" -l '\EFI\Gentoo\bzImage-4.14.83.efi'

For instance:

root #efibootmgr -c -d /dev/sda -p 2 -L "Gentoo" -l '\efi\boot\bootx64.efi'

It is also possible to add parameters - maybe not supported by all UEFI implementations[1] - to the kernel's command line:

root #efibootmgr -c -d /dev/sda -p 2 -L "Gentoo" -l '\efi\boot\bootx64.efi' -u 'root=/dev/sda3 initrd=\efi\boot\initramfs.img quiet'

Optionally, additional kernels can be installed and made known to the UEFI firmware. This is especially useful when wanting to test more kernels or to dual-boot with another operating system. These will be shown in the boot selection prompt, normally after a keyboard hotkey is pressed at the right time during system initialization. The latest added entry always gets highest boot priority, so it will be default. If the hotkey combination is unknown, search for official documentation from the computer manufacturer. This information is usually not difficult to find.

Deleting a boot entry[edit | edit source]

Before deleting an entry, first figure out what ID the entry has.

To delete the Gentoo entry as shown above (which has Boot0002 as the identifier), ask efibootmgr to delete the entry with id 2, passing the arguments --bootnum or -b with the identifier, and --delete-bootnum or -B to delete the entry:

root #efibootmgr -b 2 -B

Removal[edit | edit source]

Unmerge[edit | edit source]

root #emerge --ask --depclean --verbose sys-boot/efibootmgr

See also[edit | edit source]

References[edit | edit source]

  1. At least for Dell EFI firmwares, a workaround was implemented in kernel 5.10: https://lkml.org/lkml/2020/9/18/228
This article is issued from Gentoo. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.