Recuperando ficheros de discos duros dañados: bad superblock on /dev/sda


Resulta que en agosto del 2008 cascó el disco duro del sobremesa que uso habitualmente, y hace poco el del portátil. En uno tenía los backups del otro, y en el otro los del uno, por lo que mal asunto. Aparentemente pintaba mal. Ninguno de los programas que había probado (todos los del Hirens 9.6) era capaz de listarme correctamente las particiones, y si las mostraba no las montaba. Al final, el que me ha salvado el culo ha sido testdisk junto con photorec. Un programilla de www.cgsecurity.com.

La mayoría de veces que he tenido problemas con discos duros, el salvador ha sido hdd regenerator. Un programilla que funciona con cualquier tipo de sistema de ficheros sin tenerlos en cuenta, y sin modificarlos

Almost 60% of all hard drives damaged with bad sectors have an incorrectly magnetized disk surface. We have developed an algorithm which is used to repair damaged disk surfaces. This technology is hardware independent, it supports many types of hard drives and repairs damage that even low-level disk formatting cannot repair. As a result, previously unreadable information will be restored. Because of the way the repair is made, the existing information on the disk drive will not be affected!

Después de los discos que me ha arreglado … un poco de publicidad se lo tiene merecida 0:).

Pero esta vez, después de días dejando este programa corriendo, aunque me recuperaba sectores seguía sin poder montar las particiones.

Mensajes típicos en GNU/Linux:

ga@ono-sendai:~$ mount -t ext3 /dev/sdd10 /media/cdrom0/
mount: wrong fs type, bad option, bad superblock on /dev/sdd10,
missing codepage or helper program, or other error
En algunos casos se encuentra información en syslog, pruebe
dmesg | tail o algo parecido

ga@ono-sendai:~$

Los superbloques guardan información vital del sistema de ficheros, disco duro (sectores, cabezas, etc), del sistema, etc. Si esta información se pierde, el módulo que gestiona tu tipo de sistema de ficheros no sabe qué hacer con la partición. Malo.

Pero no todo está perdido. Como medida de seguridad, ext2/3 guardan superbloques de seguridad que se pueden encontrar con el comando dumpe2fs:

ono-sendai:/home/ga# dumpe2fs /dev/sdd10|grep superblo
dumpe2fs 1.41.3 (12-Oct-2008)
Primario superbloque en 0, descriptores de grupo en 1-1
Respaldo superbloque en 32768, descriptores de grupo en 32769-32769
Respaldo superbloque en 98304, descriptores de grupo en 98305-98305
Respaldo superbloque en 163840, descriptores de grupo en 163841-163841
Respaldo superbloque en 229376, descriptores de grupo en 229377-229377
Respaldo superbloque en 294912, descriptores de grupo en 294913-294913
Respaldo superbloque en 819200, descriptores de grupo en 819201-819201
Respaldo superbloque en 884736, descriptores de grupo en 884737-884737
Respaldo superbloque en 1605632, descriptores de grupo en 1605633-1605633
ono-sendai:/home/ga#

Bien, ahora le podemos pasar al comando mount cualquiera de los primeros números que aparecen como parámetro:

ono-sendai:/home/ga# mount -t ext3 -o sb=32768 /dev/sdd10 /mnt/
mount: wrong fs type, bad option, bad superblock on /dev/sdd10,
missing codepage or helper program, or other error
En algunos casos se encuentra información en syslog, pruebe
dmesg | tail o algo parecido

ono-sendai:/home/ga#
ono-sendai:/home/ga# mount -t ext3 -o sb=98304 /dev/sdd10 /mnt/
ono-sendai:/home/ga#

Ya tenemos montada la partición por lo que podemos acceder a los datos. Pero el sistema no está arreglado, deberíamos pasarle el comando e2fsck para que encuentre, organice y elimine ficheros y directorios que estén mal. Cuidadín: Si tu disco o partición está muy mal, este comando probablemente no sea capaz de reconstruir tu árbol de directorios, por lo que guardará todo en el directorio lost&found.

¿Pero qué pasa si aún especificándole todos los superbloques de seguridad no monta la partición? Todavía tenemos 2 cartuchos para gastar: testdisk y photorec . Instalable desde Debian/Ubuntu.

