lunes, 31 de diciembre de 2007

Recuperando tabla de particiones perdida

Ayer pasé una "divertida" tarde luchando a brazo partido por recuperar la tabla de particiones de mi disco duro. Todo empezó cuando tuve la feliz idea de probar el comando grub-reboot, que sirve para reiniciar un sistema Linux y hacer que se arranque con la entrada del menú de GRUB que le indiquemos.

No se por qué (aunque lo intuyo, ver final del post) cuando se reinició el ordenador en lugar de arrancar el Windows (que era lo que estaba probando), lo que arrancó fue... nada. Así que cogí el CD de instalación de mi Kubuntu y arranqué con él, esperando que se arreglara simplemente reinstalando el GRUB, cosa sencilla y que ya he hecho otras veces.

Tras arrancar desde el CD, abro una consola como root y me aseguro de que se ve la partición del disco, ejecutando fdisk -l. ¡Horror! No es que no vea la partición del Linux, es que no ve ninguna, el mensaje que devuelve dice que el disco ¡no tiene particiones!

Gracias a que el CD con el que he arrancado es live puedo utilizar el entorno gráfico y el navegador para buscar en Internet la forma de arreglarlo. Encuentro una utilidad llamada gpart que escanea el disco duro en busca de particiones. Sus creadores han pensado en todo y hay una versión compilada estáticamente para Linux, con lo que solo hay que descargársela y ejecutarla. Al hacerlo encuentra algunas de las particiones que tenía, y me da la opción de escribir la tabla en el disco. Como no tengo mucho que perder, le digo que sí y lo hace inmediatamente. Sin necesidad de reiniciar, compruebo que puedo montar la partición de mi Linux, y que está todo ahí. No sería demasiado catastrófico que se perdiera porque tengo la buena costumbre de hacer backup de vez en cuando en otro disco, pero sería un rollo tener que instalar otra vez el sistema y configurarlo a mi gusto.

Bien, reinicio y me sale el GRUB. El Windows no lo puedo arrancar, pero el Linux sí, así que eso hago. Mi objetivo ahora es intentar recuperar la partición de Windows. Tampoco tengo datos en ella, pero hay dos cosas por las que me interesa: Porque es un XP legal instalado en lugar del Vista que traía, y porque tengo ahí mis partidas del Zero Hour :-)

Antes de hacer ningún experimento me guardo en una memoria USB la tabla de particiones actual, por si acaso. Aunque no sea la correcta, por lo menos me arranca el ordenador con ella.

Busco y encuentro otra utilidad, TestDisk, similar a la anterior y que también revisa todo el disco duro buscando vestigios de particiones. Esta parece que funciona algo mejor, ya que encuentra incluso la definición de la partición original del Windows Vista que venía preinstalado en mi portátil. La de XP no aparece, pero da la opción de hacer un escaneo más profundo y tras unos minutos la encuentra. Le digo cuales son las particiones que tenía y las restauro.

Reinicio de nuevo y ya puedo arrancar el Windows. Perfecto, pienso, pero aun no ha terminado la cosa, porque cuando vuelvo a reiniciar para volver a mi querido Linux ahora no arranca, al seleccionarlo en el GRUB me da este error:
Error 17, cannot mount selected partition
Vuelvo a arrancar con el CD y busco información. Hay que reinstalar el GRUB, así que ejecuto:

grub-install /dev/sda

Pero da un error de que no encuentra el directorio de instalación de GRUB. Para solucionarlo tengo que indicarle dónde está, así que primero hay que montar la partición en algún sitio, por ejemplo en /mnt:

mount /dev/sda6 /mnt

A continuación reinstalar GRUB indicándole el sitio anterior:

grub-install --root-directory=/mnt /dev/sda

Con esto es suficiente el 99% de las veces, pero dado el problema que he tenido con la tabla de particiones me da un error, de que no encuentra el fichero stage1. Vuelvo a buscar y encuentro la solución. Primero hay que ejecutar grub a secas, lo que hace que se le puedan ejecutar comandos interactivamente, y entonces hago lo siguiente:

grub> find /boot/grub/stage1
Me devuelve (hd0,5)
grub> root (hd0,5)
grub> setup(hd0)

Y se instala sin errores. Vuelvo a reiniciar, y al elegir la entrada del GRUB para arrancar me vuelve a decir que no puede montar la partición. Presiono la 'e' para editarla, y veo que hay una entrada en la que pone root (hd0,6), así que la sustituyo por (hd0,5), y presiono la 'b' para que arranque de ella, y por fin todo vuelve a funcionar como antes. Por alguna razón ha cambiado el número de la partición del sistema con todo este lío (antes era la 6 y ahora es la 5). Para que no vuelva a ocurrir lo del arranque, corrijo el fichero /boot/grub/menu.lst con la nueva información.

Y ahora, las conclusiones:
  1. Hay que hacer copia de seguridad de nuestros datos de vez en cuando. Yo tenía hecha una reciente, así que todo este proceso para recuperarlos ha sido para mi simplemente una molestia. Si no los hubiera tenido, hubiera sido una lucha desesperada. Prefiero las molestias a la desesperación.

  2. Hacer copia de seguridad del sector de arranque (MBR), que contiene la tabla de particiones es muy simple, basta ejecutar:

    dd if=/dev/sda of=copia_tabla.bin bs=512 count=1

    Que copia los primeros 512 bytes del disco en el fichero copia_tabla.bin. Para restaurarla hay que ejecutar el comando contrario. Desde hoy, este fichero lo he añadido a mi copia de seguridad.

  3. ¿Por qué me pasó todo esto simplemente por ejecutar grub-reboot? No lo se, puede ser debido a algún problema con la tabla de particiones original o algún tema de comunicación BIOS - sistema sobre la geometría del disco. Lo miraré con calma un día de estos.


Links de utilidad:

- gpart, programa de recuperación de particiones.
- TestDisk, otro programa de recuperación de particiones, más grande, más completo, y para más sistemas (incluido Windows).
- Solución al problema de reinstalación de GRUB.

No hay comentarios: