¿GRUB2 puede compartir la partición del sistema EFI con Windows?

30

Tengo una instalación existente de Windows 7 GPT, que ya tiene una partición del sistema EFI.

Ahora estoy tratando de instalar un Linux en un disco duro separado, que también tiene formato GPT. No encontré ninguna forma de trabajar para arrancar grub sin la partición del sistema EFI, por lo que mi pregunta es:

¿Es posible que grub2 use la misma partición del sistema EFI que Windows? ¿Cómo le digo a grub2 que lo use?

Para aclarar mi configuración:

gpt /dev/sda:
    1 EFI System partition created by windows (100MB)
    2 "Microsoft reserved partition" (200MB)
    3 Windows root (rest of disk)

gpt /dev/sdb:
    # After answering my own question: this partition is not needed
    1 boot partition containing grub, kernels etc.(32MB)
    2 crypto LVM partition (rest of disk)

Quiero que grub2 use la /dev/sda1partición EFI existente .

PD: Mi placa base es compatible con EFI.

crater2150
fuente

Respuestas:

22

Después de un día de investigación, ahora puedo responder mi propia pregunta: sí, es posible, e incluso puede usar esa partición como / boot y almacenar sus núcleos / initramfs / etc. allí.

Requisitos:

  • Grub> = 2.00 (1.98 y 1.99 no funcionan)
  • Grub debe instalarse desde un kernel de Linux, que tenga soporte para variables EFI ( CONFIG_EFI_VARScompilado en o como módulo efivars)
  • Para crear la entrada de arranque EFI necesitará efibootmgr

Preparar:

Primero monte su partición EFI en / boot

mount /dev/sdX1 /boot

Si observa la entrada de montaje, verá que es simplemente una partición FAT (32). Debajo de /bootusted debe encontrar un directorio efi.

Como grub llamará efibootmgr, debe cargar evivars, si no está compilado en el núcleo:

modprobe efivars

Ahora puedes instalar grub:

# Replace x86_64 by i386 for 32 bit installations
grub2-install --target=x86_64-efi

Grub instala sus archivos como de costumbre /boot/grub2. Si todo funcionó correctamente, ahora también debería tener una carpeta /boot/efi/grub2o /boot/efi/your_distros_name. Con --bootloader-id=isert_name_hereusted también puede especificar el nombre de la carpeta usted mismo.

Grub llama efibootmgrautomáticamente y crea una entrada de arranque con ese nombre en el menú de arranque de EFI (en mi caso, eso significa que aparece como un dispositivo de arranque en el menú de EFI, no estoy seguro de si este es el caso en cada placa EFI)

La configuración adicional no difiere de la configuración habitual de grub2, grub2-mkconfigagregará los módulos apropiados para EFI a su grub.cfg.

Ventanas de carga en cadena:

Como solicité un arranque dual con Windows, incluiré la configuración de grub para cargarlo en cadena:

La carga en cadena de una instalación de Windows en EFI es ligeramente diferente de la de un disco MBR. No necesitará los módulos ntfso part_mbr, en cambio, faty part_gptson necesarios.

Además, no es necesario configurar la raíz, esta información es almacenada por el propio administrador de arranque de Windows. En su lugar, especifique el searchcomando. Los parámetros necesarios para ello pueden determinarse por

grub-probe --target=hints_string /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi

Esto le dará los parámetros de búsqueda que especifican la ubicación de la partición EFI, debería ser algo así como:

--hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1 1ce5-7f28

En lugar de indicar chainloaderla cantidad de sectores a leer, deberá establecer la ruta al cargador EFI de Windows en la partición EFI. Esto es lo mismo para todas las instalaciones de Windows EFI. La entrada resultante debería tener este aspecto:

menuentry "Microsoft Windows x86_64 UEFI-GPT" {
    insmod part_gpt
    insmod fat
    insmod search_fs_uuid
    insmod chain
    search --fs-uuid --no-floppy --set=root <insert ouput from grub-probe here>
    chainloader /efi/Microsoft/Boot/bootmgfw.efi
}

Fuentes: Estos cubren algunos casos más, si desea iniciar desde EFI, vale la pena leerlos:

crater2150
fuente
Para mí (Fedora24) puse la partición efi de windows 10 mount /dev/sdXX /boot/efi, luego seguí esto y corrí bcdedit /set {bootmgr} path \EFI\fedora\shim.efide windows a bootstrap EFI.
jozxyqk