Terminologie: ESP = ma partition FAT32 EFI.
Je veux:
- Avoir une installation GRUB autonome sur mon ESP qui charge en chaîne un autre chargeur de démarrage GRUB sur mon système de fichiers racine de distribution (
/
). Jai actuellement plusieurs distributions sans GRUB installé sur mes partitions. Chacun est installé complètement sur son propre ext4/
. Je veux quils aient tous leur propre chargeur de démarrage secondaire. - Il est également acceptable que lESP GRUB redémarre / se recharge avec un grub.cfg du système dexploitation. Se charger efficacement en chaîne.
Ce que jai essayé:
- Les exemples que jai trouvés incluent le démarrage de lhéritage GRUB à partir de GRUB2 et vice versa, mais ils ne le font pas utiliser des fichiers UEFI et .efi. La documentation GNU GRUB ne mentionne même pas UEFI, et les wikis Arch / Ubuntu / Gentoo fournissent les informations minimales nécessaires pour configurer une installation de base (sans chargement en chaîne).
Jusquà présent:
- Jai installé GRUB sur mon ESP en utilisant
grub-install
etgrub-mkconfig
.Le test de démarrage fonctionne. Cela signifie que mon dossier/boot/grub
est vide et que mon ESP na pas besoin dêtre monté pendant / après le démarrage. - Je « ve essayé dinstaller un deuxième grub dans
/boot/efi/
et/boot/grub/
, mais la partie EFI na pas été installée,grub-install
se plaint que la cible nest pas une partition EFI. Mais comme jai déjà un GRUB principal installé, il ne devrait pas être important que mon GRUB secondaire soit sur les rootfs ext4, nest-ce pas? Grub peut lire ext4. Jai essayé loption--force
aussi.
Il semble donc que jai besoin de trouver un moyen de convaincre linstallateur quil est correct dinstaller grubx64.efi
sous /boot/EFI
…
Si quelquun est curieux de savoir comment jai installé le GRUB principal, il sagissait simplement dutiliser les bonnes options dans grub-install
avec par rapport à mon ESP.
Réponse
Il existe une autre façon: vous pouvez créer une entrée de menu qui indique à GRUB den charger une autre grub.cfg secondaire, comme celui dune autre distribution Linux.
Par exemple, jai commencé avec Gentoo Linux à partir duquel jai installé GRUB2 dans le MBR (la machine est trop ancienne pour EFI).
Jai ensuite installé NixOS, que jai configuré pour générer grub.cfg dans son propre / boot (séparé du / boot de Gentoo) mais sans installer GRUB.
Pour clarifier, grub-install
a été exécuté depuis Gentoo mais pas de NixOS.
Ensuite, pour pouvoir démarrer NixOS, jai ajouté ceci à /etc/grub.d/40_custom dans 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 clé est la ligne configfile /nixos/root/boot/grub/grub.cfg
. Il dit à GRUB de charger un autre grub.cfg. Jai ensuite exécuté grub-mkconfig
depuis Gentoo pour appliquer les modifications.
Maintenant, lorsque je démarre et sélectionne NixOS , toute linterface GRUB sactualise à reflètent le NixOS grub.cfg, à partir duquel je peux démarrer le système dexploitation. Contrairement au chargement en chaîne, cette configuration utilise une seule installation de GRUB; il utilise simplement une deuxième configuration.
Commentaires
Réponse
Jai découvert comment installer manuellement le .efi
sur chacun de mes /
« s. Faire référence au chargeur de chaîne GRUB secondaire à partir de la configuration principale est simple:
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 }
Pour créer ce secondaire .efi
jai utilisé grub-mkimage
car grub-install
ne ma pas laissé écrire sur un système de fichiers non FAT. La syntaxe est très pointilleuse et ne donne pas derreur si vous utilisez un mauvais chemin, vérifiez donc attentivement les arguments:
grub-mkimage -o /path/to/mounted/targetOS/efidir/core.efi --format=x86_64-efi "--prefix=(hd0,gpt7)/boot/grub" ext2 part_gpt
Jai essayé de laisser de côté les modules du système de fichiers GPT ou ext2 mais cela na pas fonctionné, ceux deux modules étaient lexigence minimale absolue pour mon système (ext2 fonctionne pour ext2 / 3/4).
Le répertoire de préfixe est lendroit où le chargeur de démarrage secondaire recherchera son dossier de modules et son fichier de configuration. créé un /boot/grub/
pour chaque système dexploitation qui comprend un dossier x86_64-efi/
(copié à partir de /usr/lib/grub)
et un grub.cfg
Je peux modifier en utilisant grub-mkconfig
avec la détection du système dexploitation désactivée (ou simplement manuellement modifier).
Jai initialement installé chaque OS sans GRUB. Cette méthode ma permis dinstaller des bootloaders secondaires GRUB sur tous les systèmes dexploitation en utilisant un premier OS ou LiveCD avec GRUB. Je peux modifier la configuration de démarrage de chaque OS indépendamment, aucun risque de contamination car lESP nest jamais monté.
Commentaires
- Et si vous vouliez utiliser lUUID au lieu de (hd0, gpt7)? À quoi ressemblerait la ligne de commande grub-mkimage dans ce cas?
Réponse
Jessaie de faire une chose similaire pour i386-pc grub, et le chargeur de chaîne du fichier core.img ne fonctionnerait pas, donnant « erreur: signature invalide »
Mais javais appris que le fichier grub core.img est compatible multiboot, jai donc pu démarrer core.img comme:
multiboot (hd0,7)/core.img boot
et obtenir avec succès le nouveau grub, ses modules et sa configuration initiale.
Je suppose que votre commande chainloader échoue sur un efi pour un grub non-efi, donc ce failrue peut être détecté et revenir au multiboot sur core.img avant la commande de démarrage.
.efi
qui pointe vers le sien grub.cfg. Je ' je regardegrub-mkimage
avecmultiboot
ouchainloader
mais jusquà présent, je nai ' pas réussi à créer un.efi
oucore.img
.