Terminologia: ESP = la mia partizione EFI FAT32.

Voglio:

  • Avere uninstallazione GRUB autonoma sul mio ESP che carichi a catena un altro bootloader GRUB sul mio filesystem root della distribuzione (/). Al momento ho diverse distribuzioni senza GRUB installato sulle mie partizioni. Ognuno è installato completamente sul proprio ext4 /. Voglio che tutti abbiano il proprio bootloader secondario.
  • È accettabile anche che lESP GRUB primario si riavvii / ricarichi con grub.cfg dal sistema operativo. Effettivamente il chainloading stesso.

Quello che ho provato:

  • Gli esempi che ho trovato includono lavvio di GRUB legacy da GRUB2 e viceversa, ma non lo fanno usa i file UEFI e .efi. La documentazione GNU GRUB non menziona nemmeno UEFI, e i wiki di Arch / Ubuntu / Gentoo forniscono le informazioni minime per configurare uninstallazione di base (senza caricamento a catena).

Finora:

  • Ho installato GRUB sul mio ESP utilizzando grub-install e grub-mkconfig. Il test di avvio funziona. Ciò significa che la mia cartella /boot/grub è vuota e il mio ESP non deve essere montato durante / dopo lavvio.
  • Ho ho provato a installare un secondo grub in /boot/efi/ e /boot/grub/, ma la parte EFI non “si installa, grub-install si lamenta che lobiettivo non è una partizione EFI. Ma dal momento che ho già installato un GRUB principale, non dovrebbe importare che il mio GRUB secondario sia su rootfs ext4, giusto? Grub può leggere ext4. Ho provato anche lopzione --force.

Quindi mi sembra di dover trovare un modo per convincere linstallatore che va bene installare grubx64.efi sotto /boot/EFI

Se qualcuno è curioso di sapere come ho installato il GRUB principale, era solo questione di usare le giuste opzioni in grub-install con rispetto al mio ESP.

Risposta

Cè un altro modo: puoi creare una voce di menu che dica a GRUB di caricarne unaltra secondario grub.cfg, come uno di unaltra distribuzione Linux.

Ad esempio, ho iniziato con Gentoo Linux da cui ho installato GRUB2 nellMBR (la macchina è troppo vecchia per EFI).

Ho quindi installato NixOS, che ho configurato per generare grub.cfg nel suo / boot (separato da / boot di Gentoo) ma senza installare GRUB.

Per chiarire, grub-install è stato eseguito da Gentoo ma non da NixOS.

Successivamente, per poter avviare NixOS, lho aggiunto a /etc/grub.d/40_custom in 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 } 

La chiave è la riga configfile /nixos/root/boot/grub/grub.cfg. Indica a GRUB di caricare un altro grub.cfg. Ho quindi eseguito grub-mkconfig da Gentoo per applicare le modifiche.

Ora, quando avvio e seleziono NixOS lintera interfaccia di GRUB si aggiorna in riflettono il NixOS grub.cfg, da cui posso avviare il sistema operativo. A differenza del caricamento a catena, questa configurazione utilizza una singola installazione di GRUB; utilizza semplicemente una seconda configurazione.

Commenti

  • Capisco, questo è ciò a cui mi riferivo al punto 3: " Si carica a catena ". Ho trovato questo metodo durante la ricerca, ma stavo trattenendo dal rispondere da solo perché ' preferirei caricare a catena un altro .efi che punta al proprio grub.cfg. ' sto guardando grub-mkimage con multiboot o chainloader ma finora non sono ' in grado di creare un .efi o core.img.

Risposta

Ho “scoperto come installare manualmente .efi su ciascuno dei miei / “. Fare riferimento al chainloader GRUB secondario dalla configurazione principale è semplice:

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 } 

Per creare questo .efi ho usato grub-mkimage perché grub-install non mi ha permesso di scrivere su un filesystem non FAT. La sintassi è molto esigente e non dà errori se usi un percorso sbagliato, controlla attentamente gli argomenti:

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

Ho provato a tralasciare i moduli del filesystem GPT o ext2 ma non ha funzionato, quelli due moduli erano il requisito minimo assoluto per il mio sistema (ext2 funziona per ext2 / 3/4).

La directory prefix è dove il bootloader secondario cercherà la sua cartella dei moduli e il file di configurazione. ha creato una /boot/grub/ per ogni sistema operativo che include una x86_64-efi/ cartella (copiata da /usr/lib/grub) e una grub.cfg Posso modificare utilizzando grub-mkconfig con OS-probing disabilitato (o solo manualmente modificalo).

Ho originariamente installato ogni sistema operativo senza GRUB. Questo metodo mi ha permesso di installare bootloader GRUB secondari su tutti i sistemi operativi utilizzando un primo OS o LiveCD con GRUB. Posso cambiare la configurazione di avvio di ogni sistema operativo in modo indipendente, nessun rischio di contaminazione perché lESP non viene mai montato.

Commenti

  • E se lo volessi usi lUUID invece di (hd0, gpt7)? Come apparirebbe la riga di comando di grub-mkimage in questo caso?

Risposta

Sto cercando di fare un cosa simile per i386-pc grub, e chainloader del file core.img non funzionava, dando “errore: firma non valida”

Ma avevo appreso che il file grub core.img è compatibile con multiboot, così sono stato in grado di avviare core.img come:

multiboot (hd0,7)/core.img boot 

e ottenere con successo il nuovo grub, i suoi moduli e la configurazione iniziale.

Suppongo che il tuo comando chainloader fallisca su un efi per un grub non efi, quindi questo failrue può essere rilevato e ripiegato su multiboot su core.img prima del comando di avvio.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *