¿Cómo reinstalar GRUB2 EFI?

56

Después de actualizar con éxito mi BIOS, algo salió mal y terminé con un cursor parpadeante en la esquina superior izquierda de una pantalla en negro. Sin errores, sin nada. La BIOS ahora solo enumera una SATA: <disc name>opción de arranque en lugar de la UEFI habitual ubuntu. Estoy usando un esquema de partición GPT.

Finalmente descubrí que la solución de trabajo era reinstalar correctamente grub-efi-amd64. Entonces, ¿cómo hago esto?

PD: En realidad, logré reinstalar GRUB2 EFI por mi cuenta y publicaré mi respuesta aquí, ya que no pude encontrar ningún procedimiento completo sobre esto.

Maxime R.
fuente
Tuve problemas con mi arranque dual: computadora portátil Windows 10 / PCLinuxOS. Perdí de alguna manera el cargador grub2 o la funcionalidad. Después de probar sin éxito muchas de las contorsiones anteriores, me topé con la iso de Grub2 Boot Rescue, la quemé en un CD y la dejé en el disco. Fue un poco tedioso pasar por el proceso de arranque cada vez, pero al menos funcionó. Luego encontré el disco de reparación de arranque iso y lo grabé en un DVD. En este punto, mi disco estaba muy flojo por mis esfuerzos, así que reformateé y reinstalé todo, Windows 10 y Mint Sonya esta vez. Luego arrancó Boot Repair Disk e instalé Grub2 ov
Keith Krehbiel

Respuestas:

