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
igrub-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
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.
.efi
, który wskazuje na własne grub.cfg. ' Patrzę nagrub-mkimage
zmultiboot
lubchainloader
ale jak dotąd nie ' nie udało mi się utworzyć działającego pomocniczego.efi
lubcore.img
.