Reparar GRUB desde GRUB

Linux Nivel Alto 28 de sep. de 2023

No siempre tenemos disponible un dispositivo LIVE (CD/DVD ó USB) con el que poder iniciar un equipo que haya sufrido algún percance en su configuración de GRUB.
Sin embargo, podemos usar el propio GRUB para recuperar el inicio de ese equipo.

Os dejo una serie de pasos muy sencillos para recuperar el GRUB de un equipo:

Entrar al menú de GRUB

En cuanto se inicie el equipo y salga el menu de GRUB pulsamos las flechas de dirección (arriba ó abajo) para detener la cuenta atras de inicio automático del boot de GRUB.

NOTA: Si el error no permite cargar GRUB, directamente nos mostrará la línea de comandos de Grub.
Menú de GRUB

Ahora simplemente pulsamos la letra c para acceder a la linea de comandos.

Linea de Comandos de GRUB

Dependiendo de la distribución de GNU/Linux, el menú que te aparezca puede ser diferente o estar en otro idioma, sin embargo los comandos y resultados que te mostrará la ejecución de ellos serán los mismos.

Consola de GRUB

Descubrir los discos y particiones

Vamos averiguar que discos y particiones tenemos en el equipo, para ello ejecutamos el comando:

ls

Nos mostrará los discos y particiones existentes:

disco/s y numero de particion

En este caso sólo tenemos un disco: (hd0)
Y dos particiones de ese disco (nos fijamos en el número e ignoramos el tipo):
(hd0,msdos5) y (hd0,msdos1)

Podría ser que nos encontrasemos 4 discos (hd0, hd1, hd2 y hd3) y nos mostraría cada disco y sus particiones:

grub_es> ls
(hd0) (hd0,1) (hd1) (hd1,1) (hd1,5) (hd2) (hd2,1) (hd3) (hd3,1)

Averiguar directorio de GRUB

Necesitamos saber la ubicación del directorio "grub", para ello lo buscaremos usando el comando ls y pasandole como parámetro (disco,particion) y terminando siempre con una barra al final (/):

Nota: El teclado está en formato 'americano', los paréntesis de apertura y cierre los encontrareis sobre la tecla 9 y 0 del teclado. La barra la encontrareis sustituyendo al 'guión' (-) en el teclado.
ls (hd0,1)/ 
mostrando contenido del disco 0 y la particion 1

Perfecto, vemos el contenido de nuestro disco. Como somos linuxeros, sabemos que boot es el directorio que contiene lo necesario para poder realizar el inicio del equipo.

Nota: Si no encontramos el directorio boot, deberemos ir recorriendo cada uno de los discos y sus particiones hasta encontrarlo.

Fijar la ruta de GRUB

Vamos a indicarle al propio gestor de grub cual es la ruta en la que tiene que buscar GRUB los Kernels. Para ello usaremos el comando:

set prefix=(hd0,1)/boot/grub
Nota: El simbolo igual (=) estará sustituyendo al simbolo de apertura de interrogación (¿)

Y luego indicamos cual es el disco raiz del sistema que debe usar para iniciar:

set root=(hd0,1)

Averiguar los Kernel disponibles

Vamos a averiguar que kernels tenemos disponibles para poder iniciar el equipo.
De nuevo usamos el comando ls, pero ampliando la ruta a boot/:

Kernels disponibles

Cargar el Kernel deseado

Vamos a cargar el kernel con el que deseamos iniciar, para ello usaremos el siguiente comando:

linux /boot/vmlinuz-6.1.0-10-amd64 root=/dev/sda1

Nota: Podemos usar la tecla TAB, para autocompletar y que sea más facil escribir:

Vemos que disponemos de 2 kernels: vmlinuz-...-10 y vmlinuz-...-12, con el que iniciar el equipo, si alguno de ello diese problemas, repetiriamos el proceso y seleccionariamos otro.

Importante: A la hora de indicar el device (/dev/sd*), hay que tener en cuenta que los discos se 'numeran' mediante letras, os dejo la correspondencia:

  • hd0 -> /dev/sda
  • hd1 -> /dev/sdb
  • hd2 -> /dev/sdc
  • hd3 --> /dev/sdd
  • etc...

Iniciar el Kernel e Iniciar Arranque

Ya tenemos los más complicado realizado, ahora tan sólo hay que iniciar el Kernel, que hemos indicado anteriormente mediante el comando:

initrd /initrd.img
Iniciar kernel cargado

Y por ultimo le indicamos que realize el arranque (boot), mediante el comando:

boot
Realizar el arranque con el kernel indicado
initrd + boot

Reparar para posteriores reinicios

En cuanto inicie el sistema, para arreglar GRUB para posteriores inicios, abriremos un terminal y con el usuario 'root' escribiremos el siguiente comando:

grub-install /dev/sda
Recuerda la 'numeración' de letras-numeros de los discos.
Además solo debes de indicar el disco, pero no la partición.

Ya sólo faltaría actualizar grub para que el sistema quede perfectamente corregido:

update-grub2
update-initramfs -u

Ya tenemos el GRUB del sistema operativo arreglado y funcionando.

Etiquetas

Luis GuLo

🐧 SysAdmin GNU/Linux - 🐳 Docker - 🖥️ Bash Scripting - 🐪 Perl - 🐬 MySQL - 👥 Formador de TI - 👥 Formador de SysAdmin's - 💢 Ansible - ☁️ Cloud Computing - ❤️ Debian GNU/Linux