87
  • Inicie su computadora con un USB / CD en vivo en modo UEFI . Tenía dos opciones de arranque <flash_drive>y UEFI: <flash_drive>, la segunda es necesaria para exponer las variables efi /sys/firmware/efi/para que efibootmgrno falle más adelante. Arrancar con la primera opción me da el siguiente error:

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

    modprobe efivars no funcionó para mí

  • chroot en el sistema roto (similar a la ayuda de ubuntu grub2 pero con especificidades 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
    
  • Dependiendo de su distribución de Linux, ahora hace cosas diferentes.

    • Para Ubuntu / Debian :

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

      o alternativamente:

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

      si lo anterior te da una comida, pero no de arranque

    • Para Fedora (hasta 16, puede funcionar para otros):

      yum reinstall grub-efi
      

      En el siguiente comando, debe reemplazar sdX con el dispositivo que tiene la partición EFI desde la que desea iniciar. En --part Ytiene que reemplazar el Y con el número de la partición EFI (como en /dev/sdXY).

      efibootmgr -c --disk /dev/sdX --part Y
      efibootmgr -v # verify a new record called Linux is there
      
  • Ahora escriba Ctrl + D para salir de chroot, desmontar todo y reiniciar:

    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
    

Es posible que deba adaptar esto a sus necesidades (tabla de partición diferente, partición separada / de arranque, etc.) y puede que no sea la única opción, pero esto funcionó bien para mí.

Un sistema en vivo adecuado para arreglar cosas es grml . También hay una guía extensa sobre cómo configurar un dispositivo USB de arranque, de los cuales la sección de Mac es la más útil en realidad (solo cree una partición FAT32, copie los archivos, reinicie, listo).

Maxime R.
fuente
44
¡Tipo! Muchas gracias! Esto me salvó después de que mi Lenovo X220 ya no quisiera arrancar después de un reinicio, que activó las últimas actualizaciones del paquete y al mismo tiempo me vio reiniciar el BIOS porque supuestamente soluciona los problemas de conexión con la tarjeta 3G. Después de ese arranque se hizo imposible, por cualquier razón. Hasta que usé tu guía. Por cierto, la parte en la que copiaste resolv.conf no funcionó para mí, porque es un enlace simbólico en /run/resolvconf...(en Ubuntu 12.04), en su lugar, solo solía mount --bind /run /mnt/runmontar todo el /rundirectorio en el entorno chroot.
nem75
Extendí la respuesta con mis experiencias para Fedora 16 y una referencia a grml. Si pudieras revisar y aceptar la edición, estaría feliz.
Jonas Schäfer
1
En Ubuntu (al menos para 12.04) update-grubno copiará la última imagen grub2 a su partición EFI, solo actualizará grub.cfg. Entonces, la mejor manera de hacerlo es apt-get install --reinstall grub-efi(o grub-efi-amd64), esto también llamará update-grub al final.
número5
3
Salvé mi reproductor multimedia ayer. 300 puntos de internet para ti.
Stefano Borini
2
Después de ejecutar update-grubmi /boot/eficarpeta todavía estaba vacía (había creado esta nueva partición). Solo después de ejecutar grub-installlos archivos reales se escribieron allí. Esta guía me ayudó (alemán): wiki.ubuntuusers.de/EFI_Problembehebung
Philippe Gerber
8

Como una posible simplificación del primer método, es posible arrancar directamente en el sistema en el disco duro, solo usando grub del CD en vivo. Probado en xubuntu 13.10 con el live CD de xubuntu 13.10.

Asegúrese de que el arranque seguro esté deshabilitado en su BIOS. Inserte el CD en vivo y arranque a través de UEFI. Se mostrará el menú GRUB del CD. Presione "c" para llegar a la línea de comando.

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

Adapte el comando grub anterior si tiene una partición de sistema EFI diferente.

Después de que su sistema se haya iniciado desde el disco duro, debería ser suficiente reinstalar grub en la partición del sistema EFI y registrarlo con el firmware a través de grub-install.

sudo grub-install

fuente
No funciona configfile (hd0,gpt1)/EFI/ubuntu/grub.cfgno hace nada. ¿Cómo inicio después de emitir este comando?
Autodidacta el
3
Guau. ¡No esperaba que fuera tan fácil! ¡Esta es una respuesta infernal! Ejecuté en sudo grub-install --target=x86_64-efi --efi-directory=/boot/efilugar del comando sugerido anteriormente (pero el anterior puede funcionar también, no lo sé). Y después de eso, puede acceder a su sistema operativo Linux nuevamente. Luego, simplemente ejecute sudo update-gruby todo debería ser de arranque.
Zorawar
@SandeepDatta: su directorio efi probablemente esté en un disco / partición diferente. La mía estaba en / dev / sdb1, por lo que me encontré: configfile (hd1,gpt1)/EFI/ubuntu/grub.cfg. Inicie un LiveCD y ejecútelo sudo gpartedpara localizar su partición efi.
Zorawar
5

Al igual que con Maxine, descubrí que mi configuración UEFI en BIOS se dañaba y mi máquina no arrancaba.

En mi caso, es un Lenovo ThinkServer RD430 con Linux Mint Debian y parece que cualquier cosa que haga sobre actualizar-grub o cambiar cualquier disco duro en el servidor hará que no arranque. El sistema operativo en mi caso es linuxmint-201403-mate-dvd-64bit instalado a través de USB. (vea a continuación una descripción completa de los eventos que podrían causar que UEFI no funcione)

Seguir exactamente los mismos pasos en un ThinkServer TS140 no resultó en que UEFI se volviera loco ni una sola vez. Miré la página del controlador RD430 y mi BIOS tiene dos versiones antiguas. Nunca he tenido que actualizar la BIOS en una placa base antes, por lo que no soy alguien que actualice automáticamente cuando haya nuevas versiones disponibles. Después de actualizar la biografía, la respuesta anterior de Maxine funcionó, solo con un giro ...

# 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 / # 

El efibootmgr -ccomando agregó dos entradas 0000y 0002!
La Boot0002* Linux HDentrada primero en el orden de arranque no es correcta .
La 0000entrada es correcta.

Para probar esto, intenté arrancar sin ninguna interrupción, que es la 0002entrada. Como se esperaba, no funcionó. Así que reinicié el servidor, presioné F12 y elegí linuxmint. Como se esperaba, se inició en mi instalación de LMDE.

La forma de eliminar entradas no deseadas a través de efibootmgr es:

# efibootmgr -b 2 -B

Usé este comando para eliminar entradas 0001y 0002. La opción 0001fue el último de mis muchos intentos de recuperar el sistema operativo.


Notas UEFI

Si está leyendo esto y está tan frustrado con UEFI como yo estoy / estaba, aquí hay algunas notas y recursos:
»Arrancar en UEFI Shell es similar a usar un shell de DOS.
»Intel hizo un manual de referencia en PDF para los comandos de efi shell.
»El documento UEFI_on_TS430 de Lenovo es el único recurso que he visto que explica el uso de efi shell.
» Otra referencia de shell uefi de la Guía del administrador de nPartition .
»Puede intentar arrancar una partición desde el shell efi navegando hasta el cargador y ejecutándolo.
»UEFI quiere que el disco tenga una tabla de particiones GPT, no una tabla de partes msdos.
»UEFI quiere que la primera partición en su disco tenga formato fat32 o vfat.
»Para un arranque" genérico "debe haber un /EFI/bootdirectorio en la raíz con bootx64.efiél.
»Algunas personas copian grubx64.efidesde donde se instaló /EFI/boot/bootx64.efiy este truco les funcionó.
»Cada vez que realice cambios de grub, use efibootmgr -vantes y después para asegurarse de que su reinicio esté bien.


Mi experiencia RD430

He reinstalado el sistema operativo más de 10 veces la semana pasada tratando de resolver esto y configurar el servidor. Mi configuración es una SSD en este controlador RAID en la ranura PCIe 2.0 con LMDE instalado. Controlador RAID AOC-S3008L-L8i ( actualizado al modo IT ) en la segunda ranura PCIe 3.0 con unidades de 6x 3TB. RAM: 12GB ECC (3x 4GB).

Estos son los cambios que haría que causaran que mi sistema no se inicie:
»Cambie las ranuras pci S3008L-L8i (dejando solo la tarjeta SSD +).
»Desactive el indicador de BIOS de incursión del software LSi para el controlador integrado.
»Agregar mi vieja tarjeta HighPoint RocketRaid a una ranura PCIe abierta.
»Haga un cambio /etc/default/gruby luego corra update-grub.
(¿ Quizás también grub-installdeba ejecutarse? )

Chris K
fuente
Estoy muy frustrado con UEFi. He instalado Linux con BIOS pero es muy difícil que funcione con UEFi y vuelva a encontrarlo
Suici Doga
3

Volvería a votar esto, pero aparentemente no tengo suficiente representante en SuperUser. Me alegro de haber encontrado finalmente una respuesta a esto después de días de lucha contra clones que funcionaron pero no arrancaron. Creo que todo se relaciona con UEFI y algún tipo de mecanismo de "arranque seguro" o algo así.

Estoy trabajando fuera de línea, por lo que apt-get no era una opción. Lo que hice fue poner Ubuntu Desktop en una memoria USB, agregar los paquetes grub-efiy grub-efi-amd64a la raíz de la memoria USB (grub-efi_1.99 ~ rc1-13ubuntu3_amd64.deb y grub-efi-amd64_1.99 ~ rc1-13ubuntu3_amd64.deb para Ubuntu 11.04: cambie según corresponda para la distribución y la arquitectura), y coloque lo siguiente en un script en la memoria USB también:

#! /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

Inicie el dispositivo USB Live, abra una terminal, ejecute el comando y el trabajo es bueno. El único problema ocasional es que UEFI a veces se movió hacia abajo en el orden de prioridad de arranque debajo del HDD, momento en el que debe ingresar al BIOS y cambiar el orden de arranque para evitar que intente (y falle) SATA: drive.

También puede usar en dpkg-reconfigurelugar de dpkg -i, pero eso hace un par de preguntas sobre el cargador de arranque.

[editar] Tampoco tengo suficiente representante para comentar, así que lo que pensé que era un comentario en una respuesta resulta ser una respuesta.

IBBoard
fuente
¡La bienvenida a bordo! En realidad, necesita 15 puntos para votar, 50 para comentar (vea superuser.com/privileges ), solo busque preguntas fáciles que pueda responder y listo, esa es la forma de intercambio de decir gracias :) Tenga cuidado con su script no No desmontes nada antes de cerrar. Me alegra que haya ayudado.
Maxime R.
La confusión fue más porque tengo actos en otros sitios relacionados. Olvidé que era nuevo en este lado. Linux normalmente se desmonta al apagar, y chroot con un comando regresa después de que finaliza, por lo que no creo que deba causar un problema. Descubrí que no abortará si UEFI no arranca la distribución en vivo, pero no era una prioridad probar si sudo chroot /mnt /bin/sh -c "dpkg -i /tmp/grub-efi*.deb" && sudo shutdown -r nowdio el comportamiento correcto.
IBBoard
1

