Error: no such partition.
Entering rescue mode…
grub rescue>

LINUXSISTEMAS OPERATIVOS
grub rescue

Te levantas un día, vas al trabajo, enciendes tu equipo y compruebas que tu servidor principal no responde al ping. Despacio pero con algo de prisa, bajas a las catacumbas donde está el servidor que no responde y desde una pequeña pantalla ves este mensaje de horror. Oh no, ¿y ahora qué?. Tranquilo, se puede solucionar en la mayoría de las veces.

grub-rescue

Vamos a ver como podemos recuperar el grub dentro de cualquier distribución de entornos Debian. En mi caso, vamos a utilizar una máquina virtual Debian 12 que ya tengo instalada y corriendo correctamente.

Debian 12

Rompiendo grub.cfg

Para el entorno de pruebas lo primero que haremos será romper la configuración de grub.cfg, para que nos aparezca el prompt de grub> al iniciar la máquina y así ver como lo podemos recuperar.

root@debian:/# rm /boot/grub/grub.cfg
root@debian:/# shutdown -r now

Al reiniciar podemos ver que la máquina se queda esperando en el prompt de grub>. Para solucionarlo seguiremos una serie de pasos:

Paso 1: listar los discos que tenemos

grub> ls
(hd0) (hdo0,msdos5) (hd0,msdos1)

Aquí podemos ver los discos que tenemos en el sistema. Debemos ir listando cada uno de los discos para ver dónde tenemos instalado el sistema.

  • (hdX): nos indica el disco que tenemos instalado.
  • (hdX,msdosX): nos indica la partición en la que tenemos. Si es del sistema ext4, significa que ahí está instalado nuestro sistema.

Paso 2: identificar dónde está nuestro sistema

Por lo tanto teniendo en cuenta el sistema de particiones que tenemos y sabiendo que las particiones se encuentran en /dev/sdaX:

  • hd0 = sda
  • hd0,msdos1 = sda1 –> Aquí tendremos nuestro sistema.
  • hd0,msdos2 = sda5

Paso 3: reparar grub

Sabemos que nuestra partición linux se encuentra en (hd0, msdos1). Para cargar módulos en el kernel podemos usar «modprobe» o «insmod». En este caso usaremos «insmod»:

# Carga del módulo linux
grub> insmod linux

# Miramos las versiones de Kernel que tenemos para cargarla
grub> ls /boot/vmlinuz-config-6.1.0-25-amd64

# Cargamos el Kernel
grub> linux /boot/vmlinuz-config-6.1.0-25-amd64 root=/dev/sda1

# Cargamos el sistema de arranque
grub> initrd /boot/initrd.img-6.1.0-25-amd64

# Reiniciamos
grub> boot --now

Con esto conseguimos arrancar el sistema, pero si volvemos a reiniciar habrá que volver a hacer lo anterior, ya que no tenemos archivo de configuración del grub. Para que sea permanente debemos generar una nuevo grub.cfg. Para ello entramos por consola y hacemos lo siguiente:

root@debian:/# cd /boot/grub/
root@debian:/# grub-mkconfig > grub.cfg
root@debian:/# update-grub
root@debian:/# reboot

grub rescue> Rompiendo por completo el directorio /grub/

Si ahora tenemos un caso más grave, que es que el directorio /boot/grub no existe. Podemos hacer la prueba borrando el directorio.

root@debian:/# rm -Rf /boot/grub

Al iniciar nos dará un error más complicado:

Ahora tenemos el problema que si hacemos los comandos anteriores, vemos que no existen los módulos, ya que estos se encontraban dentro del directorio /boot/grub/.

Si no tenemos backup del directorio (sería interesante tenerlo para recuperarlo de la forma anterior), tendremos que utilizar una live! para entrar en el sistema. Podemos usar la misma ISO live de la distribución (mejor para tener las mismas distribuciones paquetes) o incluso una ISO SystemRescue. En nuestro caso usaremos la misma distro de instalación de Debian que estamos usando. Ojo, debe ser de la misma arquitectura amd64, en este caso.

Arrancamos nuestra Live y miramos las particiones que tenemos:

Como vemos tenemos nuestro sistema en la partición sda1, por lo tanto el MBR estará sobre sda. Ahora arrancaremos en modo chroot (lo vimos en entradas anteriores Arrancar en modo chroot):

root@debian:/# mount /dev/sda1 /mnt
root@debian:/# mount –bind /dev /mnt/dev
root@debian:/# mount –bind /dev/pts /mnt/dev/pts
root@debian:/# mount –bind /proc /mnt/proc
root@debian:/# mount –bind /sys /mnt/sys
root@debian:/# chroot /mnt

Con esto estaremos dentro de la jaula de nuestro sistema. Entramos dentro de /boot/ e instalamos el grub en el MBR que dijimos era sda

root@debian:/# cd boot/
root@debian:/boot# grub-install /dev/sda
Installing for i386-pc platform.
Installation finished. No error reported

root@debian:/boot# grub-mkconfig > grub.cfg
root@debian:/boot# update-grub

Si nos diera algún error podemos volver a instalar grub: root@debian:/boot# apt install –reinstall grub

Y volver a instalarlo en el MBR: root@debian:/boot# grub-install /dev/sda && updat-grub

Por último, desmontamos todos los bind que montamos para el chroot:

oot@debian:/boot# cd /
root@debian:/# umount /mnt/dev  
root@debian:/# umount /mnt/dev/pts  
root@debian:/# umount /mnt/proc  
root@debian:/# umount /mnt/sys
root@debian:/# umount /mnt/

Y con esto nuestro GRUB está recuperado. Lo único que no es tan bonito como el de la instalación, porque habría que configurarlo con la misma imagen de fondo.