Comment recréer la partition de démarrage EFI?

10

J'ai installé Fedora sur ma machine avec /partition, swappartition et ESPpartition pour le démarrage EFI.

Maintenant, j'installais Elementary OS au lieu de Fedora.

  1. J'ai formaté la /partition (/ dev / sda3)
  2. Formatage de la partition de swap (/ dev / sda4)
  3. Mais n'a pas formaté la partition de démarrage EFI (/ dev / sda1)

Maintenant, quand je démarre, je reçois mon ancien menu grub qui a été installé par Fedora. Je peux uniquement démarrer dans Elementary OS en:

  1. Entrer dans le menu de démarrage.
  2. Sélection du démarrage à partir du fichier EFI
  3. Naviguez /dev/sda1/pour obtenir le elementaryrépertoire contenant le grubx64.efifichier. Ce qui est /boot/efi/EFI/elementary/grubx64.efi.

Comment puis-je résoudre ce problème? J'ai pensé à formater la partition de démarrage /dev/sda1/avec fat16ou quelque chose, puis à réinstaller grub dessus.

Mon /dev/sda1contient maintenant ceci:

root@rafael:/home/rafael# ls /boot/efi/
EFI  mach_kernel  System

root@rafael:/home/rafael# ls /boot/efi/EFI/
BOOT/       elementary/ fedora/     

root@rafael:/home/rafael# ls /boot/efi/EFI/fedora/
BOOT.CSV  fonts  gcdx64.efi  grub.cfg  grubx64.efi  MokManager.efi  shim.efi  shim-fedora.efi

root@rafael:/home/rafael# ls /boot/efi/EFI/elementary/
grubx64.efi

Voici ma efibootmgrsortie:

BootCurrent: 003D
Timeout: 0 seconds
BootOrder: 2001,2002,2003
Boot0000* Notebook Hard Drive
Boot0010* Internal CD/DVD ROM Drive
Boot0011* Internal CD/DVD ROM Drive (UEFI)
Boot0012* Fedora
Boot0013* Fedora
Boot0014* Fedora
Boot0015* Fedora
Boot0016* Fedora
Boot0017* Fedora
Boot0018* Fedora
Boot0019* Fedora
Boot001A* Fedora
Boot001B* Fedora
Boot001C* Fedora
Boot001D* Fedora
Boot001E* Fedora
Boot001F* elementary
Boot2001* USB Drive (UEFI)
Boot2002* Internal CD/DVD ROM Drive (UEFI)

Toute aide serait appréciée.

Rafael Adel
la source
1
Je ne peux que suggérer cet ensemble d'articles, jamais utilisé EFI moi-même: rodsbooks.com/efi-bootloaders/index.html , rodsbooks.com/efi-bootloaders/index.html , rodsbooks.com/gdisk/whatsgpt.html .
Boris Burkov
1
Votre implémentation UEFI a-t-elle un type de menu de sélection de démarrage comme F8 ou plus? Veuillez poster la efibootmgrsortie pour voir si l'entrée de l'élémentaire est là (il semble que ce ne soit pas le cas, mais pour être sûr). Vous aimerez également refind en tant que gestionnaire de démarrage. Juste au cas où vous voudriez jeter un coup d'œil à E17 sur ce système, il y a une image qui fonctionne (lien ISO 490M) ainsi que des instantanés hebdomadaires . Il est probablement inférieur en ce qui concerne E polis
Michael Shigorin
@MichaelShigorin Ok, j'ai ajouté une efibootmgrsortie.
Rafael Adel

Réponses:

5

Je ne sais pas pourquoi vous utilisez grub en premier lieu. UEFI agit comme un chargeur de démarrage et permet de sélectionner différents systèmes d'exploitation ou noyaux individuels dans un menu de démarrage. Bien qu'il y ait quelques exceptions, il n'est généralement pas nécessaire de chaîner un deuxième chargeur de démarrage, grub dans ce cas.

Vous mentionnez que vous avez installé OS élémentaire au lieu de Fedora, ce qui signifie que vous n'avez besoin de charger qu'un seul système d'exploitation. Ici, je présente un moyen de le faire sans utiliser grub. Le noyau doit être compilé avec EFI_STUB, si c'est le cas, vous pouvez vérifier avec

grep EFI_STUB /boot/config-<version>

Copiez le noyau et initramfs sur l'ESP (partition système EFI)

cp /boot/vmlinuz-<version> /boot/efi/EFI/elementary/vmlinuz-<version>.efi
cp /boot/initrd.img-<version> /boot/efi/EFI/elementary/initrd.img-<version>

Enregistrer le noyau comme option de démarrage dans UEFI

echo "root=UUID=<disk_uuid> ro quiet rootfstype=ext4 add_efi_memmap initrd=\\EFI\\elementary\\initrd.img-<version>" |
  iconv -f ascii -t ucs2 |
  efibootmgr \
    --create --gpt \
    --disk /dev/<disk> --part <partition_number> \
    --label "Elementary OS" \
    --loader "\\EFI\\elementary\\vmlinuz-<version>.efi" \
    --write-signature --append-binary-args -

L' --diskargument prend le nom de périphérique du disque, par exemple --disk /dev/sda, l' --partargument prend le numéro de partition de l'ESP, par exemple 4. Vous pouvez trouver le numéro de partition ESP avec la commande suivante:

gdisk -l /dev/sda | awk '$6=="EF00" {print $1}'

Assurez-vous de répéter les étapes après chaque mise à jour du noyau

Soit vous le faites manuellement (répétez simplement les étapes ci-dessus), soit vous écrivez un petit script qui fait le travail. Pour l'automatiser complètement, le script pourrait être connecté à la procédure de post-installation du noyau, à la procédure de post-mise à jour initramfs et à la procédure postrm du noyau (pour supprimer l'entrée de démarrage UEFI). En fait, je ne sais pas pourquoi cela n'est pas fait par défaut dans les distributions, c'est juste quelques lignes de code.

Marco
la source
Hmmm, je l'ai fait grep EFI_STUB /boot/config-3.2.0-49-genericmais je n'ai rien obtenu.
Rafael Adel
le noyau 3.2 est trop ancien (il date de janvier 2012) pour prendre en charge EFI_STUB. Vous avez besoin au moins du noyau 3.3.
Marco
@RafaelAdel Si vous ne voulez pas construire votre propre noyau, vous pouvez rechercher une version plus récente du noyau dans les référentiels logiciels. Elementary semble être basé sur Ubuntu et un noyau 3.5 ou 3.8 devrait être disponible. Les plus récents sont plus susceptibles d'avoir EFI_STUB activé.
Marco
En fait, il y a maintenant le noyau 3.10.1. Je vais essayer.
Rafael Adel
2
Marco, conseiller l'utilisation de stub est irresponsable à moins que vous ne souhaitiez guider chaque utilisateur à travers ce qui n'est pas pris en charge par sa distribution et ne pas le transmettre comme "faites après chaque mise à niveau du noyau". C'est bien d'avoir mais pas si bien d'automatiser, je vous le dis en tant que responsable du support UEFI dans ALT Linux.
Michael Shigorin
2

Je l'ai fait !

Tout d'abord, j'ai supprimé toutes les entrées de démarrage inutiles en:

efibootmgr -b <entry_hex_number> -B

Ensuite, reformater la partition ESP avec le FAT32système de fichiers.

mkfs.vfat -F32 /dev/sda1

Puis installé grub sur /dev/sdaNOT/dev/sda1

grub-install /dev/sda
Rafael Adel
la source
3
Vous n'avez pas besoin de grub-install qui écrit MBR. Je ne sais pas si le grub de votre distribution fait les deux choses ensemble, mais ce dont vous avez besoin est de copier grubx64.efi (ou shim.efi) dans / boot / efi / EFI / $ distro / et efibootmgr -c -l / boot /efi/EFI/$distro/grubx64.efi.
Lingzhu Xiang
1
grub-install a appris à bloquer EFI (vous pouvez le forcer avec --target = x86_64-efi mais efivars.ko doit de toute façon être chargé à ce moment-là).
Michael Shigorin