GRUB2 peut-il partager la partition système EFI avec Windows?

30

J'ai une installation existante de Windows 7 GPT, qui possède déjà une partition système EFI.

J'essaie maintenant d'installer Linux sur un disque dur séparé, qui est également formaté en GPT. Je n'ai trouvé aucun moyen de démarrer grub sans partition système EFI, donc ma question est:

Est-il possible pour grub2 d'utiliser la même partition système EFI que Windows? Comment dire à grub2 de l'utiliser?

Pour clarifier ma configuration:

gpt /dev/sda:
    1 EFI System partition created by windows (100MB)
    2 "Microsoft reserved partition" (200MB)
    3 Windows root (rest of disk)

gpt /dev/sdb:
    # After answering my own question: this partition is not needed
    1 boot partition containing grub, kernels etc.(32MB)
    2 crypto LVM partition (rest of disk)

Je veux que grub2 utilise la /dev/sda1partition EFI existante .

PS: Ma carte mère est compatible EFI.

cratère2150
la source

Réponses:

22

Après une journée de recherche, je peux maintenant répondre à ma propre question: oui c'est possible, et vous pouvez même utiliser cette partition comme / boot et stocker vos noyaux / initramfs / etc. Là.

Exigences:

  • Grub> = 2,00 (1,98 et 1,99 ne fonctionnent pas)
  • Grub doit être installé à partir d'un noyau Linux prenant en charge les variables EFI ( CONFIG_EFI_VARScompilé dans ou en tant que module efivars)
  • Pour créer l'entrée de démarrage EFI, vous aurez besoin efibootmgr

Installer:

Montez d'abord votre partition EFI sur / boot

mount /dev/sdX1 /boot

Si vous regardez l'entrée de montage, vous verrez qu'il s'agit simplement d'une partition FAT (32). Sous /bootvous devriez trouver un répertoire efi.

Comme l'appel de grub efibootmgr, vous devez charger evivars, s'il n'est pas compilé dans le noyau:

modprobe efivars

Vous pouvez maintenant installer grub:

# Replace x86_64 by i386 for 32 bit installations
grub2-install --target=x86_64-efi

Grub installe ses fichiers comme d'habitude /boot/grub2. Si tout fonctionnait correctement, vous devriez maintenant avoir également un dossier /boot/efi/grub2ou /boot/efi/your_distros_name. Avec, --bootloader-id=isert_name_herevous pouvez également spécifier vous-même le nom du dossier.

Grub appelle efibootmgrautomatiquement et crée une entrée de démarrage avec ce nom dans le menu de démarrage EFI (dans mon cas, cela signifie qu'il apparaît comme un périphérique de démarrage dans le menu EFI, je ne sais pas si c'est le cas sur chaque carte EFI)

La configuration supplémentaire ne diffère pas de la configuration grub2 habituelle, grub2-mkconfigajoutera les modules appropriés pour EFI à votre grub.cfg.

Fenêtres de chargement de chaîne:

Comme j'ai demandé un double démarrage avec Windows, je vais inclure la configuration grub pour le charger en chaîne:

Le chargement en chaîne d'une installation Windows sur EFI est légèrement différent de celui sur un disque MBR. À la place, vous n'aurez pas besoin des modules ntfsou et vous en aurez besoin.part_mbrfatpart_gpt

De plus, la définition de root n'est pas requise, ces informations sont stockées par le propre gestionnaire de démarrage de Windows. Spécifiez plutôt la searchcommande. Les paramètres nécessaires peuvent être déterminés par

grub-probe --target=hints_string /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi

Cela vous donnera les paramètres de recherche spécifiant l'emplacement de la partition EFI, cela devrait ressembler à:

--hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1 1ce5-7f28

Au lieu d'indiquer chainloaderle nombre de secteurs à lire, vous devrez définir le chemin d'accès au chargeur EFI de Windows dans la partition EFI. Il en va de même pour toutes les installations Windows EFI. L'entrée résultante devrait ressembler à ceci:

menuentry "Microsoft Windows x86_64 UEFI-GPT" {
    insmod part_gpt
    insmod fat
    insmod search_fs_uuid
    insmod chain
    search --fs-uuid --no-floppy --set=root <insert ouput from grub-probe here>
    chainloader /efi/Microsoft/Boot/bootmgfw.efi
}

Sources: Celles - ci couvrent quelques cas supplémentaires, si vous souhaitez démarrer à partir d'EFI, elles valent la peine d'être lues:

cratère2150
la source
Pour moi (Fedora24), j'ai mis la partition efi de Windows 10 mount /dev/sdXX /boot/efi, puis j'ai suivi cela et j'ai couru bcdedit /set {bootmgr} path \EFI\fedora\shim.efide Windows au bootstrap EFI.
jozxyqk