He tenido algunas experiencias bastante malas con GRUB2
. Podría decir (y haber dicho) algunas cosas desagradables sobre su proceso de diseño y desarrollo. Me desagrada especialmente su forma de actualización:por la razón que sea, debe actualizar semiautomáticamente varios scripts, uno indirectamente a través de otro en una cadena, para cada actualización del kernel, o muchos otros menores (y aparentemente no relacionados) modificaciones de configuración.
Esto contrasta directamente con experiencias anteriores que tuve con LILO
– al cual estoy considerando seriamente volver – ya que nunca tuve ningún problema con él, y su configuración fue bastante simple. Por un lado, tal como lo recuerdo, solo tenía que actualizar (o, más bien, solo se actualizaba) un único archivo de texto de configuración administrado de manera simple por actualización del kernel.
Entonces, ¿cómo funciona LILO en hardware moderno con los núcleos actuales? ¿Cómo funciona GRUB? ¿Cómo funcionan otros cargadores de arranque? ¿Tengo que cumplir alguna condición previa, o solo se trata de escribir el archivo de configuración y ejecutar lilo
? comando como lo recuerdo con cariño en los viejos tiempos? ¿La actualización del paquete del kernel (Debian/Ubuntu) actualiza LILO como lo hace con GRUB2?
Respuesta aceptada:
ELILO
Administración de cargadores de arranque EFI para Linux:uso de ELILO
Es realmente difícil para mí decidir qué parte de eso copiar y pegar porque todo es muy bueno, así que solo les pido que lo lean.
Rod Smith
Elaboró y mantiene ambos gdisk
y rEFInd
.
Pero antes me gustaría comentar un poco al respecto. El enlace ELILO anterior es a una de las muchas páginas sobre el arranque UEFI que encontrará en rodsbooks.com escritas por Rod Smith. Es un escritor técnico consumado, y si alguna vez buscó en Google el tema del arranque UEFI y terminó sin leer algo suyo, probablemente se debió a que se saltó los resultados principales.
Arranque Linux UEFI
Básicamente, el kernel de Linux puede ser ejecutado directamente por el firmware.
En el enlace anterior, menciona el cargador auxiliar EFI del kernel de Linux; en mi opinión, esto es lo que debería usar, ya que permite que el firmware mismo llame directamente al kernel de Linux. Independientemente de lo que estés haciendo algo está siendo ejecutado por el firmware, y parece que algo es grub
. Si el firmware puede cargar directamente el kernel de su sistema operativo, ¿de qué sirve un gestor de arranque? El firmware UEFI monta una partición GPT con formato FAT marcada esp por la tabla de particiones y ejecuta una ruta allí guardada como una variable de arranque UEFI en un módulo de memoria flash integrado. Entonces, una cosa que podría hacer es colocar el kernel de Linux en esa partición FAT y almacenar su ruta en esa variable de arranque. De repente, el núcleo es propio gestor de arranque.
Cargadores de arranque
En los sistemas UEFI, los gestores de arranque son redundantes, incluido ELILO.
El problema que se diseñó para resolver los cargadores de arranque era que los sistemas BIOS solo leían en el primer sector del arranque partición marcada y ejecútela. Es un poco difícil hacer algo significativo con un kernel de 512 bytes, por lo que lo más común era escribir una pequeña utilidad que pudiera montar un sistema de archivos donde mantuvieras el real kernel y cargarlo en cadena.
Relacionado:¿determinar el shell en el script durante el tiempo de ejecución?
De hecho, los 512 bytes a menudo no eran suficientes ni siquiera para los gestores de arranque. grub
, por ejemplo, en realidad se carga en cadena antes de cargar en cadena su kernel, porque encaja su segunda etapa en el espacio vacío entre el sector de arranque y el primer sector de su sistema de archivos. Es una especie de truco sucio, pero funcionó.
Administradores de arranque
Sin embargo, en aras de una fácil configuración, algunos intermediario puede ser útil.
Lo que hace rEFInd de Rod Smith es iniciar como una aplicación de EFI – Este es un concepto relativamente nuevo. Es un programa que se ejecuta desde el disco y que regresa al firmware. Lo que hace rEFInd es permitirle administrar los menús de arranque y luego devuelve su selección de arranque al firmware ejecutar. Viene con controladores de sistema de archivos UEFI – entonces, por ejemplo, puede usar el cargador de código auxiliar EFI del kernel en un no FAT partición (como su actual /boot
). Es muy simple de administrar, si tal cosa es necesaria, y agrega la simplicidad de un kernel de sistema ejecutable a la conveniencia de un gestor de arranque configurable.
Indirección atómica
El núcleo no necesita enlaces simbólicos:puede mount --bind
.
Si hay alguna ruta en su /
donde debería no permitir enlaces simbólicos, es /boot
. Un enlace simbólico huérfano en /boot
es no el tipo de problema que deberías tener que solucionar. Aún así, es una práctica bastante común configurar direcciones indirectas elaboradas en /boot
por varias distribuciones, incluso si es una idea horrible, para manejar actualizaciones de kernel en el lugar y/o configuraciones de kernel múltiples.
Este es un problema para sistemas EFI no configurado para cargar controladores de sistemas de archivos (como los que se proporcionan con el paquete rEFInd) porque FAT es un sistema de archivos bastante estúpido en general y no los entiende.
Personalmente, no uso los controladores del sistema de archivos UEFI provistos con rEFInd, aunque la mayoría de las distribuciones incluyen un paquete rEFInd que se puede instalar a través del administrador de paquetes y olvidarse de usar su propio enlace simbólico horrible /boot
config y los controladores del sistema de archivos UEFI empaquetados de rEFInd.
Mi configuración
Una vez escribí un conjunto de instrucciones y lo publiqué aquí, pero parece:
% grep esp /etc/fstab &&
> ls /esp/EFI
LABEL=ESP /esp vfat defaults 0 1
/esp/EFI/arch_root /boot none bind,defaults 0 0
arch_root/ arch_sqsh/ arch_xbmc/ BOOT/ ipxe/
Así que puse esas dos líneas en mi /etc/fstab
apuntando a una carpeta que pretendo que contenga el /boot
de la nueva instalación de Linux y estoy casi terminado de preocuparse por todo el asunto. También tengo que hacer:
cat /boot/refind_linux.conf
"Arch" "root=LABEL=data rootflags=subvol=arch_root,rw,ssd,compress-force=lzo,space_cache,relatime"
Aparte de instalar el refind-efi
paquete a través de pacman
para el primero, eso es todo lo que se requiere para configurar tantas instalaciones/configuraciones separadas como desee. Tenga en cuenta que la mayoría de esa cadena anterior consiste en opciones de montaje específicas de btrfs especificadas como parámetros del núcleo. Un /boot/refind_linux.conf
más típico probablemente se vería así:
"Menu Entry" "root=/dev/sda2"
Y eso es todo lo que se necesita.
rodsbooks.com
Si aún desea ELILO, puede encontrar las instrucciones de instalación en el enlace de arriba. Si desea REFInd, encontrará enlaces a él en el primer párrafo. Básicamente, si desea realizar cualquier configuración de arranque UEFI, primero lea rodsbooks.com.
Relacionado:¿N alternativa a sed que admita Unicode?