Terminologie: ESP = můj oddíl FAT32 EFI.
Chci:
- Nechte si na svém ESP nainstalovat samostatný GRUB, který načte další bootloader GRUB na můj distro root souborový systém (
/
). V současné době mám na svých oddílech nainstalovaných několik distribucí bez GRUBu. Každá z nich je nainstalována úplně na jejich vlastní ext4/
. Chci, aby všichni měli svůj vlastní sekundární bootloader. - Také je přijatelné, aby primární ESP GRUB restartoval / znovu načetl pomocí grub.cfg z OS. Efektivně samotné načítání řetězců.
Co jsem vyzkoušel:
- Mezi příklady, které jsem našel, patří zavedení GRUBu z GRUB2 a naopak, ale ne používejte soubory UEFI a .efi. Dokumentace GNU GRUB se o UEFI ani nezmíní a wiki Arch / Ubuntu / Gentoo poskytují základní informace k nastavení základní instalace (bez použití řetězce).
Zatím:
- Nainstaloval jsem GRUB na svůj ESP pomocí
grub-install
agrub-mkconfig
. Testovací boot funguje. To znamená, že moje/boot/grub
složka je prázdná a můj ESP není třeba připojovat během / po bootování. - Já zkusil nainstalovat druhý grub do
/boot/efi/
a/boot/grub/
, ale část EFI nebude nainstalována,grub-install
si stěžuje, že cíl není oddíl EFI. Ale protože už mám nainstalovaný primární GRUB, nemělo by záležet na tom, že můj sekundární GRUB je v kořenovém adresáři ext4, že? Grub umí číst ext4. Vyzkoušel jsem také možnost--force
.
Zdá se tedy, že musím najít způsob, jak přesvědčit instalátora, že je v pořádku nainstalovat grubx64.efi
pod /boot/EFI
…
Pokud je někdo zvědavý, jak jsem nainstaloval primární GRUB, šlo jen o použití správných možností v grub-install
s respekt k mému ESP.
Odpověď
Existuje další způsob: můžete vytvořit položku nabídky, která řekne GRUBu, aby načetl další sekundární grub.cfg, například z jiného distribuce Linuxu.
Například jsem začal s Gentoo Linux, ze kterého jsem nainstaloval GRUB2 do MBR (stroj je pro EFI příliš starý).
Poté jsem nainstaloval NixOS, který jsem nakonfiguroval tak, aby v něm generoval soubor grub.cfg, který je vlastní / boot (odděleně od Gentoo / boot ), ale bez instalace GRUBu.
K objasnění byl grub-install
spuštěn z Gentoo, ale ne od NixOS.
Dále, abych mohl NixOS zavést, přidal jsem to do /etc/grub.d/40_custom v Gentoo:
#!/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 }
Klíčem je řádek configfile /nixos/root/boot/grub/grub.cfg
. Říká GRUBu, aby načetl další grub.cfg. Poté jsem spustil grub-mkconfig
z Gentoo, abych provedl změny.
Nyní, když spustím a vyberu NixOS , se celé rozhraní GRUB obnoví na odrážejí NixOS grub.cfg, ze kterého mohu zavést OS. Na rozdíl od chainloadingu tato konfigurace využívá jednu instalaci GRUBu; jednoduše používá druhou konfiguraci.
Komentáře
Odpověď
Zjistil jsem, jak ručně nainstalovat .efi
na každém z mých /
„s. Odkaz na sekundární GRUB chainloader z primární konfigurace je jednoduchý:
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 }
K vytvoření tohoto sekundárního .efi
jsem použil grub-mkimage
protože grub-install
mi nedovolil psát do souborového systému jiného než FAT. Syntaxe je velmi vybíravá a nedává chyby pokud použijete špatnou cestu, pečlivě zkontrolujte argumenty:
grub-mkimage -o /path/to/mounted/targetOS/efidir/core.efi --format=x86_64-efi "--prefix=(hd0,gpt7)/boot/grub" ext2 part_gpt
Zkusil jsem vynechat moduly souborového systému GPT nebo ext2, ale to nefungovalo, ty dva moduly byly absolutním minimálním požadavkem na můj systém (ext2 funguje pro ext2 / 3/4).
Adresář prefixů je místo, kde sekundární bootloader bude hledat složku svých modulů a konfigurační soubor. vytvořil /boot/grub/
pro každý operační systém, který obsahuje x86_64-efi/
složku (zkopírovanou z /usr/lib/grub)
a grub.cfg
Mohu upravit pomocí grub-mkconfig
se zakázaným OS-Probing (nebo jen ručně) upravit).
Původně jsem nainstaloval každý OS bez GRUBu. Tato metoda mi umožnila nainstalovat sekundární bootloadery GRUB na všechny operační systémy pomocí prvního OS nebo LiveCD s GRUB. Můžu změnit konfiguraci bootování každého OS samostatně, žádné riziko kontaminace, protože ESP není nikdy připojen.
Komentáře
- Co kdybyste chtěli použít UUID místo (hd0, gpt7)? Jak by v takovém případě vypadal příkazový řádek grub-mkimage?
Odpověď
Snažím se udělat podobná věc pro i386-pc grub a chainloader souboru core.img by nefungoval, což by dávalo „error: invalid signature“
Ale já jsem se dozvěděl, že soubor grub core.img je kompatibilní s více bootování takže jsem byl schopen zavést core.img jako:
multiboot (hd0,7)/core.img boot
a úspěšně získat nový grub, jeho moduly a počáteční konfiguraci.
Předpokládám, že váš příkaz chainloader selže na efi pro non-efi grub, takže tento failrue lze detekovat a vrátit se zpět k multibootu na core.img před bootovacím příkazem.
.efi
, která ukazuje na její vlastní grub.cfg. ' m se dívám nagrub-mkimage
pomocímultiboot
nebochainloader
ale zatím jsem ' nebyl schopen vytvořit funkční sekundární.efi
nebocore.img
.