En mi Ubuntu 14.10 de 32 bits en Lenovo Yoga 2 Pro, cambié al arranque UEFI de esta manera:

  • crear carpeta

    sudo su
    mkdir /boot/efi
    
  • montar la partición "Sistema EFI" en /etc/fstab

    fdisk -l|grep EFI
    

    esto mostró: /dev/sda2 2050048 2582527 532480 260M EFI System

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

    montar esa partición

    mount /boot/efi
    
  • instalar grub-efi-amd64-biny desinstalargrub-efi-ia32-bin

    aptitude install grub-efi-amd64-bin grub-efi-ia32-bin_
    
    grub-install --target=x86_64-efi
    
  • reiniciar Ubuntu en modo efi

    update-grub
    
  • probar si arranca bien, luego instalé grub-efi-amd64y desinstalé grub-pc grub-gfxpayload-listscon

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

Elijo no eliminar / arrancar cuando se me solicite.


Tal vez lo hice complicado y esto hubiera funcionado bien:

apt-get install --reinstall grub-efi
update-grub
rubo77
fuente
0

Esta entrada es más similar a la preparación de su computadora para reinstalar las entradas efi. También es lo que podría ser una forma efectiva y simple de crear un disco de rescate después de la instalación del sistema en medios internos (SSD, HDD).

