Difference between revisions of "EFISTUB (Español)"

From ArchWiki
Jump to navigation Jump to search
(flagged broken section links (interactive))
(Tag: wiki-scripts)
(articulo actualizado)
 
Line 3: Line 3:
 
[[ja:EFISTUB]]
 
[[ja:EFISTUB]]
 
[[ru:EFISTUB]]
 
[[ru:EFISTUB]]
 +
{{TranslationStatus (Español)|EFISTUB|2018-11-27|544457}}
 
{{Related articles start (Español)}}
 
{{Related articles start (Español)}}
 
{{Related|Arch boot process (Español)}}
 
{{Related|Arch boot process (Español)}}
{{Related|Boot loaders (Español)}}
 
 
{{Related|Unified Extensible Firmware Interface (Español)}}
 
{{Related|Unified Extensible Firmware Interface (Español)}}
 
{{Related articles end}}
 
{{Related articles end}}
  
{{Advertencia|1=Se ha notificado un error según el cual el arranque con EFISTUB puede fallar dependiendo de la versión del kernel y del modelo de placa base. Vea [https://bugs.archlinux.org/task/33745] y [https://bbs.archlinux.org/viewtopic.php?id=156670] para más información.}}
+
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 {{ic|1=CONFIG_EFI_STUB=y}} en la configuración del kernel. Vea [https://www.kernel.org/doc/Documentation/efi-stub.txt The EFI Boot Stub] para más información.
  
El kernel de Linux ({{Pkg|linux}}>=3.3) 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 {{ic|1=CONFIG_EFI_STUB=y}} en la configuración del kernel (vea [https://www.kernel.org/doc/Documentation/efi-stub.txt 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 [[boot loader (Español)|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.
  
Un kernel EFISTUB se puede arrancar directamente por una placa base UEFI o indirectamente usando un [[Boot_loaders_(Español)#Gestores_de_arranque_solo_para_UEFI|gestor de arranque UEFI]]{{Broken section link}}. 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 ==
  
== Configurar 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.
  
Después de crear la [[Unified Extensible Firmware Interface#EFI System Partition|EFI System Partition]]{{Broken section link}}, debe elegir la forma en que se va a montar. La opción más sencilla es montarlo en {{ic|/boot}}, ya que esto permite a pacman actualizar directamente el kernel que el firmware EFI leerá. Si opta por esta opción, continúe en [[#Arrancar EFISTUB]].
+
{{Sugerencia|
 +
* [[pacman (Español)]] actualizará directamente el kernel que leerá el firmware EFI si monta la partición ESP en {{ic|/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]].}}
  
=== Puntos de montajes de ESP alternativos ===
+
== Arrancar EFISTUB ==
  
Si monta la partición del sistema EFI (ESP) en otro lugar (como {{ic|/boot/efi}}), tendrá que copiar los archivos de /boot a esa ubicación (en adelante {{ic|$esp}}).
+
{{Nota|la ruta a initramfs para EFISTUB debe ser relativa con respecto a la raíz de la «''EFI System Partition''» y usar barras invertidas (de acuerdo con los estándares de EFI). Por ejemplo, si initramfs se encuentra en {{ic|''esp''/EFI/arch/initramfs-linux.img}}, la línea correspondiente a UEFI debe ser {{ic|1=initrd=\EFI\arch\initramfs-linux.img}}. En los siguientes ejemplos asumiremos que todo está en {{ic|''esp''/}}.}}
  
# mkdir $esp/EFI/arch
+
=== Utilizar un gestor de arranque ===
# cp /boot/vmlinuz-linux $esp/EFI/arch/vmlinuz-arch.efi
 
# cp /boot/initramfs-linux.img $esp/EFI/arch/initramfs-arch.img
 
# cp /boot/initramfs-linux-fallback.img $esp/EFI/arch/initramfs-arch-fallback.img
 
  
Además, tendrá que mantener los archivos de ESP al día con las actualizaciones posteriores del kernel. De no hacerlo podría dar como resultado un sistema que no arranca. Las siguientes secciones ofrecen varios mecanismos para hacerlo.
+
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.
  
==== Utilizar systemd ====
+
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.
  
[[Systemd (Español)]] tiene la facultad de realizar tareas tras desencadenarse un evento. En este caso particular, la capacidad de detectar un cambio en la ruta de acceso se puede utilizar para sincronizar el kernel EFISTUB y los archivos initramfs cuando se actualizan en {{ic|/boot}}.
+
> fs0:
 +
> \vmlinuz-linux root=PARTUUID=3518bb68-d01e-45c9-b973-0b5d918aae96 rw initrd=\initramfs-linux.img
  
{{hc|/etc/systemd/system/efistub-update.path|<nowiki>
+
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 {{ic|archlinux.nsh}}) en la partición del sistema UEFI, luego ejecútelo con:
[Unit]
 
Description=Copiar Kernel EFISTUB a partición UEFISYS
 
  
[Path]
+
> fs0:
PathChanged=/boot/initramfs-linux-fallback.img
+
> archlinux
  
[Install]
+
=== Utilizar directamente UEFI ===
WantedBy=multi-user.target
 
</nowiki>}}
 
  
{{Nota|Este servicio observa a la imagen initramfs-linux-fallback.img para realizar los cambios, ya que dicha imagen es el último archivo compilado por mkinitcpio. Esto actúa como una condición para evitar una carrera potencial donde systemd podría copiar archivos antiguos antes de que se hayan compilado todos los archivos.}}
+
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 {{ic|efibootmgr}} o UEFI Shell v2 para modificar las entradas de arranque de su placa base (para que incluya a Arch).
  
{{hc|/etc/systemd/system/efistub-update.service|<nowiki>
+
==== efibootmgr ====
[Unit]
 
Description=Copiar Kernel EFISTUB a partición UEFISYS
 
  
[Service]
+
La orden sería como sigue:
Type=oneshot
 
ExecStart=/usr/bin/cp -f /boot/vmlinuz-linux $esp/EFI/arch/vmlinuz-arch.efi
 
ExecStart=/usr/bin/cp -f /boot/initramfs-linux.img $esp/EFI/arch/initramfs-arch.img
 
ExecStart=/usr/bin/cp -f /boot/initramfs-linux-fallback.img $esp/EFI/arch/initramfs-arch-fallback.img
 
</nowiki>}}
 
  
Activar estos servicios con:
+
  # 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
  # systemctl enable efistub-update.path
 
  
==== Incron ====
+
Donde {{ic|''/dev/sdX''}} and {{ic|''Y''}} se deben cambiar para reflejar el disco y la partición donde se encuentra la ESP. Cambie el parámetro {{ic|1=root=}} para reflejar la raiz de Linux. Tenga en cuenta que el argumento {{ic|-u}}/{{ic|--unicode}} entre comillas es solo un ejemplo de la lista de los [[kernel parameters (Español)|parámetros del kernel]], por lo que es posible que deba agregar parámetros adicionales (por ejemplo, para [[Suspend and hibernate#Required kernel parameters|suspender en disco]] o [[Microcode (Español)]]).
  
{{Pkg|incron}} se puede utilizar para ejecutar un script de sincronización del Kernel EFISTUB después de las actualizaciones del kernel.
+
{{Sugerencia|guarde la orden para crear su entrada de arranque en un script de intérprete de órdenes en algún lugar, lo que facilitará su modificación (por ejemplo, al cambiar los parámetros del kernel}}
  
{{hc|/usr/local/bin/efistub-update.sh|<nowiki>
+
Después de agregar la entrada de inicio, puede verificar que dicha entrada se añadió correctamente con:
#!/usr/bin/env bash
 
/usr/bin/cp -f /boot/vmlinuz-linux $esp/EFI/arch/vmlinuz-arch.efi
 
/usr/bin/cp -f /boot/initramfs-linux.img $esp/EFI/arch/initramfs-arch.img
 
/usr/bin/cp -f /boot/initramfs-linux-fallback.img $esp/EFI/arch/initramfs-arch-fallback.img</nowiki>}}
 
  
{{Nota|El primer parámetro {{ic|/boot/initramfs-linux-fallback.img}} es el archivo que debe tener en cuenta. El segundo parámetro {{ic|IN_CLOSE_WRITE}} es la acción que debe observar. El tercer parámetro {{ic|/usr/local/bin/efistub-update.sh}} es el script que debe ejecutar.}}
+
# efibootmgr --verbose
  
{{hc|/etc/incron.d/efistub-update.conf|<nowiki>
+
{{Nota|algunas combinaciones de kernel y {{ic|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:
/boot/initramfs-linux-fallback.img IN_CLOSE_WRITE /usr/local/bin/efistub-update.sh</nowiki>}}
 
  
Para utilizar este método, active el servicio incrond:
+
# rm /sys/firmware/efi/efivars/dump-*
  
# systemctl enable incrond.service
+
O, como último recurso, arrancar con el parámetro del kermel {{ic|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 {{Bug|34641}} para más información.}}
  
==== Hook de mkinitcpio ====
+
Para establecer el orden de arranque, ejecute:
 
 
Mkinitcpio puede generar un hook que no necesita un demonio de nivel de sistema para funcionar. Se generará un proceso en segundo plano que espera a que se genere {{ic|vm-Linuz}}, {{ic|initramfs-linux.img}} y {{ic|initramfs-linux-fallback.img}} antes de copiar los archivos.
 
 
 
Añada {{ic|efistub-update}} a la lista de hooks en {{ic|/etc/mkinitcpio.conf}}.
 
  
{{hc|/usr/lib/initcpio/install/efistub-update|<nowiki>
+
# efibootmgr --bootorder ''XXXX'',''XXXX'' --verbose
#!/usr/bin/env bash
 
build() {
 
/root/watch.sh &
 
}
 
  
help() {
+
donde ''XXXX'' es el número que aparece en la salida de la orden {{ic|efibootmgr}} de cada entrada.
cat <<HELPEOF
 
Este hook espera a que mkinitcpio termine y copia la imagen ramdiks y el kernel terminados a la ESP
 
HELPEOF
 
}</nowiki>}}
 
  
{{hc|/root/watch.sh|<nowiki>
+
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 .
#!/usr/bin/env bash
 
  
while [[ -d "/proc/$PPID" ]]; do
+
==== efibootmgr con el archivo .efi ====
sleep 1
+
done
+
Si usa {{AUR|cryptboot}} y {{AUR|sbupdate-git}} para generar sus propias claves para [[Secure Boot#Using_your_own_keys|Secure Boot]] y firma con ellas initramfs y el kernel, cree, luego, una imagen ''.efi'' de arranque, {{Pkg|efibootmgr}} puede usarse directamente para arrancar el archivo  ''.efi'' file:
  
/usr/bin/cp -f /boot/vmlinuz-linux $esp/EFI/arch/vmlinuz-arch.efi
+
# efibootmgr --create --disk /dev/sdX --part ''partition_number'' --label "''label''" --loader "EFI\''folder''\''file''.efi" --verbose
/usr/bin/cp -f /boot/initramfs-linux.img $esp/EFI/arch/initramfs-arch.img
 
/usr/bin/cp -f /boot/initramfs-linux-fallback.img $esp/EFI/arch/initramfs-arch-fallback.img
 
  
echo "Kernel sincronizado con ESP"</nowiki>}}
+
Véase {{man|8|efibootmgr}} para obtener una explicación de las opciones.
  
==== Montar en bind ====
+
==== Intérprete de órdenes de UEFI ====
  
En lugar de montar la propia ESP en {{ic|/boot}}, se puede montar un directorio de ESP en {{ic|/boot}} usando un montaje con bind (véase {{ic|mount(8)}}). Esto permite a pacman actualizar el kernel directamente, manteniendo la ESP organizada a su gusto. Si funciona en su caso, este método es mucho más simple que los otros enfoques que necesitan copiar los archivos.
+
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 [[UEFI#bcfg|bcfg]] en UEFI Shell v2 (es decir, desde la imagen iso live de Arch Linux).
  
{{Nota|1=Esto requiere un kernel y un gestor de arranque compatibles con FAT32. Esto no es un problema para una instalación normal de Arch, pero podría ser problemático para otras distribuciones (a saber, las que requieren enlaces simbólicos en {{ic|/boot}}). Post del foro [https://bbs.archlinux.org/viewtopic.php?pid=1331867#p1331867 aquí].}}
+
Primero, averigüe el número de dispositivo donde reside la [[EFI system partition (Español)]], usando:
  
Como se hizo [[#Alternative ESP Mount Points|anteriormente]]{{Broken section link}}, copie todos los archivos de /boot a un directorio en la ESP, pero monte ESP '''fuera''' de {{ic|/boot}} (por ejemplo, {{ic|/esp}}). A continuación, monte en bind el directorio:
+
  Shell> map
  
# mount --bind /esp/EFI/arch/ /boot
+
En este ejemplo, {{ic|1}} se utiliza como número de dispositivo. Para listar los contenidos de [[EFI system partition (Español)]] escriba:
  
Si sus archivos se muestran en {{ic|/boot}} como desea, edite [[Fstab (Español)]] para que esta operación sea permanente:
+
Shell> ls fs1:
  
{{hc|/etc/fstab|<nowiki>
+
Para ver las entradas de arranque actuales escriba:
/esp/EFI/arch /boot none defaults,bind 0 0
 
</nowiki>}}
 
  
{{Advertencia|''Debe'' usar el [[Kernel_parameters#Parameter_list|parámetro del kernel]] {{ic|1=root=''system_root''}} para poder arrancar utilizando este método.}}
+
Shell> bcfg boot dump
  
== Arrancar EFISTUB ==
+
Para agregar una entrada para el kernel, utilice:
  
{{Advertencia|La ruta a initramfs para EFISTUB debe ser relativa con respecto a la raiz de EFI System Partition. Por ejemplo, si initramfs se encuentra en {{ic|$esp/EFI/arch/initramfs-linux.img}}, la línea correspondiente a UEFI debe ser {{ic|1=initrd=/EFI/arch/initramfs-linux.img}} o {{ic|1=initrd=\EFI\arch\initramfs-linux.img}}.}}
+
Shell> bcfg boot add ''N'' fs1:\vmlinuz-linux "Arch Linux"
  
=== Utilizar un gestor de arranque ===
+
donde {{ic|''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.
  
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 [[Boot loaders (Español)]] para más información.
+
Para agregar las opciones de kernel necesarias, primero cree un archivo en la ESP:
  
=== Utilizar la shell de UEFI ===
+
Shell> edit fs1:\options.txt
  
Es posible lanzar un kernel EFISTUB desde la shell 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.
+
En el archivo agregue la línea de arranque. Por ejemplo:
  
  > fs0:
+
  root=/dev/sda2 ro initrd=\initramfs-linux.img
> \EFI\arch\vmlinuz-linux root=PARTUUID=3518bb68-d01e-45c9-b973-0b5d918aae96 rootfstype=ext4 rw add_efi_memmap initrd=EFI/arch/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 shell (por ejemplo, como {{ic|archlinux.nsh}}) en la partición del sistema UEFI, luego ejecútelo con:
+
{{Nota|añada espacios adicionales al principio de la línea en el archivo. Hay una marca de demanda de bytes al principio de la línea que captará cualquier carácter que esté a su lado, lo que causará un error al iniciar.}}
  
> fs0:
+
Presione {{ic|F2}} para guardar y luego {{ic|F3}} para salir.
> archlinux
 
  
=== Utilizar directamente UEFI (efibootmgr) ===
+
Para agregar estas opciones a su entrada anterior, haga lo siguiente:
  
UEFI está [[UEFI#Multibooting_in_UEFI|diseñado para eliminar la necesidad]]{{Broken section link}} de tener un gestor de arranque intermedio 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 {{ic|efibootmgr}} para modificar las entradas de arranque de su placa base para que incluya a Arch.
+
Shell> bcfg boot -opt ''N'' fs1:\options.txt
  
# efibootmgr -d /dev/sd'''X''' -p '''Y''' -c -L "Arch Linux" -l /vmlinuz-linux -u "root='''/dev/sda2''' rw initrd=/initramfs-linux.img"
+
Repita este proceso para cualquier entrada adicional.
  
Donde {{ic|X}} e {{ic|Y}} se deben cambiar para reflejar el disco y la partición donde se encuentra la ESP. Cambie el parámetro {{ic|1=root=}} para reflejar la raiz de Linux (la UUID del disco también puede ser utilizada). Es una buena idea ejecutar:
+
Para eliminar un elemento previamente agregado, escriba:
  
  # efibootmgr -v
+
  Shell> bcfg boot rm ''N''
  
para verificar que la entrada resultante es correcta.
+
==== Utilizar un script startup.nsh ====
  
{{Advertencia|Algunas combinaciones de kernel y {{ic|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:
+
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.
  
# rm /sys/firmware/efi/efivars/dump-*
+
La [http://www.uefi.org/sites/default/files/resources/UEFI_Shell_Spec_2_0.pdf UEFI Shell Specification 2.0] establece que un script llamado {{ic|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 {{ic|/boot}} y cree un script {{ic|startup.nsh}} que contenga una línea de carga de arranque del kernel. Por ejemplo:
 
 
O, como último recurso, arrancar con el parámetro del kermel {{ic|efi_no_storage_paranoia}}. Véase bug discussion [https://bugs.archlinux.org/task/34641] para más información.}}
 
 
 
Para establecer el orden de arranque, ejecute:
 
  
  # efibootmgr -o XXXX,XXXX
+
  vmlinuz-linux rw root=/dev/sdX [rootfs=myfs] [rootflags=myrootflags] \
 +
  [kernel.flag=foo] [mymodule.flag=bar] \
 +
  [initrd=\intel-ucode.img] initrd=\initramfs-linux.img
  
donde XXXX es el número que aparece en la salida de la orden `efibootmgr` de cada entrada.
+
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.
  
{{Sugerencia|Guarde la orden para crear su entrada de arranque en un script de shell en algún lugar, lo que hará que sea más fácil de modificar (al cambiar los parámetros del kernel, por ejemplo)}}.
+
== Véase también ==
  
Más información sobre efibootmgr en [[Unified Extensible Firmware Interface (Español)#efibootmgr]]. Post del foro: https://bbs.archlinux.org/viewtopic.php?pid=1090040#p1090040 .
+
* [https://www.kernel.org/doc/Documentation/efi-stub.txt Linux Kernel Documentation on EFISTUB]
 +
* [http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commitdiff;h=291f36325f9f252bd76ef5f603995f37e453fc60;hp=55839d515495e766605d7aaabd9c2758370a8d27 Linux Kernel EFISTUB Git Commit]
 +
* [http://www.rodsbooks.com/efi-bootloaders/efistub.html Rod Smith's page on EFISTUB]

Latest revision as of 21:46, 27 November 2018

Estado de la traducción
Este artículo es una traducción de EFISTUB, revisada por última vez el 2018-11-27. Si advierte que la versión inglesa ha cambiado puede ayudar a actualizar la traducción, bien por usted mismo o bien avisando al equipo de traducción.

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.

Sugerencia:
  • 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

Nota: la ruta a initramfs para EFISTUB debe ser relativa con respecto a la raíz de la «EFI System Partition» y usar barras invertidas (de acuerdo con los estándares de EFI). Por ejemplo, si initramfs se encuentra en 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)).

Sugerencia: guarde la orden para crear su entrada de arranque en un script de intérprete de órdenes en algún lugar, lo que facilitará su modificación (por ejemplo, al cambiar los parámetros del kernel

Después de agregar la entrada de inicio, puede verificar que dicha entrada se añadió correctamente con:

# efibootmgr --verbose
Nota: algunas combinaciones de kernel y 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
Nota: añada espacios adicionales al principio de la línea en el archivo. Hay una marca de demanda de bytes al principio de la línea que captará cualquier carácter que esté a su lado, lo que causará un error al iniciar.

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.

Véase también