Wie findet der grub efi loader das richtige grub.cfg und Boot-Verzeichnis?

9

So wie ich es verstehe, lädt das uefi-BIOS grub.efi von der efi-Partition. Dadurch werden jetzt eine Reihe von Grub-Modulen und die Konfigurationsdatei aus dem Verzeichnis / boot geladen.

Aber wie findet grub das richtige Gerät, auf dem sich die Boot-Partition befindet? In Grub Legacy installieren Sie Grub normalerweise mithilfe von auf einer bestimmten Partition

# grub-install --root-directory=/dev/sda

Es ist also ziemlich klar, wo nach dem Boot-Verzeichnis gesucht wird. Wie findet grub-efi das richtige Gerät heraus?

user128063
quelle
Soweit ich weiß, befindet sich die Konfiguration für den Speicherort des Kernels in der efi-Partition.
Joe
Natürlich müssen sich die Informationen in der efi-Partition befinden, aber Sie geben sie zu keinem Zeitpunkt (wie früher) bei der Installation von grub an.
user128063
in der .efi-Datei, die generiert wird, wenn Sie grub-efi ausführen
Joe

Antworten:

9

Nachdem ich mit ghex meine Datei "BOOTX64.EFI" in der efi-Partition untersucht hatte, fand ich diese Zeile.

search.fs_uuid a43d1f11-6ebe-477d-8be3-321a33bc37f9 root hd2,gpt4 
set prefix=($root)'/boot/grub'

Dies zeigt, dass die Informationen für den Speicherort von grub (die Boot-Partition) von grub2-install in die für das System generierte BOOTX64.EFI-Datei eingebettet wurden.

Grub2 wird dann vom EFI-Loader ausgeführt und Sie erhalten die Grub-Schnittstelle, um das Betriebssystem (Kernel) auszuwählen, in das gebootet werden soll, oder der Standardkernel wird geladen.

Nur um ein bisschen zu erweitern: ".EFI" -Dateien ähneln Anwendungen, die das UEFI-Subsystem ausführen kann. Es soll sowohl zum Booten des Systems als auch zum Ausführen von Ausführungsschutz- und Antivirenprogrammen verwendet werden.

Sie setzen die erweiterbare in "Unified Extensible Firmware Interface"

Joe
quelle
Es wäre interessant zu sehen, ob Sie diese Datei patchen und Ihre Konfiguration und UUIDs ändern und trotzdem booten könnten, ohne Grub
Joe
Seltsam, ich kann es nicht finden. Mein Ubuntu-EFI-Verzeichnis enthält eine grub.cfg (in ASCII) mit dem Präfix und den Stamminformationen in der ID. Aber mein archlinux efi-Verzeichnis hat einfach eine grubx64.efi, die keine Anzeichen für die Root- und Präfix-Befehle hat, die Sie erwähnt haben, selbst wenn ich sie in ghex gelesen habe.
user128063
Nicht in ubuntu.efi nach boot.efi suchen. Die EFI-Partition hat einen Ordner. Efi genannt und darin ein Ordner namens boot.
Joe
Der efi-Ordner enthält mehrere efi-Binärdateien, eine für Windows, eine für Ubuntu usw. Der Name der EFI-Datei ist irrelevant. Der Grund, warum ich die uuid-Zeile nicht finden konnte, ist, dass meine Root-Partition eine lvm-Partition ist. Es speichert stattdessen ein lvmid!
user128063
1
Oh, tut mir leid, dass ich Ihren vorherigen Beitrag falsch verstanden habe. Stackexchange hat Ihren vorherigen Beitrag an der Stelle abgeschnitten, an der Sie Ihr System beschrieben haben. Ihre Beschreibung bezieht sich auf ein einzelnes Bootloader-Image (BOOTX64.EFI), das, soweit ich das beurteilen kann, zwei Betriebssysteme bootet. Hier sind einige weitere Möglichkeiten: 1) Steamos könnte auch einen eigenen Bootloader haben, für den es eine eigene EFI-Datei in der EFI-Partition hätte. 2) Sie haben ein hybrides EFI-Legacy-Boot-System, in dem Ihr Steamos-Bootloader im MBR gespeichert ist. Sie können sehen, dass der efi-Bootorder sudo efibootmgr -vauf Gentoo verwendet werden soll, aber ich bin sicher, dass Sie dies wissen
user128063