Terminologie: ESP = partiția mea FAT32 EFI.
Vreau să:
- Aveți o instalare GRUB autonomă pe ESP-ul meu care încarcă un alt încărcător GRUB pe sistemul meu de fișiere distro root (
/
). În prezent, am câteva distribuții fără GRUB instalate pe partițiile mele. Fiecare este instalat complet pe propriul ext4/
. Vreau ca toți să aibă propriul lor bootloader secundar. - De asemenea, este acceptabil ca ESP GRUB primar să repornească / reîncărce cu un grub.cfg din sistemul de operare. Încărcarea eficientă în sine.
Ce am încercat:
- Exemplele pe care le-am găsit includ bootarea moștenirii GRUB de la GRUB2 și invers, dar nu sunt utilizați fișiere UEFI și .efi. Documentația GNU GRUB nici măcar nu menționează UEFI, iar wiki-urile Arch / Ubuntu / Gentoo oferă informații minime pentru a configura o instalare de bază (fără încărcare în lanț).
Până acum:
- Am „instalat GRUB pe ESP folosind
grub-install
șigrub-mkconfig
.Test boot-ul funcționează. Aceasta înseamnă că folderul/boot/grub
este gol și ESP nu trebuie montat în timpul / după boot. - Am a încercat instalarea unui al doilea grub în
/boot/efi/
și/boot/grub/
, dar partea EFI nu a câștigat „instalarea,grub-install
se plânge că ținta nu este o partiție EFI. Dar, deoarece am deja instalat un GRUB primar, nu ar trebui să conteze faptul că GRUB-ul meu secundar este pe rootfs ext4 nu? Grub poate citi ext4. Am încercat și opțiunea--force
.
Deci, se pare că trebuie să găsesc o modalitate de a-l convinge pe programul de instalare că este OK să instalezi grubx64.efi
sub /boot/EFI
…
Dacă cineva este curios despre modul în care am instalat GRUB-ul principal, a fost doar o chestiune de a folosi opțiunile corecte în grub-install
față de ESP-ul meu.
Răspuns
Există un alt mod: puteți crea o intrare de meniu care să îi spună GRUB să încarce altul grub.cfg secundar, cum ar fi unul de la o altă distribuție Linux.
De exemplu, am început cu Gentoo Linux de la care am instalat GRUB2 în MBR (mașina este prea veche pentru EFI).
Am instalat apoi NixOS, pe care l-am configurat pentru a genera grub.cfg în propriul / boot (separat de / boot al lui Gentoo), dar fără instalarea GRUB.
Pentru a clarifica, grub-install
a fost executat de la Gentoo, dar nu de la NixOS.
Apoi, pentru a putea porni NixOS, am adăugat acest lucru la /etc/grub.d/40_custom în 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 }
Cheia este linia configfile /nixos/root/boot/grub/grub.cfg
. Îi spune GRUB să încarce un alt grub.cfg. Am executat apoi grub-mkconfig
de la Gentoo pentru a aplica modificările.
Acum, când pornesc și selectez NixOS , întreaga interfață GRUB se reîmprospătează la reflectă NixOS grub.cfg, de unde pot porni sistemul de operare. Spre deosebire de încărcarea în lanț, această configurație utilizează o singură instalare a GRUB; pur și simplu folosește o a doua configurație.
Comentarii
Răspuns
Am aflat cum să instalez manual .efi
pe fiecare dintre /
„s. Referirea la încărcătorul de lanț GRUB secundar din config primar este simplă:
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 }
Pentru a crea acest .efi
secundar am folosit grub-mkimage
deoarece grub-install
nu m-a lăsat să scriu într-un sistem de fișiere care nu este FAT. Sintaxa este foarte pretențioasă și nu dă erori dacă folosești o cale greșită, deci verifică cu atenție argumentele:
grub-mkimage -o /path/to/mounted/targetOS/efidir/core.efi --format=x86_64-efi "--prefix=(hd0,gpt7)/boot/grub" ext2 part_gpt
Am încercat să omit modulele de sistem de fișiere GPT sau ext2, dar acestea nu au funcționat, două module au fost cerința minimă absolută pentru sistemul meu (ext2 funcționează pentru ext2 / 3/4).
Directorul prefix este locul unde bootloader-ul secundar își va căuta folderul de module și fișierul de configurare. Deci, am manual a creat un /boot/grub/
pentru fiecare sistem de operare care include un folder x86_64-efi/
(copiat din /usr/lib/grub)
și un grub.cfg
Pot modifica folosind grub-mkconfig
cu verificarea sistemului de operare dezactivată (sau doar manual) editați-l).
Am instalat inițial fiecare sistem de operare fără GRUB. Această metodă mi-a permis să instalez bootloadere secundare GRUB pe toate sistemele de operare folosind un prim OS sau LiveCD cu GRUB. Pot modifica configurația de încărcare a fiecărui sistem de operare independent, fără riscuri de contaminare, deoarece ESP nu este montat niciodată.
Comentarii
- Ce se întâmplă dacă doriți să folosiți UUID în loc de (hd0, gpt7)? Cum ar arăta linia de comandă grub-mkimage în acest caz?
Răspuns
Încerc să fac o lucru similar pentru i386-pc grub și chainloader-ul fișierului core.img nu ar funcționa, dând „eroare: semnătură nevalidă”
Dar am aflat că fișierul grub core.img este compatibil cu mai multe porniri, așa că am reușit să pornesc core.img ca:
multiboot (hd0,7)/core.img boot
și să obțin cu succes noul grub, modulele și configurația inițială.
Presupun că comanda dvs. de chainloader eșuează pe un efi pentru un grup non-efi, deci acest failrue poate fi detectat și poate reveni la multiboot pe core.img înainte de comanda de boot.
.efi
care indică propria sa grub.cfg. ' mă uit lagrub-mkimage
cumultiboot
sauchainloader
dar până acum ' nu am reușit să creez un secundar de lucru.efi
saucore.img
.