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.
Estimado amigo recibe un saludo desde Ciudad Guayana, Venezuela.
Se me esta presentando un problema con mi portátil muy parecido al tuyo, a continuación te lo describo brevemente con la esperanza de que me puedas ayudar:
Tenia instalado Ubuntu 8.10 y hace unos días lo actualicé a 9.04 desde el gestor de actualizaciones.
Estuve varios días probandola, modificando temas, colores y esas cosas, todo perfecto hasta anoche, la apague y me dormí.
Hoy en la mañana fui a prender la maquina y me apareció el error:
Error 15: File not found y no me deja pasar del Grub.
Buscando en Internet conseguí tu solución y pienso que puedo resolver mi problema. Por lo que me dispuse a seguir los paso que describes. cuando llego a paso donde ejecuto el chrrot me sale el siguiente mensaje:
«chroot: no se puede ejecutar la orden «/bin/bash»: error de formato ejecutable»
Como soy novato en el manejo de comandos y la consola no he podido avanzar desde alli.
a continuacion te coloco lo que me sale cuando ejecuto el «fdisk -l»:
/dev/sda1 es la de inicio y tiene linux (ubuntu)
/dev/sda2 es la swap
/dev/sda4 es una particion extendida
/dev/sda5 es una particion ext3 donde guardo mis archivos (documentos, mp3, etc)
El unico cambio que hice fue que en el paso: mount /dev/sda5 /mnt/linux lo cambie a mount /dev/sda1 /mnt/linux ¿Esta bien o no es asi?
Espero que puedas ayudarme, no quisiera tener que volver a instalar ya que tengo algunos archivos importantes en sda1.
Gracias de antemano.
Hola RFerrer.
Se me hace muy raro lo el error que te dá chroot. En fin, intenta esto:
– Inicia con un CD (Puede ser de Debian o Ubuntu, no tiene que ser la 9.04 obligatoriamente)
– Cuando te cargue gdm (la pantalla para iniciar con tu usuario) presiona Ctrl+Alt+F1 para entrar a una tty.
– Estando ahí, logueate con usuario: ubuntu, contraseña: ubuntu.
– Luego haz un sudo su para escalar privilegios.
– Crea una carpeta para que montes tu partición (ej: mkdir /mnt/milinux)
– Luego: mount /dev/sda1 /mnt/milinux
– Después: mount –bind /dev /mnt/milinux/dev (En caso de que no exista /mnt/milinux/dev, creas la carpeta)
– mount -t proc none /mnt/milinux/proc (En caso de que no exista /mnt/milinux/proc, creas la carpeta)
– Ahora sí, enjaulamos el sistema: chroot /mnt/milinux /bin/bash
– Estando dentro creamos el archivo /etc/mtab que contiene los datos de las particiones montadas: cat /proc/mounts > /etc/mtab
– Haciendo esto ejecutamos: grub-install /dev/sda (Aunque igual el grub ya está instalado, pero hazlo 🙂 ).
– Cuando te diga que esté instalado ejecutar: update-grub
– exit
– umount /dev/sda1
– reboot
– Y en teoría ya debería de funcionar XDDD. Recuerda después de hacer el update-grub verificar que si haya contenido (y que si sea el correcto) con un «cat /boot/grub/menu.lst».
Suerte y cualquier cosa nos comentas.
Hola Cortex, gracias por tu pronta y precisa respuesta respuesta.
Anoche me puse a realizar paso a paso tus recomendaciones pero igual cuando me toco hacer el chroot me salio el mismo error:
“chroot: no se puede ejecutar la orden «/bin/bash»: error de formato ejecutable”
Realmente no se que podria haber pasado por que no se exactamente lo que hace el comando «chroot /mnt/milinux /bin/bash».
La cuestión es que me decidí a instalar el Ubuntu 9.04 desde cero ya que lo he venido actualizando en linea desde la versión 8.04 y cuando la instalación manda a copiar los archivos a mi partición me refleja un error de I/O en sda1 cuando va por 46%. Presumo que algo tiene que ver con el error de chroot, no se si estaré en lo cierto.
Por lo pronto, a sugerencia de un compañero de trabajo, pienso identificar la parte dañada de la partición con el comando «badblock /dev/sda1», luego crear la una nueva partición excluyendo este sector e instalar nuevamente, si funciona lo dejaré así hasta que pueda ahorrar para comprar otro disco para mi portátil.
Gracias y quedo atento a sus comentarios y consejos.
Si… Al parecer no es problema ni del chroot, ni del CD de Ubuntu ni nada por el estilo, es problema de la partición o posiblemente del disco entero. Te recomiendo que uses HirenBoot CD y hagas un formateo a bajo nivel del disco entero, después lo más probable es que al reintentar instalar ya no te muestre ese error.
Intenta y cuéntanos como te fué 😉