Czy GRUB2 może współdzielić partycję systemową EFI z Windows?

30

Mam istniejącą instalację systemu Windows 7 GPT, która ma już partycję systemową EFI.

Próbuję teraz zainstalować system Linux na osobnym dysku twardym, który jest również sformatowany w trybie GPT. Nie znalazłem żadnego działającego sposobu na uruchomienie gruba bez partycji systemowej EFI, więc moje pytanie brzmi:

Czy grub2 może używać tej samej partycji systemowej EFI co Windows? Jak mam powiedzieć Grub2, aby go używał?

Aby wyjaśnić moją konfigurację:

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)

Chcę, aby grub2 używał istniejącej /dev/sda1partycji EFI.

PS: Moja płyta główna obsługuje EFI.

krater2150
źródło

Odpowiedzi:

22

Po całym dniu badań mogę teraz odpowiedzieć na własne pytanie: tak, jest to możliwe, możesz nawet użyć tej partycji jako / boot i przechowywać swoje jądra / initramfs / etc. tam.

Wymagania:

  • Grub> = 2,00 (1,98 i 1,99 nie działają)
  • Grub musi być zainstalowany z jądra Linux, które obsługuje zmienne EFI ( CONFIG_EFI_VARSskompilowane w lub jako moduł efivars)
  • Do utworzenia wpisu rozruchowego EFI będziesz potrzebować efibootmgr

Ustawiać:

Najpierw zamontuj partycję EFI w / boot

mount /dev/sdX1 /boot

Jeśli spojrzysz na wpis montowania, zobaczysz, że jest to po prostu partycja FAT (32). Poniżej /bootpowinieneś znaleźć katalog efi.

Jak wywoła grub efibootmgr, powinieneś go załadować evivars, jeśli nie jest wkompilowany w jądro:

modprobe efivars

Teraz możesz zainstalować grub:

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

Grub instaluje swoje pliki jak zwykle /boot/grub2. Jeśli wszystko działało poprawnie, powinieneś teraz mieć także folder /boot/efi/grub2lub /boot/efi/your_distros_name. Za pomocą --bootloader-id=isert_name_heremożesz także samodzielnie określić nazwę folderu.

Grub wywołuje efibootmgrautomatycznie i tworzy pozycję rozruchową o tej nazwie w menu rozruchowym EFI (w moim przypadku oznacza to, że pojawia się jako urządzenie rozruchowe w menu EFI, nie jestem pewien, czy tak jest na każdej płycie EFI)

Dalsza konfiguracja nie różni się od zwykłej konfiguracji grub2, grub2-mkconfigdoda odpowiednie moduły dla EFI do twojego grub.cfg.

Windows ładowanie łańcucha:

Gdy poprosiłem o podwójny rozruch w systemie Windows, dołączę konfigurację grub do ładowania łańcucha:

Ładowanie łańcuchowe instalacji systemu Windows na EFI różni się nieznacznie od instalacji na dysku MBR. Zamiast tego nie będziesz potrzebować modułów ntfslub i są one potrzebne.part_mbrfatpart_gpt

Ponadto ustawienie roota nie jest wymagane, ta informacja jest przechowywana przez własnego menedżera rozruchu systemu Windows. Zamiast tego podaj searchpolecenie. Potrzebne do tego parametry można określić za pomocą

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

To da ci parametry wyszukiwania określające lokalizację partycji EFI, powinna ona wyglądać mniej więcej tak:

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

Zamiast podawać chainloaderliczbę sektorów do odczytania, musisz ustawić ścieżkę do modułu ładującego EFI systemu Windows na partycji EFI. To samo dotyczy wszystkich instalacji Windows EFI. Wynikowy wpis powinien wyglądać następująco:

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
}

Źródła: Obejmują one więcej przypadków, jeśli chcesz uruchomić z EFI, warto je przeczytać:

krater2150
źródło
Dla mnie (Fedora24) umieściłem partycję efi systemu Windows 10 na mount /dev/sdXX /boot/efi, następnie podążyłem za tym i pobiegłem bcdedit /set {bootmgr} path \EFI\fedora\shim.efiz systemu Windows do bootstrap EFI.
jozxyqk