Terminologi: ESP = min FAT32 EFI-partition.
Jag vill:
- Ha en fristående GRUB-installation på min ESP som laddar en annan GRUB-bootloader på mitt distro-root-filsystem (
/
). Jag har för närvarande flera distros utan GRUB installerade på mina partitioner. Var och en är installerad helt på sin egen ext4/
. Jag vill att alla ska ha sin egen sekundära startladdare. - Det är också acceptabelt att den primära ESP GRUB startar om / laddar om med en grub.cfg från operativsystemet. Effektivt kedjelastning av sig själv.
Det jag har försökt:
- Exempel jag hittat inkluderar att starta GRUB-arv från GRUB2 och vice versa men de har inte använd UEFI- och .efi-filer. GNU GRUB-dokumentationen nämner inte ens UEFI, och Arch / Ubuntu / Gentoo-wikierna ger bara minimal information för att skapa en grundläggande installation (utan kedjeladdning).
Hittills:
- Jag har installerat GRUB på min ESP med
grub-install
ochgrub-mkconfig
.Test-start fungerar. Det betyder att min/boot/grub
-mapp är tom och att min ESP inte behöver monteras under / efter start. - Jag har försökte installera en andra grub i
/boot/efi/
och/boot/grub/
, men EFI-delen vann inte installationen,grub-install
klagar målet är inte en EFI-partition. Men eftersom jag redan har en primär GRUB installerad, borde det inte spela någon roll att min sekundära GRUB är på ext4 rootfs rätt? Grub kan läsa ext4. Jag försökte alternativet--force
.
Så det verkar som om jag måste hitta något sätt att övertyga installationsprogrammet om att det är OK att installera grubx64.efi
under /boot/EFI
…
Om någon är nyfiken på hur jag installerade den primära GRUB, var det bara att använda rätt alternativ i grub-install
med med avseende på min ESP.
Svar
Det finns ett annat sätt: du kan skapa en menypost som säger till GRUB att ladda en annan sekundär grub.cfg, som en från en annan Linux-distro.
Till exempel började jag med Gentoo Linux från vilken jag installerade GRUB2 i MBR (maskinen är för gammal för EFI).
Jag installerade sedan NixOS, som jag konfigurerade för att generera grub.cfg i sin egen / boot (separat från Gentoo ”s / boot ) men utan att installerar GRUB.
För att klargöra, grub-install
kördes från Gentoo men inte från NixOS.
För att kunna starta NixOS, lade jag till detta till /etc/grub.d/40_custom i 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 }
Nyckeln är configfile /nixos/root/boot/grub/grub.cfg
-raden. Det säger till GRUB att ladda en annan grub.cfg. Jag sprang sedan grub-mkconfig
från Gentoo för att tillämpa ändringarna.
Nu när jag startar upp och väljer NixOS uppdateras hela GRUB-gränssnittet till speglar NixOS grub.cfg, från vilken jag kan starta operativsystemet. Till skillnad från kedjelastning använder denna konfiguration en enda installation av GRUB; den använder helt enkelt en andra konfiguration.
Kommentarer
Svar
Jag har fått reda på hur man manuellt installerar .efi
på var och en av mina /
”s. Det är enkelt att hänvisa till den sekundära GRUB-kedjelastaren från den primära konfigurationen:
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 }
För att skapa denna sekundära .efi
använde jag grub-mkimage
eftersom grub-install
lät mig inte skriva till ett icke-FAT-filsystem. Syntaxen är väldigt kräsen och det ger inte fel om du använder fel sökväg, så kontrollera argumenten noga:
grub-mkimage -o /path/to/mounted/targetOS/efidir/core.efi --format=x86_64-efi "--prefix=(hd0,gpt7)/boot/grub" ext2 part_gpt
Jag försökte utelämna modulerna GPT eller ext2 filsystem men det fungerade inte, de två moduler var det absoluta minimikravet för mitt system (ext2 fungerar för ext2 / 3/4).
Prefixkatalogen är där den sekundära startladdaren letar efter sin modulmapp och konfigurationsfil. Så jag har manuellt skapade en /boot/grub/
för varje operativsystem som innehåller en x86_64-efi/
-mapp (kopierad från /usr/lib/grub)
och en grub.cfg
Jag kan ändra med grub-mkconfig
med OS-sondering avaktiverad (eller bara manuellt redigera den).
Jag installerade ursprungligen varje operativsystem utan GRUB. Denna metod gjorde det möjligt för mig att installera sekundära GRUB-startladdare på alla operativsystem med ett första operativsystem eller LiveCD med GRUB. Jag kan ändra startkonfigurationen för varje operativsystem oberoende, inga risker för kontaminering eftersom ESP aldrig är monterad.
Kommentarer
- Vad händer om du vill använda UUID istället för (hd0, gpt7)? Hur skulle kommandoraden grub-mkimage se ut i så fall?
Svar
Jag försöker göra en liknande sak för i386-pc-grub, och kedjelastare av core.img-filen fungerar inte, vilket ger ”error: ogiltig signatur”
Men jag hade lärt mig att filen grub core.img är multiboot-kompatibel, så jag kunde starta core.img som:
multiboot (hd0,7)/core.img boot
och framgångsrikt få den nya grubben, den är moduler och initial konfiguration.
Jag antar att ditt chainloader-kommando misslyckas med en efi för en icke-efi-grub, så denna misslyckande kan detekteras och falla tillbaka till multiboot på core.img före startkommandot.
.efi
som pekar på sin egen grub.cfg. Jag ' jag tittar pågrub-mkimage
medmultiboot
ellerchainloader
men hittills har jag inte ' inte kunnat skapa en fungerande sekundär.efi
ellercore.img
.