Reparando el MBR

Todo Linuxero que se respete ha pasado alguna vez por la muy conocida prueba de perder el GRUB, ya sea por que algún otro sistema operativo haya sobreescrito el MBR (como Windows) o porque “accidentalmente” se haya borrado. El día de ayer me encontraba trabajando en Ubuntu Linux 8.10 y me dió por actualizarme a la versión 9.04 (aún BETA) y todo funcionó perfectamente; la actualización se realizó exitosamente presentando como mucho unos dos errores por paquetes problemáticos. Después de esto como era de suponerse había que reiniciar el sistema para poder “disfrutar” de esta nueva versión de Ubuntu.

Al reiniciar me sorprendí de que no me cargaba GRUB ¬¬. Me dispuse a repararlo, así que introduje un CD de Instalación de Ubuntu. Terminó de bootear e iba a ejecutar los archiconocidos comandos para reparar el MBR:

grub
> find /boot/grub/stage1
Error 15: File Not Found

Hummm, no encuentra el archivo.  Revisé en el directorio /boot y mágicamente se había desparecido la carpeta grub. Ejecuté grub-install /dev/sda pero me aparecian errores de que no se podía encontrar el dispositivo. Un buen rato después reinicié el sistema e inserte un CD con Super Grub Disk para que me reparara eso sin mucho problema, pero ninguna de sus herramientas me sirvió ya que me apareció el mismo error de que no se encontraba el directorio grub.

El problema cuando usé el CD de Ubuntu fué que al montar la partición en la que se encontraba el sistema y hacer chroot en la misma, el grub-install en la carpeta /dev no encontraba ningún dispositivo ya que esta se “llena” cuando empieza la carga del sistema, pero como me encontraba simplemente accediendo a los datos de la partición, no se había cargado nada.

¿Cómo lo solucioné?

Después de comprender el error hice lo siguiente:

sudo su #Adquiero privilegios de root
mkdir /mnt/linux #Creé una carpeta en la que iba a montar la partición
mount /dev/sda5 /mnt/linux #Monté la partición en la carpeta mencionada arriba
mount –bind /dev /mnt/linux/dev #”Enlacé” la carpeta /dev del Live-CD con el /dev de la partición con Linux
chroot /mnt/linux #Hice chroot en la partición montada
grub-install /dev/sda #Instalé el GRUB, ahora si exitosamente 😀
exit #Salí de chroot
umount /dev/sda5 #Desmonté la partición
reboot #Reinicié

Ahora si, GRUB quedó instalado 😀 La sorpresa en mi cara fué peor al ver que después de reiniciar si me cargo el GRUB, pero no me apareció con la lista de sistema operativos instalados… Esta lista se encuentra en el archivo menu.lst, así que de nuevo a reiniciar con Live-CD y después de realizar la montada de la partición verifique y efectivamente el archivo no estaba. Repetí los pasos de arriba solo que después del grub-install debí haber ejecutado update-grub el cual me agregaría al archivo todos los kernels que se encontraran en /boot. Después de hacer eso, si pude de nuevo iniciar con Ubuntu.

Como dije antes update-grub solo agrega los kernels que se encuentren en /boot, pero ¿Qué pasa si tenemos instalado algún otro sistema en nuestro PC? (en mi caso Windows 7 Build 7057). Agregúe la entrada manualmente al menu.lst:

sudo nano /boot/grub/menu.lst

Y al final del archivo agregúe:

title           Windows 7 Build 7057
root            (hd0,0)
savedefault
makeactive
chainloader     +1

En root yo puse (hd0,0), en mi caso porque la partición de Windows se encuentra en el disco uno (hd0) y en la partición 1 (,0); reemplaza esos datos por los tuyos restándole 1 a cada valor por ejemplo:

root (hd1,4) -> Haría referencia a /dev/sdb5

Puedes hacer un fdisk -l (como root) que te mostrará las particiones y discos del sistema.

Recuerda que update-grub es un script propio de distribuciones Debian-based así que en otras distribuciones es muy probable que no exista.

4 Comments