Kann GRUB2 die EFI-Systempartition für Windows freigeben?

30

Ich habe eine vorhandene Windows 7 GPT-Installation, die bereits über eine EFI-Systempartition verfügt.

Ich versuche jetzt, ein Linux auf einer separaten Festplatte zu installieren, die auch GPT-formatiert ist. Ich habe keine funktionierende Möglichkeit gefunden, um ohne EFI-Systempartition ein Grub-Booting zu erhalten, daher lautet meine Frage:

Kann grub2 dieselbe EFI-Systempartition wie windows verwenden? Wie kann ich grub2 anweisen, es zu verwenden?

Um mein Setup zu klären:

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)

Ich möchte, dass grub2 die vorhandene /dev/sda1EFI-Partition verwendet.

PS: Mein Mainboard ist EFI-fähig.

crater2150
quelle

Antworten:

22

Nach einem langen Recherchetag kann ich nun meine eigene Frage beantworten: Ja, das ist möglich, und Sie können diese Partition sogar als / boot verwenden und Ihre Kernel / initramfs / etc speichern. Dort.

Bedarf:

  • Grub> = 2.00 (1.98 und 1.99 funktionieren nicht)
  • Grub muss von einem Linux-Kernel installiert werden, der EFI-Variablen unterstützt ( CONFIG_EFI_VARSkompiliert in oder als Modul efivars).
  • Zum Erstellen des EFI-Starteintrags benötigen Sie efibootmgr

Installieren:

Mounten Sie zuerst Ihre EFI-Partition in / boot

mount /dev/sdX1 /boot

Wenn Sie sich den Mount-Eintrag ansehen, werden Sie sehen, dass es sich einfach um eine FAT (32) -Partition handelt. Unter /bootsollte sich ein Verzeichnis befinden efi.

Wie Grub aufruft efibootmgr, sollten Sie folgendes laden evivars, wenn es nicht im Kernel kompiliert ist:

modprobe efivars

Jetzt kannst du grub installieren:

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

Grub installiert seine Dateien wie gewohnt nach /boot/grub2. Wenn alles richtig funktioniert hat, solltest du jetzt auch einen Ordner /boot/efi/grub2oder haben /boot/efi/your_distros_name. Mit können --bootloader-id=isert_name_hereSie auch den Namen für den Ordner selbst festlegen.

Grub ruft efibootmgrautomatisch auf und erstellt einen Starteintrag mit diesem Namen im EFI-Startmenü (in meinem Fall bedeutet dies, dass er im EFI-Menü als bootfähiges Gerät angezeigt wird, nicht sicher, ob dies auf jeder EFI-Karte der Fall ist).

Das weitere Setup unterscheidet sich nicht vom üblichen Setup von grub2, es grub2-mkconfigwerden die entsprechenden Module für EFI zu Ihrem hinzugefügt grub.cfg.

Kettenladen von Windows:

Da ich nach einem Dual-Boot mit Windows gefragt habe, werde ich die Grub-Konfiguration für das Chainloading einschließen:

Das Kettenladen einer Windows-Installation unter EFI unterscheidet sich geringfügig von der Installation auf einer MBR-Festplatte. Stattdessen benötigen Sie die Module ntfsoder part_mbrnicht fatund part_gptwerden benötigt.

Das Festlegen von root ist nicht erforderlich. Diese Informationen werden vom Windows-eigenen Boot-Manager gespeichert. Geben Sie stattdessen den searchBefehl an. Die dafür benötigten Parameter können mit festgelegt werden

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

Dadurch erhalten Sie die Parameter für die Suche, die den Speicherort der EFI-Partition angeben. Es sollte ungefähr so ​​aussehen:

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

Anstatt chainloaderdie Anzahl der zu lesenden Sektoren anzugeben, müssen Sie den Pfad zum EFI-Ladeprogramm von Windows in der EFI-Partition festlegen. Dies ist für alle Windows EFI-Installationen gleich. Der resultierende Eintrag sollte folgendermaßen aussehen:

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
}

Quellen: Diese decken einige weitere Fälle ab. Wenn Sie von EFI booten möchten, sollten Sie sie lesen:

crater2150
quelle
Für mich (Fedora24) habe ich die Windows 10 EFI- Partition auf mount /dev/sdXX /boot/efi, dann folgte dies und lief bcdedit /set {bootmgr} path \EFI\fedora\shim.efivon Windows zu EFI-Bootstrap.
Jozxyqk