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 y grub-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

  • Entiendo, esto es a lo que me refería en el punto 3: " Carga en cadena ". Encontré este método mientras buscaba, pero estaba esperando contestarme porque ' prefiero cargar en cadena otro .efi que apunte al suyo grub.cfg. Yo ' miro grub-mkimage con multiboot o chainloader pero hasta ahora ' no he podido crear una .efi o core.img.

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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *