Efibootmgr
La aplicación efibootmgr interactúa con el firmware UEFI del sistema. Es una herramienta popular para manipular los ajustes EFI a fin de crear y gestionar entradas de arranque capaces de arrancar Línux (o cualquier otro sistema operativo EFI).
La aplicación sys-boot/efibootmgr no es un cargador de arranque. Se trata de una herramienta que interactúa con el firmware EFI del sistema, el cual actúa como un cargador de arranque. Si se utilizar efibootmgr se pueden crear, editar, reordenar y eliminar entradas de arranque.
Instalación
Núcleo
CONFIG_EFIVAR_FS support needs to be enabled.
It is not possible to use efivarfs without the EFI runtime services, which (in case they have been disabled by default, i.e.
CONFIG_EFI_DISABLE_RUNTIME=y
) can also be enabled by the kernel command-line option efi=runtime.Emerge
El paquete sys-boot/efibootmgr no tiene ningún ajuste USE. Todo lo que se necesita es instalarlo:
root #
emerge --ask sys-boot/efibootmgr
Configuración
Variables EFI
Para utilizar correctamente efibootmgr, se debe poder acceder al sistema de ficheros de las variables EFI. Esto requiere que se haya iniciado el sistema en modo EFI (y no a través del modo MBR del firmware), de lo contrario no se podrá acceder a las variables EFI. Si el sistema está en modo MBR, reiniciar y hacer todo lo necesario para indicarle al firmware que se debe iniciar en modo EFI. Normalmente esto implica cambiar una opción en la configuración del firmware o seleccionar una entrada de arranque EFI en el menú de inicio del sistema.
Cuando el sistema está en modo EFI, lanzar la siguiente orden para comprobar la existencia de efivarfs:
root #
mount | grep efivars
efivarfs on /sys/firmware/efi/efivars type efivarfs (rw,nosuid,nodev,noexec,relatime)
Si la partición efivars no está montada (que ha debido montarse a través del guión de inicio sysfs), es posible montarla manualmente utilizando la siguiente orden:
root #
mount -t efivarfs efivarfs /sys/firmware/efi/efivars
Precondiciones
Si no existe una sistema de particiones EFI (ESP), se necesitará crear uno, leer EFI System Partition
Utilización
Listar las entradas de arranque
Para listar las entradas de inicio actuales se puede utilizar la opción --verbose (-v)
:
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
Crear una entrada de arranque
Para crear una entrada de arranque EFI, pasaremos un par de argumentos a efibootmgr:
--create (-c)
para crear una nueva entrada;--part (-p)
seguido por el número de partición en la que se aloja la partición EFI System Partition;--disk (-d)
seguido por el disco en el que se aloja la partición EFI System Partition;--label (-L)
seguida de la etiqueta que vamos a utilizar como entrada de arranque;--loader (-l)
seguido de la ruta a la imagen EFI para arrancar.
La ruta de la imagen de EFI a arrancar debe usar barra invertida (\), en lugar de la barra diagonal (/), como separador de ruta.
Additionally, if the ESP was already created by another OS, it might be named differently than /efi/EFI. If an ESP was created by another OS, begin the EFI Boot entry using this directory name, which immediately follows /efi.
Below are some examples of how a UEFI entry can be created. If this is the folder structure:
root #
tree /efi/ -L 3
/efi/ └── EFI ├── Grub │ └── grubx64.efi └── Gentoo └── bzImage.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.efi'
Por ejemplo:
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'
Opcionalmente, se pueden instalar núcleos adicionales e informar de su existencia al firmware UEFI. Esto es especialmente útil cuando queremos probar más de un núcleo o realizar un arranque dual con otro sistema operativo. Esto se mostrará en el símbolo de espera de órdenes de la selección de arranque, normalmente después de que una tecla con funciones especiales del teclado se ha pulsado durante la inicialización del sistema. La última entrada añadida tiene siempre al prioridad más alta por lo que será la opción por defecto. Si se desconoce la combinación especial de teclas durante la inicialización, se puede buscar en la documentación oficial del fabricante del computador. De hecho, esta información no es muy difícil de encontrar.
Eliminar una entrada de arranque
Antes de eliminar una entrada, primero debemos averiguar qué identificador (ID) tiene la entrada.
Para eliminar, por ejemplo, la entrada de Gentoo que se muestra arriba (que tiene Boot0002 como identificador), le indicaremos a efibootmgr que elimine la entrada con el identificador 2, para lo cual le pasaremos los argumentos --bootnum (-b)
seguido del identificador, y --delete-bootnum (-B)
para eliminar la entrada en cuestión:
root #
efibootmgr -b 2 -B
Removable media
EFI bootloaders on removable media are not configured as boot entries, so efibootmgr is not required. See removable media boot path on the ESP for details.
Eliminación
Desinstalación
root #
emerge --ask --depclean --verbose sys-boot/efibootmgr
Véase también
- rEFInd — a boot manager for UEFI platforms.
- EFI stub kernel, este artículo explica cómo configurar el núcleo de Línux para poder arrancarlo directamente desde EFI
- Alternativa 2: efibootmgr en el Manual de Gentoo
References
- ↑ At least for Dell EFI firmware, a workaround was implemented in kernel 5.10: https://lkml.org/lkml/2020/9/18/228