testdisk es capaz de recuperar y arreglar particiones, recuperar y arreglar sectores de arranque de diferentes sistema de ficheros, etc. Mientras que photorec está diseñado para recuperar datos/ficheros de particiones, sin importarle el sistema de ficheros.

Al ser ambos programas de los mismos programadores, la interfaz es prácticamente idéntica y bastante intuitiva.

Primero hacemos una imagen de la partición que queramos manipular, con testdisk, para no trabajar directamente sobre ella. Ni ddrescue ni dd me leían más de 2KB de la partición cuando lo intenté a mano. Sin embargo testdisk no se quejó :)

Hay que entrar en el menú [ Advanced ] Filesystem Utils y elegir [Image Creation]

Una vez que tengamos la imagen, la abrimos con photorec, como si fuera un dispositivo.

El siguiente paso es decirle qué tipo de partición es la imagen. Si elegimos [none], photorec buscará las particiones que haya en la imagen para que elijamos una, o sino todo el disco.

Por defecto photorec buscará una larga lista de formato de ficheros conocidos. Si solo queremos buscar un tipo de fichero (por ejemplo ficheros GPG, JPEG, etc) solo tenemos que desmarcar los que no nos interesen, desde la opción [File Opt]

Le decimos el tipo de partición que creemos que puede ser, donde queremos que nos guarde lo que vaya recuperando y que empiece.

Una vez que tengamos los ficheros recuperados, es bastante probable que tengamos ficheros duplicados. Para eliminarlos y reducir espacio y tiempo de revisado, podemos usar los scripts que tienen en la web de www.cgsecurity.com

Muchas veces pasará (algunas otras no) que algunos ficheros los ha nombrado como ficheros de texto .txt, cuando realmente pueden ser por ejemplo claves GPG o código fuente. En estos casos se puede usar un simple comando de bash para detectar el tipo de fichero:

ga@ono-sendai:/tmp$ find /fitxategiak/backups/ -exec file {} \;|grep -i gpg
/fitxategiak/backups/recup_dir.46/f1639696.txt: PGP key security ring

Por último, hay que tener en cuenta también que puede que por ejemplo un fichero C lo haya partido en 2 ficheros distintos. En estos casos, habrá que buscar dentro de los ficheros por palabras clave. Un ejemplo para buscar un fichero de C++ que contiene la clase SLIDESHOW podría ser:

ga@ono-sendai:/tmp$ find /fitxategiak/backups/ -name ‘*.c’ -exec head -10 {} \;|grep -i slide
#ifndef BANDSLIDE_H
#define BANDSLIDE_H

Referencias
[0] testdisk – Programa para recuperar particiones y más cosas
[1] photorec – Programa para recuperar datos
[2] hdd regenerator – Programa para arreglar sectores físicos defectuosos
[3] Sistema de archivos
[4] Ext2 y Ext3

convert this post to pdf.
  1. 5 Responses to “Recuperando ficheros de discos duros dañados: bad superblock on /dev/sda”


  2. By xmanoel on Oct 25, 2009

    un saludo de un usuario de Mac y Windows que también está encantadísimo del TestDisc

  3. By ga on Oct 25, 2009

    Hola xmanoel :)

    foremost dicen que va muy bien también, aunque no lo he probado.

  4. By xmanoel on Oct 27, 2009

    Pues voy a probar el foremost. Porque aunque debería ser excepcional, tengo que recuperar datos de disco duros borrados por error cada 2 o 3 meses.

  5. By xmanoel on Oct 27, 2009

    De todas formas no se cual ha sido tu experiencia en recuperación de datos, pero en cuanto hay algo de fragmentación en el disco duro, la cosa se vuelve un pequeño desastre. Eso sí, en otros medios, como las memorias SD… creo que sí se podría recuperar casi todo.

  6. By ga on Oct 27, 2009

    La verdad es que con programas para recuperar datos, tengo poca experiencia.

    Aunque hace 1 año, sí que anduve programando una utilidad que debía borrar “de forma segura” los datos. Para ello me basé en este artículo:
    http://www.cs.auckland.ac.nz/~pgut001/pubs/secure_del.html

    Muy muy interesante.


Post a Comment