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 a grub-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

  • Chápu, o tom jsem mluvil v bodě 3: " Samotné načítání řetězců ". Tuto metodu jsem našel při hledání, ale zdržel jsem se odpovědi, protože jsem ' d raději řetězil další .efi, která ukazuje na její vlastní grub.cfg. ' m se dívám na grub-mkimage pomocí multiboot nebo chainloader ale zatím jsem ' nebyl schopen vytvořit funkční sekundární .efi nebo core.img.

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.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *