Terminologie: ESP = meine FAT32-EFI-Partition.
Ich möchte:
- Lassen Sie auf meinem ESP eine eigenständige GRUB-Installation installieren, die einen anderen GRUB-Bootloader auf meinem Distribution-Root-Dateisystem (
/
) kettenlade. Ich habe derzeit mehrere Distributionen ohne GRUB auf meinen Partitionen installiert. Jeder ist vollständig auf seinem eigenen ext4/
installiert. Ich möchte, dass sie alle einen eigenen sekundären Bootloader haben. - Es ist auch akzeptabel, dass der primäre ESP GRUB mit einer grub.cfg vom Betriebssystem neu gestartet / neu geladen wird. Effektiv Kettenladen selbst.
Was ich versucht habe:
- Beispiele, die ich gefunden habe, sind das Booten von GRUB Legacy von GRUB2 und umgekehrt, aber sie tun es nicht Verwenden Sie UEFI- und .efi-Dateien. In der GNU GRUB-Dokumentation wird UEFI nicht einmal erwähnt, und die Arch / Ubuntu / Gentoo-Wikis bieten nur minimale Informationen zum Einrichten einer Basisinstallation (ohne Kettenladen).
Bisher:
- Ich habe GRUB mit
grub-install
undgrub-mkconfig
.Test Boot funktioniert. Dies bedeutet, dass mein Ordner/boot/grub
leer ist und mein ESP während / nach dem Boot nicht gemountet werden muss. - Ich habe Es wurde versucht, einen zweiten Grub in
/boot/efi/
und/boot/grub/
zu installieren, aber der EFI-Teil wird nicht installiert,grub-install
beschwert sich, dass das Ziel keine EFI-Partition ist. Da ich jedoch bereits einen primären GRUB installiert habe, sollte es keine Rolle spielen, dass sich mein sekundärer GRUB auf den ext4-Rootfs befindet, oder? Grub kann ext4 lesen. Ich habe auch die Option--force
ausprobiert.
Es scheint also, dass ich eine Möglichkeit finden muss, das Installationsprogramm davon zu überzeugen, dass es in Ordnung ist, grubx64.efi
unter /boot/EFI
…
Wenn jemand neugierig ist, wie ich den primären GRUB installiert habe, war es nur eine Frage der Verwendung der richtigen Optionen in grub-install
mit In Bezug auf mein ESP.
Antwort
Es gibt noch eine andere Möglichkeit: Sie können einen Menüeintrag erstellen, der GRUB anweist, einen anderen zu laden sekundäre grub.cfg, z. B. eine aus einer anderen Linux-Distribution.
Ich habe beispielsweise mit Gentoo Linux begonnen, von dem aus ich GRUB2 im MBR installiert habe (der Computer ist zu alt für EFI).
Ich habe dann NixOS installiert, das ich so konfiguriert habe, dass es grub.cfg in seinem eigenen / boot (getrennt von Gentoos / boot ) generiert, aber ohne Installation von GRUB.
Zur Verdeutlichung wurde grub-install
von Gentoo aber ausgeführt nicht von NixOS.
Um NixOS booten zu können, habe ich dies zu /etc/grub.d/40_custom in Gentoo hinzugefügt:
#!/bin/sh exec tail -n +3 $0 # This file provides an easy way to add custom menu entries. Simply type the # menu entries you want to add after this comment. Be careful not to change # the "exec tail" line above. menuentry "NixOS" --class gnu-linux --class gnu --class os $menuentry_id_option "nixos-0aca58bc-8fdb-4a07-aa2f-56406bcf19b7" { set root="hd0,msdos4" configfile /nixos/root/boot/grub/grub.cfg }
Der Schlüssel ist die Zeile configfile /nixos/root/boot/grub/grub.cfg
. Es weist GRUB an, eine weitere grub.cfg zu laden. Ich habe dann grub-mkconfig
von Gentoo ausgeführt, um die Änderungen zu übernehmen.
Wenn ich jetzt boote und NixOS auswähle, wird die gesamte GRUB-Schnittstelle aktualisiert spiegeln die NixOS grub.cfg wider, von der ich das Betriebssystem booten kann. Im Gegensatz zum Kettenladen wird bei dieser Konfiguration eine einzelne Installation von GRUB verwendet. Es wird einfach eine zweite Konfiguration verwendet.
Kommentare
- Ich verstehe, darauf habe ich in Punkt 3 Bezug genommen: “ Chainloading selbst „. Ich habe diese Methode während der Suche gefunden, habe mich aber zurückgehalten, als ich ‚ es vorgezogen habe, eine andere
.efi
zu laden, die auf ihre eigene zeigt grub.cfg. Ich ‚ betrachtegrub-mkimage
mitmultiboot
oderchainloader
aber bisher konnte ich ‚ keine funktionierende sekundäre.efi
odercore.img
.
Antwort
Ich habe herausgefunden, wie man die .efi
auf jedem meiner /
„s. Das Verweisen auf den sekundären GRUB-Kettenlader aus der primären Konfiguration ist einfach:
menuentry "GRUB chainloader" { #Load grub on partition 7 of a gpt formatted drive. #It will reference its own modules and config. chainloader (hd0,gpt7)/path/to/bootloader/on/myOS/core.efi }
Zum Erstellen dieses sekundären .efi
habe ich verwendet grub-mkimage
, weil grub-install
mich nicht in ein Nicht-FAT-Dateisystem schreiben ließ. Die Syntax ist sehr wählerisch und gibt keine Fehler Wenn Sie einen falschen Pfad verwenden, überprüfen Sie die Argumente sorgfältig:
grub-mkimage -o /path/to/mounted/targetOS/efidir/core.efi --format=x86_64-efi "--prefix=(hd0,gpt7)/boot/grub" ext2 part_gpt
Ich habe versucht, die GPT- oder ext2-Dateisystemmodule wegzulassen, aber das hat nicht funktioniert Zwei Module waren die absolute Mindestanforderung für mein System (ext2 funktioniert für ext2 / 3/4).
Im Präfixverzeichnis sucht der sekundäre Bootloader nach seinem Modulordner und seiner Konfigurationsdatei hat für jedes Betriebssystem einen /boot/grub/
erstellt, der einen x86_64-efi/
-Ordner enthält (kopiert aus /usr/lib/grub)
und a grub.cfg
Ich kann mit grub-mkconfig
bei deaktivierter Betriebssystemprüfung (oder nur manuell) Änderungen vornehmen bearbeite es).
Ich habe ursprünglich jedes Betriebssystem ohne GRUB installiert. Mit dieser Methode konnte ich sekundäre GRUB-Bootloader auf allen Betriebssystemen unter Verwendung eines ersten Betriebssystems oder einer LiveCD mit GRUB installieren. Ich kann die Startkonfiguration jedes Betriebssystems unabhängig ändern, ohne dass das Risiko einer Kontamination besteht, da das ESP niemals bereitgestellt wird.
Kommentare
- Was wäre, wenn Sie möchten? Verwenden Sie die UUID anstelle von (hd0, gpt7)? Wie würde die Befehlszeile von grub-mkimage in diesem Fall aussehen?
Antwort
Ich versuche a Ähnliches gilt für i386-pc grub, und der Kettenlader der Datei core.img würde nicht funktionieren, was „Fehler: ungültige Signatur“ ergibt.
Aber ich hatte erfahren, dass die Datei grub core.img Multiboot-kompatibel ist. So konnte ich core.img wie folgt starten:
multiboot (hd0,7)/core.img boot
und den neuen Grub, die Module und die Erstkonfiguration erfolgreich abrufen.
Ich nehme an, Ihr Chainloader-Befehl schlägt auf einem EFI für einen Nicht-EFI-Grub fehl, sodass dieser Failrue erkannt werden kann und vor dem Startbefehl auf core.img auf multiboot zurückgegriffen werden kann.