domingo, 14 de abril de 2019

Cómo reparo GRUB con EFI en Ubuntu?

¡Trabajadores!

Desde los tiempos del Primer Peronismo he explicado cómo recuperar GRUB con el DVD de Ubuntu. Este procedimiento nos servirá para las instalaciones típicas, con viejo arranque desde el BIOS.

Sin embargo, de un tiempo a esta parte el efectivo arrancador GRUB ha debido afrontar la aparición del sistema de arranque firmado, llamado EFI o UEFI, que está presente en los equipos de más moderna factura.

UEFI/EFI es un arrancador compuesto, que es más complejo que el sistema convencional de arranque. GRUB puede utilizarlo, haciendo contacto desde lo que sería la UEFI que reside en la placa madre de nuestro sistema hasta una partición especial dentro del disco rígido que contiene el arrancador EFI. En el caso de Ubuntu 18.04LTS, esta partición tiene unos 512MiB de espacio y va formateada en FAT32 para máxima compatibilidad. Allí se deposita el arrancador en el punto de montaje /boot/sh, y luego en el resto de las particiones de sistema (si existen) continuarán en siguientes particiones, normalmente dentro del misma unidad de disco, o eventualmente en otras (según lo hayamos configurado especialmente).

Si hubiese habido una falla con GRUB o la partición EFI, y el sistema se niega a arrancar desde el disco rígido, podremos recuperarla, siempre y cuando no eliminemos las particiones de manera alguna.

Para ello utilizamos el DVD arrancable de Ubuntu, o un pendrive preparado con la ISO de Ubuntu (idealmente la misma versión que la utilizada para instalar la versión). La arrancamos y elegimos "Probar Ubuntu sin Instalar".

Una vez iniciado el escritorio Live, debemos identificar las particiones del disco. Para ello conviene utilizar gParted, que está incluido en el Ubuntu Live. Debemos prestar especial atención a la identificación de discos, pues la misma describe como /dev/sdx a la unidad de disco, /dev/sdxx es la partición donde se encuentra la EFI, y /dev/sdxxx es la partición de sistema.
Por ejemplo, en una instalación típica de Ubuntu 18.04LTS, en un único disco rígido, el disco podría ser /dev/sda, la partición EFI /dev/sda1 y la partición de sistema /dev/sda2. Sin embargo, debemos prestar atención pues la misma podría variar en otras condiciones, y es importante tomar nota de las identificaciones correctas.

Si lo deseamos hacer desde la terminal, abrimos una con Ctrl+Alt+T e ingresamos:

sudo fdisk -l

Una vez identificadas las particiones EFI y de sistema, debemos montarlas.

Ello lo haremos desde la terminal por medio de los comandos necesarios. Primero montamos la partición de sistema, usamos:

sudo mount /dev/sdxxx /mnt

Luego montamos la partición EFI:

sudo mount /dev/sdxx /mnt/boot/efi

for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done


Luego nos damos de alta como administrador en la partición de sistema recién montada:

sudo chroot /mnt


Confome estemos logueados como Root, tendremos al alcance nuestro disco rígido. Ahora debemos reinstalar la parte de GRUB que va en el disco. Ello se hace con:

grub-install /dev/sdX


...y lo actualizaremos con:


update-grub

Si nos dice que tuvo éxito, ingresamos:

exit

