Cómo reparar el GRUB con chroot

Resumen

Cuando tu sistema Linux deja de arrancar porque el GRUB está roto, no necesitas reinstalar todo. Puedes recuperarlo desde una Live USB usando chroot, una técnica que también revela por qué cifrar tus discos con LUKS es tan importante para la seguridad de tu servidor.

Este procedimiento sirve igual para Ubuntu, Red Hat y la mayoría de distribuciones, y te permite no solo reparar el arranque sino también recuperar archivos de un sistema dañado a nivel de kernel.

¿Por qué un disco sin cifrar es una vulnerabilidad?

Si tu disco no está protegido con LUKS (Linux Unified Key Setup), cualquier persona con acceso físico al servidor y una Live USB puede montar tus particiones y leer todo. Esto es justo lo que aprovechamos para reparar el GRUB, pero también es la razón por la que un atacante podría escalar privilegios y comprometer el sistema.

En la clase pasada [00:36] se mencionó que durante la instalación de servidores Linux existe la opción de cifrar el disco. Si la activas, este método de reparación no funciona sin la passphrase, y ese es exactamente el punto: la seguridad bien hecha también te bloquea a ti.

¿Qué es LUKS en Linux? Es el estándar de cifrado de discos en Linux. Protege tus particiones de modo que sin la contraseña nadie puede montarlas, ni siquiera arrancando desde una Live USB.

¿Cómo arrancar desde una Live USB y abrir una terminal?

Apaga el servidor por completo e inserta la imagen ISO de Ubuntu en el controlador IDE de tu máquina virtual (o como USB en hardware real). Cuando aparezca el menú, elige Try Ubuntu para cargar el sistema sin instalarlo [02:00].

Una vez en el escritorio live, accede a una terminal pura presionando Ctrl + Alt + F2 o F3. Esto te lleva a un run level tipo CLI, una de las formas más rústicas pero potentes de trabajar en Linux sin entorno gráfico.

Desde ahí asigna contraseña a root y cambia de usuario:

bash sudo passwd root su - root

¿Cómo identificar y montar la partición correcta?

Usa fdisk -l | less para listar los discos. Ignora los dispositivos loop (son de la propia Live) y busca tu disco real, normalmente /dev/sda [04:30]. La partición sda1 suele ser el BIOS boot y no se toca; la que importa para reparar el GRUB es /dev/sda2, donde vive el sistema.

Monta esa partición en el directorio /mnt:

bash mount /dev/sda2 /mnt ls /mnt/boot/grub

Si ves el archivo grub.cfg o un grub.cfg.backup, vas por buen camino. Solo con esto ya podrías rescatar archivos importantes antes de seguir.

¿Qué es el binding y por qué es necesario antes de chroot?

La Live USB no contiene todos los recursos del sistema instalado. Para que el cambio de root funcione, necesitas bindear (unir por referencia) las carpetas críticas del entorno live dentro de la partición montada. Piensa en bind mount como una referencia en memoria que conecta dos rutas.

Ejecuta estos comandos en orden:

bash mount -o bind /dev /mnt/dev mount -o bind /dev/pts /mnt/dev/pts mount -o bind /proc /mnt/proc mount -o bind /run /mnt/run mount -o bind /sys /mnt/sys

Cada carpeta cumple un papel: /dev da acceso a dispositivos, /proc expone procesos del kernel, /sys la información del sistema, y /run y /dev/pts son necesarias para sesiones y terminales.

¿Cómo usar chroot para entrar al sistema dañado?

El comando chroot cambia la raíz del sistema a la partición montada, así trabajas como si hubieras arrancado normalmente:

bash chroot /mnt /bin/bash

A partir de aquí, cuando ejecutas ls /boot/grub ya no necesitas el prefijo /mnt. Si pudieras correr apt install o apt upgrade, los cambios se aplicarían dentro del sistema real, no en la Live.

¿Para qué sirve chroot en recuperación? Cambia la raíz del sistema activo hacia un disco montado, permitiéndote ejecutar comandos como si estuvieras dentro de ese sistema. Es la base de cualquier reparación seria de Linux.

¿Cómo regenerar y reinstalar el GRUB paso a paso?

Dentro del chroot, regenera el archivo de configuración apuntando a la ruta del boot:

bash grub-mkconfig -o /boot/grub/grub.cfg

Fíjate en la línea del initrd: ahí ves la versión del kernel que se cargará, por ejemplo 5.15.0-56-generic. Si el GRUB se rompió por un kernel con fallos de firmware o drivers, puedes apuntar a otra versión instalada antes de regenerar.

Luego reinstala el bootloader sobre el disco completo, no sobre una partición:

bash grub-install --boot-directory=/boot --recheck /dev/sda

El flag --recheck verifica que el dispositivo esté correctamente detectado. Cuando veas Installation finished, sal del entorno con exit dos veces, apaga la máquina, retira la imagen live y reinicia.

¿Y si tu disco sí está cifrado?

Este método de la vieja usanza solo funciona en discos sin cifrar. Cuando el disco está protegido con LUKS, necesitas la passphrase para abrir la partición antes de montarla. Para esos casos existe Boot Repair, una utilidad que se distribuye como Live USB con herramientas más avanzadas y asistentes gráficos.

Recuerda que el bootloader es el encargado de seleccionar dispositivos de arranque y cargar la versión del kernel. Por eso saber dónde viven los archivos de configuración (/boot/grub/) y qué comandos los regeneran te da control total cuando algo falla. ¿Te ha tocado reparar un GRUB roto en producción? Cuéntame en los comentarios cómo lo resolviste.