Terminología: ESP = mi partición EFI FAT32.
Quiero:
- Tener una instalación GRUB autónoma en mi ESP que cargue en cadena otro cargador de arranque GRUB en mi sistema de archivos raíz de distribución (
/
). Actualmente tengo varias distribuciones sin GRUB instalado en mis particiones. Cada uno se instala completamente en su propio ext4/
. Quiero que todos tengan su propio cargador de arranque secundario. - También es aceptable que el ESP GRUB primario se reinicie / recargue con un grub.cfg desde el sistema operativo. Carga en cadena de forma efectiva.
Lo que he probado:
- Los ejemplos que he encontrado incluyen el arranque de GRUB heredado desde GRUB2 y viceversa, pero no use archivos UEFI y .efi. La documentación de GNU GRUB ni siquiera menciona UEFI, y los wikis de Arch / Ubuntu / Gentoo proporcionan la información mínima para configurar una instalación básica (sin carga en cadena).
Hasta ahora:
- He instalado GRUB en mi ESP usando
grub-install
ygrub-mkconfig
.La prueba de arranque funciona. Esto significa que mi carpeta/boot/grub
está vacía y no es necesario montar mi ESP durante o después del arranque. - He Intenté instalar un segundo grub en
/boot/efi/
y/boot/grub/
, pero la parte de EFI no se instaló,grub-install
se queja de que el objetivo no es una partición EFI. Pero como ya tengo un GRUB primario instalado, no debería importar que mi GRUB secundario esté en ext4 rootfs, ¿verdad? Grub puede leer ext4. También probé la opción--force
.
Parece que necesito encontrar alguna forma de convencer al instalador de que está bien instalar grubx64.efi
bajo /boot/EFI
…
Si alguien tiene curiosidad acerca de cómo instalé el GRUB principal, solo era cuestión de usar las opciones correctas en grub-install
con respeto a mi ESP.
Respuesta
Hay otra forma: puede crear una entrada de menú que le diga a GRUB que cargue otra grub.cfg secundario, como uno de otra distribución de Linux.
Por ejemplo, comencé con Gentoo Linux desde el cual instalé GRUB2 en el MBR (la máquina es demasiado vieja para EFI).
Luego instalé NixOS, que configuré para generar grub.cfg en su propio / boot (separado del / boot de Gentoo) pero sin instalar GRUB.
Para aclarar, grub-install
se ejecutó desde Gentoo pero no de NixOS.
A continuación, para poder arrancar NixOS, agregué esto a /etc/grub.d/40_custom en Gentoo:
#!/bin/sh exec tail -n +3 $0 # This file provides an easy way to add custom menu entries. Simply type the # menu entries you want to add after this comment. Be careful not to change # the "exec tail" line above. menuentry "NixOS" --class gnu-linux --class gnu --class os $menuentry_id_option "nixos-0aca58bc-8fdb-4a07-aa2f-56406bcf19b7" { set root="hd0,msdos4" configfile /nixos/root/boot/grub/grub.cfg }
La clave es la línea configfile /nixos/root/boot/grub/grub.cfg
. Le dice a GRUB que cargue otro grub.cfg. Luego ejecuté grub-mkconfig
desde Gentoo para aplicar los cambios.
Ahora, cuando arranque y selecciono NixOS , toda la interfaz de GRUB se actualiza a reflejar el grub.cfg de NixOS, desde el cual puedo iniciar el sistema operativo. A diferencia de la carga en cadena, esta configuración utiliza una única instalación de GRUB; simplemente usa una segunda configuración.
Comentarios
Respuesta
He descubierto cómo instalar manualmente .efi
en cada uno de mis /
«s. Hacer referencia al cargador de cadena GRUB secundario desde la configuración primaria es simple:
menuentry "GRUB chainloader" { #Load grub on partition 7 of a gpt formatted drive. #It will reference its own modules and config. chainloader (hd0,gpt7)/path/to/bootloader/on/myOS/core.efi }
Para crear este .efi
secundario usé grub-mkimage
porque grub-install
no me dejó escribir en un sistema de archivos que no sea FAT. La sintaxis es muy delicada y no da errores si usa una ruta incorrecta, así que verifique los argumentos con cuidado:
grub-mkimage -o /path/to/mounted/targetOS/efidir/core.efi --format=x86_64-efi "--prefix=(hd0,gpt7)/boot/grub" ext2 part_gpt
Intenté omitir los módulos del sistema de archivos GPT o ext2 pero eso no funcionó, esos dos módulos eran el requisito mínimo absoluto para mi sistema (ext2 funciona para ext2 / 3/4).
El directorio de prefijos es donde el cargador de arranque secundario buscará su carpeta de módulos y archivo de configuración. creó una /boot/grub/
para cada SO que incluye una carpeta x86_64-efi/
(copiada de /usr/lib/grub)
y una grub.cfg
Puedo modificar usando grub-mkconfig
con el sondeo del SO deshabilitado (o simplemente manualmente editarlo).
Originalmente instalé cada SO sin GRUB. Este método me permitió instalar cargadores de arranque GRUB secundarios en todos los sistemas operativos usando un primer SO o LiveCD con GRUB. Puedo cambiar la configuración de arranque de cada sistema operativo de forma independiente, sin riesgos de contaminación porque el ESP nunca se monta.
Comentarios
- ¿Y si quisiera? usar el UUID en lugar de (hd0, gpt7)? ¿Cómo se vería la línea de comando grub-mkimage en ese caso?
Responder
Estoy tratando de hacer una Algo similar para i386-pc grub, y el cargador en cadena del archivo core.img no funcionaría, dando «error: firma inválida»
Pero había aprendido que el archivo grub core.img es compatible con arranque múltiple, así que pude arrancar core.img como:
multiboot (hd0,7)/core.img boot
y obtener con éxito el nuevo grub, sus módulos y la configuración inicial.
Supongo que el comando del cargador de cadena falla en un efi para un grub que no es efi, por lo que este error se puede detectar y recurrir al arranque múltiple en core.img antes del comando de arranque.
.efi
que apunte al suyo grub.cfg. Yo ' mirogrub-mkimage
conmultiboot
ochainloader
pero hasta ahora ' no he podido crear una.efi
ocore.img
.