Y luego reiniciamos el sistema (se nos solicitará retirar el DVD o Pendrive de Ubuntu, y el equipo debería reiniciar correctamente desde el disco rígido con EFI, como lo hacía normalmente.


Editar errores de GRUB

Puede haber sucedido que hayamos cometido errores en la configuración de GRUB. Si tal fuese el caso y tuviésemos que editarlo que editarlo, lo haremos con:

mount /dev/sdxxx /mnt
chroot /mnt

Una vez montado el sistema de archivo del disco, lo editamos con:

nano /etc/default/grub

...y revisamos que todo esté correcto.


Si no tuviésemos la referencia del archivo de configuración de GRUB, econtraremos una muestra en /usr/share/grub/default/grub

Recrear la partición EFI para GRUB
Si por alguna causa catastrófica hubiésemos perdido la partición EFI, es fácil hacerla de nuevo.

Podemos usar fdisk o gParted para crear una nueva partición GPT con el tipo "EFI partition (1)", idealmente al principio del disco. Acto seguido la formateamos con:

sudo mkfs.msdos /dev/sdx

...luego la montamos con:

sudo mount /dev/sdXX /mnt/boot/efi

...y seguimos montando el resto del sistema, como en el caso anterior.

sudo mount /dev/sdXXX /mnt
sudo grub-install /dev/sdx


Recuperar la EFI cuando tenemos nuestro sistemas de archivos repartido en distintos discos rígidos
Indudablemente que si al instalar el sistema operativo se repartió el sistema de archivos largo de diferentes particiones (la carpeta raíz "/" en un disco y la carpetas /home, /tmp y /var en otro), la tarea de recuperación de la EFI será algo más desafiante.

En tal caso tenemos que proceder a averiguar y tomar adecuada nota de qué identificador de discos y en qué particiones está cada componente del sistema de archivos (lo averiguamos con sudo fdisk -l).

Ejemplo:
Suponiendo que tenemos dos discos, y que nuestro sistema de archivos está estructurado de la siguiente manera:

Disco de estado sólido de arranque y sistema /dev/sda:
Partición /dev/sda1 -> particion EFI
Partición /dev/sda2 -> carpeta "/" del sistema

Disco rígido de trabajo /dev/sdb:
Partición /dev/sdb1 -> carpeta /home
Partición /dev/sdb2 -> carpeta /tmp
Partición /dev/sdb3 -> carpeta /var,

En tal caso, si deseamos recuperar la partición EFI en este sistema de archivos dividido entre dos discos, deberíamos ingresar los siguientes comandos:


sudo mount /dev/sda2 /mnt
sudo mount /dev/sdb1 /mnt/home

sudo mount /dev/sdb2 /mnt/tmp
sudo mount /dev/sdb3 /mnt/var
sudo mount /dev/sda1 /mnt/boot/efi
for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done
sudo chroot /mnt
grub-install /dev/sda



update-grub

Si nos dice que tuvo éxito, ingresamos:

exit

Y reiniciamos el sistema.


Copiar la EFI a la UEFI de la placa madre

Este ejemplo puede resultar útil cuando cambiamos de disco rígido, o bien cambiamos de placa madre en el equipo. En tal caso la placa madre no podrá encontrar la ruta de UEFI (no tiene que ver aún con el arrancador GRUB. Para resolver este problema deberemos copiar EFI a la memoria UEFI de la placa madre.
  • Si nuestro disco es reconocido como /dev/sda (lo cual suele ser típico en computadoras portátiles o nettops, ya que llevan un único disco), el comando será:

sudo efibootmgr -c -l "\EFI\UBUNTU\SHIMX64.EFI" -L ubuntu

  • En cambio, si el disco es otro (en caso de instalaciones en sistemas con varios discos), habremos de adaptar el idenfiticador del disco /dev/sdX para que quede así:

sudo efibootmgr -c -l "\EFI\UBUNTU\SHIMX64.EFI" -L ubuntu -d /dev/sdX -p N

16 comentarios:

  1. Gracias General Perón!, me ha salvado la vida, no me arrancaba la PC al querer cambiar el GRUB, escribi mal el archivo y no levantaba mas. Casi tuve que formatear todo. Me funcionó con la primera opción en una netbook. Muchas gracias!!!!!

    ResponderEliminar
    Respuestas
    1. Estimado Anónimo:

      La constante lucha por la Liberación es el temperamento que debemos seguir en todo tiempo y en todo lugar.

      Reciba un saludo muy afectuoso.

      Atte.

      Juan Perón

      Eliminar
    2. Buenas, tengo un problema que no logro comprender, instalé Linux mint 21.1 en un net de conectar igualdad, el problema radica en qué si la prendo se vuelve a apagar al segundo, pero si le doy F10 puedo seleccionar Ubuntu para iniciar. No se dónde está el error o que hice mal, una ayudita.

      Eliminar
  2. Muy buenas noches, agradezco por la información que comparte muy valiosa, me sirvió el primer método, solo que con windows tengo activado bitlocker al detectar un cambio me pide la llave pero si funciona

    ResponderEliminar
  3. A mí me entra normal al sistema lo que al principio me dispara dos líneas diciéndome un error. Eso es después de que el logotipo pasa. O sea, enciendo el pc, sale el logotipo, se quita el logotipo, pone las dos líneas con el error repetido, y espero y me arranca el sistema normalmente. Que puede ser eso, porque probé todo lo de ahí y nada.

    ResponderEliminar
    Respuestas
    1. Estimado Unknown:

      Debería poder leer el contenido del error para saber a qué tipo de problema se debe. Uno común que suele responder a lo que comenta se refiere aquí: https://ubuntuperonista.blogspot.com/2020/11/busybox-initramfs.error-ubuntu-fsck.html

      Atte.

      Juan Perón

      Eliminar
  4. hola buenas yo a la hora de montar la particion efi me dice que no existe pero aparece en el listado¿tenes idea que peude ser? muchas gracias

    ResponderEliminar
    Respuestas
    1. Estimado rafaramarami:

      Puede haber sucedido un error en la misma, o bien que esté indicandola mal. Recuerde que debe hacerlo con /dev/sdbX, siendo X el número de la partición. Por otro lado, sd refiere a discos de plato. En caso de otra tecnología de almacenamiento, el indicativo podría ser diferente. Revíselo con sudo fdisk -l para ver qué denominación reciben sus discos y proceda en consecuencia.

      Atte.

      Juan Perón

      Eliminar
  5. Tengo una placa con eMMC como unico dispositivo de almacenamiento, me dejo instalar Zorin 16 Core x64bits, para ello tuve que hacer la instalacion sin gestor de arranque GRUB (de lo contrario no deja hacer instalaciones); ahora me encuentro con el problema de no poder arranacar el OS, con la terminal intente de todo sin solucion y probe con muchas herramientas especializadas en recuperacion del GRUB sin exito... ¿Saben a que se debera?

    ResponderEliminar
    Respuestas
    1. Estimado Anónimo: con los eMMC debe probar desactivar del BIOS la opción Secure Option ROM.

      Atte.

      Juan Perón

      Eliminar
  6. Es posible que no haya creado la partición efi durante la instalación. El único camino es crear la partición efi para poder instalar linux, ya que esta se marcará como la partición de arranque

    ResponderEliminar
  7. Juancito, querido, me acabás de solucionar un problemón. Instalé frescó Ubuntu 20.04 junto a W10 y, según el grub, W10 no existía.
    Quién diría que en pleno 2020 siguen existiendo estos problemas.
    Tu solución paso a paso fue suficiente para dejarme todo impecable.
    Saludos y muchísimas gracias.

    ResponderEliminar
    Respuestas
    1. Estimado Phorious:

      De ahora en más, no bien arranque Ubuntu o su Window$10, gritará al cielo un estruendoso "¡Viva Perón!"

      Atte.

      Juan Perón

      Eliminar
  8. Hola estimados Juan Perón tengo el problema con Grub con un ubuntu server 20.04.3 he revisado las particiones.
    Device Start End Sectors Size Type
    /dev/sda1 128 1048703 1048576 512M EFI System
    /dev/sda2 1048704 3145855 2097152 1G Linux filesystem

    he realizado el proceso mount pero me sale este error

    root@server:~# sudo chroot /mnt
    chroot: failed to run command ‘/bin/bash’: Permission denied
    root@server:~#
    espero su ayuda o guia




    ResponderEliminar
  9. Buena guia,
    debo decir que tambien tuve error al intentar montar la particion del efi
    sudo mount /dev/sdxx /mnt/boot/efi

    la solucion es bastante simple, la cual es montar /mnt/boot antes

    ResponderEliminar
  10. Note: If the grub-install command reports an error, it cannot find efivars. Try the following while still in the chroot environment (Thanks to @michael_dunn - the step was necessary in Ubuntu 22.10) :

    mount -t efivarfs none /sys/firmware/efi/efivars

    Afterwards execute the grub-install command again : grub-install /dev/sdX

    To avoid possible unexpected issues, properly unmount the file systems afterwards.

    sudo umount /dev/sdXX
    sudo umount /dev/sdXXX

    ResponderEliminar