Con Linux Mint Tara (una variante de Linux estrechamente relacionada con Ubuntu Bionic Beaver), el método afectó mi instalación e hizo posible luego guardarlo. Surgió de mi deseo de que un USB en vivo tenga persistencia, y dado que el tiempo para instalar una utilidad como Unetbootin para una instalación persistente es aproximadamente lo mismo que una instalación nueva, simplemente utilicé la misma distribución en vivo para hacer una instalación en el USB como se utilizó para instalar el sistema operativo en el SSD interno.

Por supuesto, nada de esto es RAID o cualquier otra configuración especializada, pero sí requirió una partición de volumen preparada en la unidad USB, y una instalación realizada en ese USB utilizando el método disponible de la distribución, eludiendo la unidad interna para una instalación en un solo montaje de raíz (/) de la partición.

Aquí es donde la nueva instalación de grub se enredó con la unidad interna. Cuando reinicié al USB, las entradas internas de UEFI grub parecían haber desaparecido, dejando solo el menú de grub al intentar seleccionar la unidad usando las entradas en el menú del BIOS.

En cambio, el arranque desde el USB mostró que el método de la distribución había producido un menú de grub listo para usar, con una lista para / dev / sda2, la partición que contiene el montaje / boot / efi. En la mayoría de las instalaciones de unidades internas principales, el nombre de grub de la partición es hd0, gpt1.

Al entrar en 'avanzado', había más de un rescate de kernel disponible. A partir de ahí, ejecute la utilidad grub y luego inicie normalmente.

Desde este punto, ejecutando el sistema operativo en la unidad interna que antes era inaccesible, desconecte el USB y luego ejecute sudo grub-install.

Cuando reinicie sin el USB, debería poder volver a ingresar. En este punto, el USB está configurado para iniciar la unidad interna en modo normal o de rescate, y la unidad tiene su propio menú.

Tim Pozza
fuente