Terminologia: ESP = moja partycja EFI FAT32.

Chcę:

  • Mam samodzielną instalację GRUB-a na moim ESP, która ładuje łańcuchowo inny program ładujący GRUB w moim głównym systemie plików dystrybucji (/). Obecnie na moich partycjach mam kilka dystrybucji bez GRUB-a. Każdy jest instalowany całkowicie na swoim własnym ext4 /. Chcę, aby wszyscy mieli własny dodatkowy program ładujący.
  • Dopuszczalne jest również ponowne uruchomienie / przeładowanie GRUB podstawowego ESP z poziomu systemu operacyjnego grub.cfg. Skuteczne ładowanie łańcuchowe.

Czego próbowałem:

  • Przykłady, które znalazłem, obejmują ładowanie starszej wersji GRUB-a z GRUB2 i odwrotnie, ale nie używaj plików UEFI i .efi. Dokumentacja GNU GRUB nawet nie wspomina o UEFI, a witryny wiki Arch / Ubuntu / Gentoo zawierają minimalne informacje potrzebne do skonfigurowania podstawowej (bez ładowania łańcuchowego) instalacji.

Jak dotąd:

  • Zainstalowałem GRUB na moim ESP używając grub-install i grub-mkconfig. Test rozruchowy działa. Oznacza to, że mój folder /boot/grub jest pusty, a mój ESP nie musi być montowany podczas / po uruchomieniu.
  • I „ve próbował zainstalować drugi grub w /boot/efi/ i /boot/grub/, ale część EFI nie została zainstalowana, grub-install narzeka, że cel nie jest partycją EFI. Ale ponieważ mam już zainstalowany podstawowy GRUB, nie powinno mieć znaczenia, że mój dodatkowy GRUB jest w rootfach ext4, prawda? Grub może czytać ext4. Wypróbowałem też opcję --force.

Wygląda na to, że muszę znaleźć sposób, aby przekonać instalatora, że można zainstalować grubx64.efi pod /boot/EFI

Jeśli ktoś jest ciekawy, jak zainstalowałem podstawowy GRUB, chodziło tylko o użycie odpowiednich opcji w grub-install z szacunku dla mojego ESP.

Odpowiedź

Jest inny sposób: możesz utworzyć pozycję menu, która powie GRUBowi załadowanie kolejnego drugorzędny grub.cfg, taki jak jeden z innej dystrybucji Linuksa.

Na przykład zacząłem od Gentoo Linux, z którego zainstalowałem GRUB2 w MBR (maszyna jest za stara dla EFI).

Następnie zainstalowałem NixOS, który skonfigurowałem do generowania grub.cfg w jego własnym / boot (oddzielnym od / boot w Gentoo) ale bez instalowania GRUB-a.

Aby wyjaśnić, grub-install zostało wykonane z Gentoo, ale nie z NixOS.

Następnie, aby móc załadować NixOS, dodałem to do /etc/grub.d/40_custom w 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 } 

Kluczem jest wiersz configfile /nixos/root/boot/grub/grub.cfg. Mówi GRUBowi, aby załadował inny plik grub.cfg. Następnie uruchomiłem grub-mkconfig z Gentoo, aby zastosować zmiany.

Teraz, kiedy uruchamiam i wybieram NixOS , cały interfejs GRUB jest odświeżany do odzwierciedlają NixOS grub.cfg, z którego mogę uruchomić system operacyjny. W przeciwieństwie do ładowania łańcuchowego, ta konfiguracja wykorzystuje pojedynczą instalację GRUB-a; po prostu używa drugiej konfiguracji.

Komentarze

  • Rozumiem, o tym mówiłem w punkcie 3: " Samo ładowanie łańcuchowe ". Znalazłem tę metodę podczas wyszukiwania, ale wstrzymałem się z odpowiadaniem sobie, ponieważ ' d wolę łańcuchowo załadować inny .efi, który wskazuje na własne grub.cfg. ' Patrzę na grub-mkimage z multiboot lub chainloader ale jak dotąd nie ' nie udało mi się utworzyć działającego pomocniczego .efi lub core.img.

Odpowiedź

Dowiedziałem się, jak ręcznie zainstalować .efi na każdym z moich / „s. Odwołanie się do dodatkowego modułu ładującego łańcuch GRUB z podstawowej konfiguracji jest proste:

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 } 

Aby utworzyć ten dodatkowy .efi, użyłem grub-mkimage ponieważ grub-install nie pozwalał mi pisać w systemie plików innym niż FAT. Składnia jest bardzo wybredna i nie powoduje błędów jeśli używasz złej ścieżki, więc uważnie sprawdź argumenty:

grub-mkimage -o /path/to/mounted/targetOS/efidir/core.efi --format=x86_64-efi "--prefix=(hd0,gpt7)/boot/grub" ext2 part_gpt 

Próbowałem pominąć moduły systemu plików GPT lub ext2, ale to nie działało, te dwa moduły były absolutnym minimalnym wymaganiem dla mojego systemu (ext2 działa dla ext2 / 3/4).

Katalog prefiksów to miejsce, w którym dodatkowy program ładujący będzie szukał folderu modułów i pliku konfiguracyjnego. Więc ręcznie utworzył /boot/grub/ dla każdego systemu operacyjnego, który zawiera folder x86_64-efi/ (skopiowany z /usr/lib/grub) i grub.cfg Mogę modyfikować za pomocą grub-mkconfig z wyłączonym sondowaniem systemu operacyjnego (lub po prostu ręcznie Edytuj to).

Pierwotnie instalowałem każdy system operacyjny bez GRUB-a. Ta metoda pozwoliła mi zainstalować dodatkowe programy ładujące GRUB na wszystkich systemach operacyjnych przy użyciu pierwszego systemu operacyjnego lub LiveCD z GRUBem. Mogę niezależnie zmienić konfigurację rozruchową każdego systemu operacyjnego, bez ryzyka zanieczyszczenia, ponieważ ESP nigdy nie jest zamontowany.

Komentarze

  • A co by było, gdybyś chciał użyć UUID zamiast (hd0, gpt7)? Jak wyglądałby wiersz poleceń grub-mkimage w takim przypadku?

Odpowiedź

Próbuję wykonać podobna rzecz dla i386-pc grub, a chainloader pliku core.img nie działałby, dając „błąd: niepoprawny podpis”

Ale dowiedziałem się, że plik core.img grub jest zgodny z multibootem, więc mogłem załadować core.img na przykład:

multiboot (hd0,7)/core.img boot 

i pomyślnie pobrać nowy grub, jego moduły i początkową konfigurację.

Przypuszczam, że twoje polecenie chainloader nie działa na efi dla nieefi grub, więc ten błąd można wykryć i wrócić do multiboot na core.img przed poleceniem rozruchu.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *