Comment réinstaller GRUB2 EFI?

Après avoir mis à jour avec succès mon bios, quelque chose a mal tourné et j'ai fini avec un curseur clignotant dans le coin supérieur gauche d'un écran noir. Pas d'erreurs, pas de rien. Le bios ne répertorie actuellement qu'une option de démarrage SATA: <disc name> à la place de l'UEFI ubuntu habituelle. J'utilise un schéma de partitionnement GPT.

J'ai finalement constaté que la solution de travail était de réinstaller correctement grub-efi-amd64 . Alors, comment puis-je faire cela?

PS: En fait, j'ai réussi à réinstaller GRUB2 EFI seul et je publierai ma réponse ici, car je n'ai pas pu trouver une approche complète à ce sujet.

  • Démarrez votre ordinateur avec un live-USB / CD en mode UEFI . J'ai eu deux options de démarrage <flash_drive> et UEFI: <flash_drive> , la seconde est nécessaire pour exposer les variables efi dans /sys/firmware/efi/ afin que efibootmgr n'échoue plus tard. Le démarrage avec la première option me donne l'erreur suivante:

     Fatal: Couldn't open either sysfs or procfs directories for accessing EFI variables. Try 'modprobe efivars' as root. 

    modprobe efivars efivars modprobe efivars pas fonctionné pour moi.

  • Chroot dans le système brisé (semblable à l' aide Ubuntu Grub2 mais avec des spécificités efi):

     sudo mount /dev/sda2 /mnt #sda2 is the root partition sudo mount /dev/sda1 /mnt/boot/efi #sda1 is the efi partition for i in /dev /dev/pts /proc /sys; do sudo mount -B $i /mnt$i; done sudo cp /etc/resolv.conf /mnt/etc/ #makes the network available after chrooting modprobe efivars # make sure this is loaded sudo chroot /mnt 
  • Selon votre distribution linux, vous faites maintenant différentes choses.

    • Pour Ubuntu / Debian :

       apt-get install --reinstall grub-efi-amd64 

      Ou bien:

       apt-get install --reinstall grub-efi update-grub 

      Si ce qui précède vous donne un grub, mais pas un amorçable

    • Pour Fedora (jusqu'à 16, peut fonctionner pour d'autres):

       yum reinstall grub-efi 

      Dans la commande suivante, vous devez remplacer sdX par le périphérique dont la partition EFI vous permet de démarrer. Dans – --part Y vous devez remplacer Y par le nombre de la partition EFI (comme dans /dev/sdXY ).

       efibootmgr -c --disk /dev/sdX --part Y efibootmgr -v # verify a new record called Linux is there 
  • Maintenant tapez Ctrl + D pour quitter chroot, démontrez tout et redémarrez:

     for i in /sys /proc /dev/pts /dev; do sudo umount /mnt$i; done sudo umount /mnt/boot/efi #please do this. Corrupted efi partitions are not nice sudo umount /mnt sudo reboot 

Vous devrez peut-être adapter cela à vos besoins (table de partition différente, partition distincte / démarrage, etc.) et ce n'est peut-être pas la seule option, mais cela m'a bien fonctionné.

Un système live approprié pour réparer les choses est grml . Il existe également un guide complet sur la configuration d'un périphérique USB amorçable, dont la section Mac est la plus utile en fait (créez simplement une partition FAT32, copiez les fichiers, redémarrez, fait).

En tant que simplification potentielle de la première méthode, il est possible de démarrer directement sur le système sur le disque dur, en utilisant uniquement le grub du CD en direct. Testé sur xubuntu 13.10 avec le CD live xubuntu 13.10.

Assurez-vous que Secure Boot est désactivé dans votre BIOS. Insérez le CD en direct et démarrez-le via UEFI. Le menu GRUB du CD s'affiche. Appuyez sur "c" pour accéder à la ligne de commande.

 configfile (hd0,gpt1)/EFI/ubuntu/grub.cfg 

Adaptez la commande grub ci-dessus si vous avez une partition système EFI différente.

Après que votre système a démarré à partir du disque dur, il devrait suffire de réinstaller grub sur la partition système EFI et de l'enregistrer avec le microprogramme via grub-install.

 sudo grub-install 

Comme pour Maxine, j'ai trouvé mes paramètres UEFI dans le BIOS endommager et ma machine ne démarrait pas.

Dans mon cas, c'est un Lenovo ThinkServer RD430 avec Linux Mint Debian et il semblait que tout ce que je ferais au sujet de update-grub ou de changer de disque dur dans le serveur ne ferait pas démarrer. Le système d'exploitation dans mon cas est linuxmint-201403-mate-dvd-64bit installé via USB. (Voir ci-dessous pour une description complète des événements qui pourraient empêcher l'UEFI de ne pas fonctionner)

Passer exactement les mêmes étapes sur un ThinkServer TS140 n'a pas empêché UEFI de perdre son esprit même une fois. J'ai regardé la page du pilote RD430 et mon bios a deux versions. Je n'ai jamais eu à mettre à jour les bios sur une carte mère avant, alors je ne suis pas un seul à mettre à jour automatiquement lorsqu'il existe de nouvelles versions disponibles. Après avoir mis à jour le bios, la réponse de Maxine ci-dessus a fonctionné, seulement avec une torsion …

 # efibootmgr -c --disk /dev/sdX --part Y # efibootmgr -v BootCurrent: 0004 Timeout: 1 seconds BootOrder: 0002,0000,0003,0001,0004 Boot0000* linuxmint HD(1,800,1f4000,829f6cc9-5b17-479c-b3ea-61e43faecbf7)File(\EFI\linuxmint\grubx64.efi) Boot0001* LMDE Linux Mint Debian HD(1,800,15d505800,934c598c-fe3c-fd43-84a1-fa38e4f72552)File(\EFI\linuxmint\grubx64.efi) Boot0002* Linux HD(1,800,1f4000,829f6cc9-5b17-479c-b3ea-61e43faecbf7)File(\elilo.efi) Boot0003* UEFI: Built-in EFI Shell Vendor(5023b95c-db26-429b-a648-bd47664c8012,)AMBO Boot0004* UEFI: VerbatimSTORE N GO 1.00 ACPI(a0341d0,0)PCI(1a,0)USB(1,0)USB(4,0)HD(1,80,1d70780,00000000)AMBO mint / # 

La commande efibootmgr -c ajouté deux entrées 0000 et 0002 !
L' Boot0002* Linux HD première fois dans l'ordre de démarrage n'est pas correcte .
L'entrée 0000 est correcte.

Pour tester cela, j'ai essayé de démarrer sans aucune interruption, qui est l'entrée 0002 . Comme prévu, cela n'a pas marché. J'ai donc redémarré le serveur, j'ai frappé F12 et linuxmint choisi linuxmint . Comme prévu, il a démarré mon installation LMDE.

La façon d'éliminer les entrées indésirables via efibootmgr est:

 # efibootmgr -b 2 -B 

J'ai utilisé cette commande pour supprimer les entrées 0001 et 0002 . L'option 0001 de la dernière de mes nombreuses tentatives pour récupérer l'OS.


Notes UEFI

Si vous lisez ceci et si frustré avec UEFI que je le suis, voici quelques notes et ressources:
»Le démarrage à UEFI Shell est semblable à l'utilisation d'un shell DOS.
»Intel a établi un manuel de référence PDF pour les commandes shell EFI .
»Le document UEFI_on_TS430 de Lenovo est la seule ressource que j'ai vue expliquant l'utilisation du shell efi.
» Une autre référence de shell uefi à partir du Guide de l'administrateur nPartition .
»Vous pouvez essayer de démarrer une partition à partir du shell efi en naviguant vers le chargeur et en l'exécutant.
»UEFI veut que le disque dispose d'une table de partition GPT, et non d'une table partielle MSDS.
»UEFI veut que la première partition sur votre disque soit formatée fat32 ou vfat.
»Pour un démarrage" générique ", il doit y avoir un répertoire /EFI/boot à la racine avec bootx64.efi .
»Certaines personnes copient leur grubx64.efi d'où il a été installé dans /EFI/boot/bootx64.efi et cette triche a fonctionné pour eux.
»Chaque fois que vous faites les changements de grub, utilisez efibootmgr -v avant et après pour vous assurer que votre redémarrage est correct.


Mon expérience RD430

J'ai résimplé le système OS 10+ fois la semaine dernière en essayant de régler ce problème et de configurer le serveur. Ma configuration est un SSD sur ce contrôleur RAID dans la fente PCIe 2.0 avec LMDE installé sur elle. Contrôleur RAID AOC-S3008L-L8i ( reflet au mode IT ) dans la 2ème fente PCIe 3.0 avec des lecteurs 6x 3TB. RAM: 12 Go ECC (3x 4 Go).

Voici les modifications que je ferais pour que mon système ne démarre pas:
»Changez les emplacements S3008L-L8i pci (en laissant la carte SSD + seule).
»Désactiver l' invite du logiciel LSi raid bios pour le contrôleur embarqué.
»Ajoutez ma ancienne carte HighPoint RocketRaid à une fente PCIe ouverte.
»Effectuez une modification dans /etc/default/grub , puis exécutez update-grub .
( Peut grub-install être que grub-install doit-il être exécuté aussi? )

Je voudrais voter dessus, mais apparemment, je n'ai pas assez de compte sur SuperUser. Je suis content d'avoir trouvé une réponse à ce moment-là après des jours de combats de clones qui ont fonctionné mais ne démarreront pas. Je pense que tout cela concerne l'UEFI et une sorte de mécanisme de "démarrage sécurisé" ou quelque chose.

Je travaille hors ligne, donc apt-get n'était pas une option. Ce que j'ai fait, j'ai mis Ubuntu Desktop sur une clé USB, ajoute les paquets grub-efi et grub-efi-amd64 à la racine de la clé USB (grub-efi_1.99 ~ rc1-13ubuntu3_amd64.deb et grub-efi-amd64_1. 99 ~ rc1-13ubuntu3_amd64.deb pour Ubuntu 11.04 – modifiez le cas échéant pour distro et architecture), et mettez le suivant dans un script sur la clé USB aussi bien:

 #! /bin/bash sudo mount /dev/sda2 /mnt sudo mount /dev/sda1 /mnt/boot/efi dir=`dirname $0` sudo cp $dir/grub-efi*.deb /mnt/tmp for i in /dev /dev/pts /proc /sys; do sudo mount -B $i /mnt$i; done sudo chroot /mnt /bin/sh -c "dpkg -i /tmp/grub-efi*.deb" sudo shutdown -r now 

Démarrez la clé USB Live, ouvrez un terminal, exécutez la commande, et le travail est un bon 'un! Le seul problème occasionnel est que l'UEFI a parfois été déplacé vers le bas de l'ordre de priorité de démarrage en dessous du disque dur, auquel cas vous devez entrer dans le BIOS et modifier l'ordre de démarrage pour l'empêcher d'essayer (et d'échouer) sur SATA: drive .

Vous pouvez également utiliser dpkg-reconfigure au lieu de dpkg -i , mais cela pose quelques questions sur le chargeur de démarrage.

[Edit] Je n'ai pas non plus assez de commentaire pour commenter, alors ce que je pensais être un commentaire sur une réponse se révèle être une réponse.

Sur mon 32 bits Ubuntu 14.10 sur Lenovo Yoga 2 Pro, j'ai changé pour UEFI boot comme ceci:

  • créer le dossier

     sudo su mkdir /boot/efi 
  • Monter la partition "EFI System" dans /etc/fstab

     fdisk -l|grep EFI 

    Ceci a montré: /dev/sda2 2050048 2582527 532480 260M EFI System

     echo "/dev/sda2 /boot/efi vfat defaults,sync 0 0">>/etc/fstab 

    Monter cette partition

     mount /boot/efi 
  • Installez grub-efi-amd64-bin et désinstallez grub-efi-ia32-bin

     aptitude install grub-efi-amd64-bin grub-efi-ia32-bin_ grub-install --target=x86_64-efi 
  • Redémarrer Ubuntu en mode efi

     update-grub 
  • Testez si elle marche bien, alors j'ai installé grub-efi-amd64 et les grub-pc grub-gfxpayload-lists désinstallées de grub-pc grub-gfxpayload-lists avec

     aptitude install grub-efi-amd64 grub-pc_ grub-gfxpayload-lists_ 

J'ai choisi de ne pas supprimer / démarrer quand on l'a demandé.


Peut-être que je l'ai compliqué et cela aurait tout simplement fonctionné bien:

 apt-get install --reinstall grub-efi update-grub