O GRUB2 pode compartilhar a partição do sistema EFI com o Windows?

30

Eu tenho uma instalação existente do Windows 7 GPT, que já possui uma partição do sistema EFI.

Agora estou tentando instalar um Linux em um disco rígido separado, que também é formatado em GPT. Não encontrei nenhuma maneira de obter a inicialização do grub sem a partição do sistema EFI, então minha pergunta é:

É possível que o grub2 use a mesma partição do sistema EFI que o windows? Como eu digo ao grub2 para usá-lo?

Para esclarecer minha configuração:

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)

Eu quero que o grub2 use a /dev/sda1partição EFI existente .

PS: Minha placa principal é compatível com EFI.

crater2150
fonte

Respostas:

22

Após um dia de pesquisa, agora posso responder minha própria pergunta: sim, é possível, e você pode até usar essa partição como / boot e armazenar seus kernels / initramfs / etc. há.

Requisitos:

  • Grub> = 2.00 (1.98 e 1.99 não funcionam)
  • O Grub deve ser instalado a partir de um kernel do Linux, que tenha suporte para variáveis ​​EFI ( CONFIG_EFI_VARScompiladas no ou como módulo efivars)
  • Para criar a entrada de inicialização EFI, você precisará efibootmgr

Configuração:

Primeiro monte sua partição EFI no / boot

mount /dev/sdX1 /boot

Se você olhar para a entrada mount, verá que ela é simplesmente uma partição FAT (32). Sob /bootvocê deve encontrar um diretório efi.

Como o grub chamará efibootmgr, você deve carregar evivars, se não estiver compilado no kernel:

modprobe efivars

Agora você pode instalar o grub:

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

O Grub instala seus arquivos como de costume /boot/grub2. Se tudo funcionou corretamente, agora você também deve ter uma pasta /boot/efi/grub2ou /boot/efi/your_distros_name. Com --bootloader-id=isert_name_herevocê também pode especificar o nome da pasta.

O Grub chama efibootmgrautomaticamente e cria uma entrada de inicialização com esse nome no menu de inicialização EFI (no meu caso, isso significa que ele aparece como um dispositivo inicializável no menu EFI, não tenho certeza se esse é o caso em todas as placas EFI)

Uma configuração adicional não difere da configuração usual do grub2, grub2-mkconfigadicionará os módulos apropriados para o EFI ao seu grub.cfg.

Windows de carregamento em cadeia:

Como eu pedi uma inicialização dupla com o Windows, incluirei a configuração do grub para carregá-la em cadeia:

O carregamento em cadeia de uma instalação do Windows no EFI é um pouco diferente de um em um disco MBR. Você não precisará dos módulos ntfsou part_mbr, em vez disso, fate part_gpté necessário.

Além disso, a configuração de raiz não é necessária, essas informações são armazenadas pelo próprio gerenciador de inicialização do Windows. Em vez disso, especifique o searchcomando. Os parâmetros necessários para isso podem ser determinados por

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

Isso fornecerá os parâmetros para pesquisa, especificando o local da partição EFI, e deve ser algo como:

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

Em vez de informar chainloadero número de setores a serem lidos, será necessário definir o caminho para o carregador EFI do Windows na partição EFI. É o mesmo para todas as instalações do Windows EFI. A entrada resultante deve ficar assim:

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
}

Fontes: abrangem mais alguns casos; se você deseja inicializar a partir da EFI, vale a pena ler:

crater2150
fonte
Para mim (Fedora24), coloquei a partição efi do Windows 10 mount /dev/sdXX /boot/efi, segui -a e corri bcdedit /set {bootmgr} path \EFI\fedora\shim.efido windows para inicializar o EFI.
Jozxyqk