EFISTUB (Español)
El kernel de Linux admite arrancar con EFISTUB (EFI BOOT STUB). Esta característica permite que el firmware EFI cargue el kernel como un ejecutable EFI. La opción está activada de forma predeterminada en los kernels de Arch Linux o se puede activar mediante el establecimiento de la variable CONFIG_EFI_STUB=y
en la configuración del kernel. Vea The EFI Boot Stub para más información.
Con EFISTUB un kernel se puede arrancar directamente por una placa base UEFI o indirectamente usando un gestor de arranque. Este último es recomendado si se tienen múltiples pares de kernel/initramfs y el menú de inicio UEFI de su placa base no es fácil de usar.
Prepararse para EFISTUB
Primero, debe crear una EFI system partition (Español) y elegir cómo se monta. Vea EFI system partition (Español)#Montar la partición para todas las opciones de montaje disponibles.
-
pacman (Español) actualizará directamente el kernel que leerá el firmware EFI si monta la partición ESP en
/boot
. - Puede mantener el kernel e initramfs fuera de la partición ESP si utiliza un gestor de arranque que tenga un controlador de sistema de archivos para la partición donde residan, por ejemplo rEFInd.
Arrancar EFISTUB
esp/EFI/arch/initramfs-linux.img
, la línea correspondiente a UEFI debe ser initrd=\EFI\arch\initramfs-linux.img
. En los siguientes ejemplos asumiremos que todo está en esp/
.Utilizar un gestor de arranque
Existen varios gestores de arranque UEFI que pueden proporcionar opciones adicionales o simplificar el proceso de arranque UEFI —especialmente si tiene múltiples kernels/sistemas operativos—. Vea Arch boot process (Español)#Gestor de arranque para más información.
Es posible lanzar un kernel EFISTUB desde el intérprete de órdenes de UEFI como si fuera una aplicación normal UEFI. En este caso, los parámetros del kernel se pasan como parámetros normales al archivo del kernel EFISTUB lanzado.
> fs0: > \vmlinuz-linux root=PARTUUID=3518bb68-d01e-45c9-b973-0b5d918aae96 rw initrd=\initramfs-linux.img
Para evitar tener que recordar todos los parámetros del kernel una y otra vez, puede guardar la orden ejecutable como un script de intérprete de órdenes (por ejemplo, como archlinux.nsh
) en la partición del sistema UEFI, luego ejecútelo con:
> fs0: > archlinux
Utilizar directamente UEFI
UEFI está diseñado para eliminar la necesidad de tener un gestor de arranque intermediario como, por ejemplo, GRUB (Español). Si su placa base tiene una buena implementación UEFI, es posible incluir los parámetros del kernel dentro de una entrada de arranque UEFI para que la placa base arranque Arch directamente. Puede utilizar efibootmgr
o UEFI Shell v2 para modificar las entradas de arranque de su placa base (para que incluya a Arch).
efibootmgr
La orden sería como sigue:
# efibootmgr --disk /dev/sdX --part Y --create --label "Arch Linux" --loader /vmlinuz-linux --unicode 'root=PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw initrd=\initramfs-linux.img' --verbose
Donde /dev/sdX
and Y
se deben cambiar para reflejar el disco y la partición donde se encuentra la ESP. Cambie el parámetro root=
para reflejar la raiz de Linux. Tenga en cuenta que el argumento -u
/--unicode
entre comillas es solo un ejemplo de la lista de los parámetros del kernel, por lo que es posible que deba agregar parámetros adicionales (por ejemplo, para suspender en disco o Microcode (Español)).
Después de agregar la entrada de inicio, puede verificar que dicha entrada se añadió correctamente con:
# efibootmgr --verbose
efibootmgr
podrían negarse a crear nuevas entradas de inicio. Esto podría ser debido a la falta de espacio libre en la memoria NVRAM. Podría tratar de eliminar cualquier archivo de volcado de EFI:
# rm /sys/firmware/efi/efivars/dump-*O, como último recurso, arrancar con el parámetro del kermel
efi_no_storage_paranoia
. También puede intentar degradar su instalación de efibootmgr a la versión 0.11.0 si la tiene disponible en su memoria caché. Esta versión funciona con la versión 4.0.6 de Linux. Véase el bug de la discusión FS#34641 para más información.Para establecer el orden de arranque, ejecute:
# efibootmgr --bootorder XXXX,XXXX --verbose
donde XXXX es el número que aparece en la salida de la orden efibootmgr
de cada entrada.
Más información sobre efibootmgr en Unified Extensible Firmware Interface (Español)#efibootmgr. Publicación del foro: https://bbs.archlinux.org/viewtopic.php?pid=1090040#p1090040 .
efibootmgr con el archivo .efi
Si usa cryptbootAUR y sbupdate-gitAUR para generar sus propias claves para Secure Boot y firma con ellas initramfs y el kernel, cree, luego, una imagen .efi de arranque, efibootmgr puede usarse directamente para arrancar el archivo .efi file:
# efibootmgr --create --disk /dev/sdX --part partition_number --label "label" --loader "EFI\folder\file.efi" --verbose
Véase efibootmgr(8) para obtener una explicación de las opciones.
Intérprete de órdenes de UEFI
Algunas implementaciones de UEFI hacen que sea difícil modificar la NVRAM con éxito usando efibootmgr. Si efibootmgr no puede crear una entrada con éxito, puede usar la orden bcfg en UEFI Shell v2 (es decir, desde la imagen iso live de Arch Linux).
Primero, averigüe el número de dispositivo donde reside la EFI system partition (Español), usando:
Shell> map
En este ejemplo, 1
se utiliza como número de dispositivo. Para listar los contenidos de EFI system partition (Español) escriba:
Shell> ls fs1:
Para ver las entradas de arranque actuales escriba:
Shell> bcfg boot dump
Para agregar una entrada para el kernel, utilice:
Shell> bcfg boot add N fs1:\vmlinuz-linux "Arch Linux"
donde N
es la ubicación donde se agregará la entrada en el menú de inicio. 0 es el primer elemento del menú. Los elementos de menú ya existentes se desplazarán en el menú sin que se descarten.
Para agregar las opciones de kernel necesarias, primero cree un archivo en la ESP:
Shell> edit fs1:\options.txt
En el archivo agregue la línea de arranque. Por ejemplo:
root=/dev/sda2 ro initrd=\initramfs-linux.img
Presione F2
para guardar y luego F3
para salir.
Para agregar estas opciones a su entrada anterior, haga lo siguiente:
Shell> bcfg boot -opt N fs1:\options.txt
Repita este proceso para cualquier entrada adicional.
Para eliminar un elemento previamente agregado, escriba:
Shell> bcfg boot rm N
Utilizar un script startup.nsh
Algunas implementaciones de UEFI no retienen las variables de EFI entre los arranques en frío (por ejemplo, VirtualBox (Español)) y cualquier cosa que se haya configurado a través de la interfaz del firmware de UEFI se perderá durante el apagado.
La UEFI Shell Specification 2.0 establece que un script llamado startup.nsh
en la raíz de la partición de ESP siempre debe interpretarse y puede contener instrucciones arbitrarias; entre las que se puede establecer una línea de carga de arranque. Asegúrese de montar la partición ESP en /boot
y cree un script startup.nsh
que contenga una línea de carga de arranque del kernel. Por ejemplo:
vmlinuz-linux rw root=/dev/sdX [rootfs=myfs] [rootflags=myrootflags] \ [kernel.flag=foo] [mymodule.flag=bar] \ [initrd=\intel-ucode.img] initrd=\initramfs-linux.img
Este método funcionará con casi todas las versiones de firmware UEFI que pueda encontrar en hardware real, por lo que puede usarlo como último recurso. El script debe ser una única línea larga. Las secciones entre paréntesis son opcionales y se ofrecen solo como una guía. Los saltos de línea de estilo shell son solo para clarificación visual. Los sistemas de archivos FAT utilizan la barra invertida como separador de ruta y, en este caso, la barra diagonal inversa declara que el initramfs se encuentra en la raíz de la partición ESP. Solo se carga el microcódigo de Intel en la línea de parámetros de arranque; El microcódigo de AMD se lee del disco más tarde durante el proceso de arranque; Esto se hace automáticamente por el kernel.