Recuperar el arranque de Linux

February 14, 2009

No se por qué, pero windows me odia. Es un hecho innegable. Cada vez que instalo una nueva versión de Linux o cualquier otro sistema operativo, solo un SO me da problemas, ¿adivinan cual? Pero, ¿qué le habré hecho yo para merecer semejante castigo?

La última de sus pérfidas venganzas contra mi pobre persona ha sido muy divertida. Las particiones NTFS son las hijas de Windows, y como tales no abandonan a su pobre padre ni saben hacer nada sin él. ¡Cuanta emotividad paterno-filial! El caso es que si falla el gestor de arranque de windows (esto si que ha sido culpa mía :) ), la partición no se deja acceder. ¿Para que vas a querer acceder a tus datos si no puedes usar a su amado Windows XP? Y el proyecto de clase de mi hermano ahí adentro y el muy modorro sin copias de seguridad.

Ingénuo de mi me dije: “bueeno, seguro que con las herramientas del CD de instalación de windows se arregla”. Nunca aprenderé. Después de hacer un chkdsk (esto si que funcionó, ¡menos mal!), un fixboot y un fixmbr descubrí con alborozo que el MBR que instala fixmbr ¡me destruye el MBR! Qué bien, la herramienta para reparar el MBR te destroza el MBR.

Segundo intento: Recuperación automatizada con un CD de OpenSuse 11.1. Por razones misteriosas, parece que el sencillo /dev/sda es una forma muy aburrida de llamar a un disco duro, así que prefiere llamarlo por el modelo del fabricante, ¡¡un chorizo de caracteres alfanuméricos con el número de serie de fabricación y el nombre del fabricante!! Que intuitivo… Y como era de esperar, el cargador de arranque se vuelve loco.

Tercer intento: Modificar la configuración automatizada y hacerlo medio a mano. ¡Parece que funciona! Reinicio y, ¡¡no sale nada!! Oh, mierda, la recuperación la hace sólo en el stage 1 ¿Qué es el stage 1? Ahora que lo preguntas, es algo bastante interesante. El proceso de arranque se realiza en varias etapas. Primero la BIOS redirije la ejecución al primer sector del primer disco duro, llamado MBR (Master Boot Record) y suele ser conocido como stage 1. Este programa es diminuto y ofrece poca funcionalidad (medio Kb), así que suele llamar a otro programa mucho más grande y situado ya dentro de una partición del disco buro al cargador de arranque principal, llamado stage 2. Este programa ya puede ser mucho más grande y complejo. Grub o el menú de arranque de Windows (sólo si tienes varios Windows instalados) son buenos ejemplos de stage 2. Este programa suele mostrarse como un menú que muestra los sistemas operativos instalados y permite elegir uno y comenzar a cargarlo.

En resumen: el MBR es lo primero en ser llamado y este llama a cargador de verdad en una partición del disco duro. El problema que tenía es que la reparación automática confiaba en que el MBR funcionaba y sólo restauraba el stage 2, el menú de selección. Craso error: Windows XP había conseguido destruirlo (y ya es dificil, por cierto).

Después de hacer un receso para hacer copias de seguridad vino el éxito al fin. El proceso se puede resumir como acceder a la partición de linux existente, cargarla y restaurar grub a mano. Suena sencillo, ¿eh? Bueno, si tienes otro portatil para poder buscar los pasos por internet si :)

Para el que haya tenido el mismo infortunio, he aquí una bonita guía para conseguir recuperar el cargador de arranque Grub.

  1. Arrancar un LiveCD de Linux: En mi caso he usado el mismo DVD de Suse 11.1 que usé para instalar, seleccionando la opción de “Rescate”.

  2. Montar el disco con linux: En el punto 1 se ha conseguido un linux, pero no nuestro linux. Es un linux mínimo que está funcionando desde tu lector de DVD, así que habrá que montar el disco duro en algún directorio:

  3. ¿Cual era mi disco duro?: Si no te acuerdas, puedes hacer un fdisk -l y saldrán todas las particiones y la ruta de acceso (las rutas de acceso tienen el aspecto /dev/sd* para discos SCSI/SATA o /dev/hd* para discos duros y CDs/DVDs).

  4. Montar la partición: Es muy sencillo, hay que usar el comando mount de la siguiente manera: mount -t ext3 /dev/sda3 /mnt. Donde /dev/sda3 sería la ruta de acceso al disco duro anterior (que cada uno ponga la que le convenga). Si se produce un error, es que la ruta al disco duro está mal puesta. Será otro de los que salían on fdisk. Llegados a este punto se puede acceder al disco de linux.

  5. Preparar una jaula: Una jaula chroot es una forma de utilizar los programas y archivo que hay en una partición que no es la que ha arrancado linux. Es como si le dijeras al kernel: “eh, que en realidad mis archivos y programas están en otro sitio, olvidate de los que usabas y usa estos otros”. Técnicamente es distinto, pero conceptualmente esto es lo que el usuario ve. Antes de hacer el “cambio de ubicación” hay que copiar los dispositivos del sistema a la nueva ubicación. Si no lo entiendes, da igual, porque son un par de comandos sencillos :) :

    mount -t proc none /mnt/proc mount -o bind /dev /mnt/dev mount -o bind /sys /mnt/sys

  6. Crear la jaula: Este paso es el más sencillo: chroot /mnt /bin/bash ¡Listo! Ya estás en tu sistema linux hasta el momento inarrancable. Ahora ha llegado el momento de arreglar Grub (si es necesario y sabes como, si no mejor infórmate antes de seguir).

  7. Revisar la configuración de grub: La configuración de Grub se guarda en /boot/grub/menu.lst. En este punto se puede editar el archivo con nano, vim o emacs.

  8. Reinstalar Grub: ¡Al fin llegamos a donde queríamos! Llega el momento álgido: restaurar Grub. Para ello hay que entrar en la consola de Grub e introducir una serie de comandos. Para lanzar la shell de grub tan sólo hay que ejecutar grub en la consola y ya estaremos dentro. Ahora podemos ejecutar los comandos para reinstalar el cargador de arranque. Antes de nada, hay que tener en cuenta como Grub llama a los discos duros y las particiones. Linux llama a los dos primeros disco IDE hda y hdb, y a los primeros discos SCSI/SATA sda y sdb, y a la primera partición de cada disco hda1, hdb1, sda1 y sdb1 respectivamente. Sin embargo, Grub los llama por su orden y no por su tipo. Los primeros disco son (hd0) y (hd1), sea cual sea su tipo, y la primera partición de cada uno es (hd0,0) y (hd1,1). En definitiva, que si tu partición con linux está en /dev/sda3, en Grub se llamará esa partición (hd0,2). Veamos los comandos:

    root (hd0,3) setup (hd0) quit

Si todo ha ido bien, al reiniciar volverás a tener tu flamante Grub funcionando.

Get free blog up and running in minutes with Blogsome
Theme designed by Viewfinder Design

Creative Commons License
This obra by Rubén Corral Jordá is licensed under a Creative Commons Reconocimiento-Compartir bajo la misma licencia 2.5 España License.