sábado, 15 de agosto de 2009

Restauración de particiones de unidades USB usando TestDisk

Mientras intentaba instalar alguna distro. poco exigente en recursos de RAM en mi viejo Notebook Presario 700, un error de visualización y tipeo (estaba trabajando sin ratón) me provocó la pérdida del formato de mi llave USB. Desde un error anterior similar, que me provocó perder varios gigas de información, había llevado cierta periodicidad de las copias de seguridad de esta llave (usando Partimage), pero lamentablemente había descuidado esta labor y el último backup accequible era de enero de este año. Desde esa fecha hasta ahora (varios meses), la cantidad de información que había sido agregada no era mucha, pero si bastante relevante (entre ellas un sitio completo del cual soy responsable).

Bueh, estuve revisando por Google sobre recuperación de particiones en pendrive usando Linux. No tenía la menor gana de instalar Winbugs para recuperar la tabla de particiones o los archivos. Luego de revisar varios blogs y páginas me encontré con la herramienta multiplataforma Testdisk, la cual está disponible en los repositorios de Ubuntu Jaunty (9.04). Posterior a varias horas (madrugué para esta labor) felizmente logré recuperar la tabla de particiones.

El resto del post es para explicar el procedimiento que realicé. Como recomendación (bien repetida, pero muy poco seguida) hagan copias de seguridad continuas de sus datos sensibles. Si no es un mal tecleado, puede ser un virus...

Primero les describiré el error que produjo este fallo. Luego haré una réplica de cómo fui aproximando a la solución del problema. Finalmente, redactaré la solución.

1. Se estaba usando un live-cd de System Rescue (distro. que se usa para rescatar sistemas, como su nombre lo indica, es decir, tiene herramientas de formateo, recuperación de datos, particiones, cifrado...). La estaba usando para formatear el disco duro de un Presario 700 y crear una tabla de particiones ad hoc para la nueva instalación de sistema operativo. El primer problema es que esta versión de System Rescue no me detecta bien el ratón, así que tuve que trabajar a puro atajo de teclado. En consola abrí Gparted (figura de la izquierda). El sistema tiene dos discos detectados: el disco duro (sda) y la llave usb (sdb). En la captura de pantalla se puede ver que en la zona superior derecha del programa se ubican las particiones (en la imagen aparece sda). La primera tarea pendiente era formatear sda, cuestión que hice. Sin embargo, en la pantalla me apareció otro disco sin formatear (sdb), y pensando que no había sido correctamente terminado el formateado anterior, puse borrar partición. A los instantes, supe que el tamaño era diferente (lamentablemente ambos discos estaban formateados usando fat32, lo cual hacía más fácil la confusión)...

2. Lo primero que hice fue buscar en Google alguna solución para recuperar particiones. Existía bastante información sobre la herramienta Testdisk, la cual además es multiplataforma. Empecé a leer en el sitio de la aplicación, el cual está traducido al español en buena parte. No parecía tan difícil, así que me animé a bajarla. En el caso de Ubuntu Jaunty fue bastante fácil, tan sólo teclear en consola "apt-get install testdisk". Ya instalada, la lancé.

Seguí las instrucciones clásicas (una buena guía en inglés está en el sitio oficial de la aplicación). Crear log, seleccionar disco a recuperar partición, elegir el tipo de la tabla de partición (Intel en mi caso) y Analize. Un primer error que detecté fue la siguiente línea luego del primer análisis "Partition sector doesn't have the endmark 0xAA55". Pienso que este error se debe a que no sólo borré una partición, sino la tabla de partición completa, por lo que el programa no es capaz de detectar en que punto se termina la partición. Luego elegí la realizar la búsqueda rápida ("Quick search") y luego la profunda ("Deeper search"). En este punto lo esperable y deseable es que salga una pantalla similar a esta, con una (o varias) partición marcada en verde (imagen de la derecha). En mi caso no aparecía ninguna partición. ¡Problema!

Luego de ello, seguí leyendo, buscando situaciones similares. En el apartado de "Ejemplos de recuperación" del sitio oficial de Testdisk planteaban que a veces existía un problema de geometría del disco. Cabezeras (heads), cilindros (cylinders) y sectors (sectores). Se supone que estos debían ser correctos y en caso de pérdida de la tabla de particiones, usualmente esta información era incorrecta. Se suponía que el programa señalaría lo que debía modificarse (ver imagen derecha y fijense en la hora... :P). En mi caso, debía modificar heads (de 255 a 16) y sectors (de 63 a 32). Esto se cambia en la sección geometry del menú posterior a la selección del tipo de tabla de partición. Fijense en seguir en ese orden sin cambiar ninguno de los otros valores, sino el disco queda de un tamaño distinto, pues los datos van acomodandose entre ellos.

Posteriormente, realicé un nuevo análisis (rápido y en profundidad) y, nuevamente, no llegué a la anhelada pantalla con línea verde. En este momento ya estaba bastante cansado. Se me ocurrió probar la técnica de recuperación con la llave, formateando nuevamente, ingresando un archivo y volviendo a borrar la tabla de partición. Antes de esta prueba tuve que realizar una copia clónica del pendrive. Para esto en Linux se usa el comando dd. (En concreto "dd if=origen of=destino". En el caso de mi llave fue "dd if=/dev/sdc of=/cualquier_directorio/nombrearchivo.img". Para restaurar la imagen se cambia el orden de las direcciones.) Seguí las instrucciones y logré restaurar la tabla de partición. :D Pero antes había un pequeño truco. Revise los datos de cabezas, sectores por pista y cilindros, por medio de Gparted luego de formatear con fat32. Los datos son los siguientes: cabezas (heads), 255; sectores por pista (sector for track), 63; cilindros (cylinders), 486. Al cambiar estos datos en la geometría del disco me recuperaba la partición. El dato clave era el de cilindros, en donde el programa me detectaba automáticamente 487.

En este punto estaba casi seguro de recuperar mi tabla de partición. Así que restauré la imagen clonada a mi llave, con lo que recuperé los datos sin poder ser visualizados. Ahora tenía, supuestamente, los datos para recuperar todo. Cuento corto: no funcionó. Pensé que podía deberse a que la tabla de partición era distinta a la que correspondía a los datos. Así que intenté recuperar mi backup de enero para poder recrear una tabla con una geometría parecida. No pude restaurar backup. Volví a formatear.

3. Luego de volver a formatear intenté nuevamente con Diskpart, sin grandes esperanzas (eran cerca de las 7 de la mañana). Cambié la geometría a la arriba mencionada. Hice búsqueda superficial y luego profunda. Y... ¡APARECIÓ LA LÍNEA VERDE! :D Bueh, luego restauré un par de elementos (opciones intuitivas en el menú) y listeé los archivos. Reconocí muchos de mis archivos. Puse escribir la tabla de partición (opción W) y al reiniciar el pendrive estaba todo como yo lo recordaba. :D!!

Y esa fue la solución. He pensado que la diferencia entre las dos últimos intentos está en la búsqueda profunda, que no recuerdo claramente haberla realizado la primera vez (con el sueño y el cansancio).

Eso sería.

Saludos

3 comentarios:

  1. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  2. hola, tengo el mismo problema que comentas pero no entiendo la parte de: "Se me ocurrió probar la técnica de recuperación con la llave, formateando nuevamente, ingresando un archivo y volviendo a borrar la tabla de partición.".... como haces eso?????..... La información que necesito recuperar es muy muy importante agradeceré tu rápida respuesta... Saludos desde Perú

    ResponderEliminar
  3. Hola
    He tenido un problema similar: el disco con una unica particion ilegible (raw) y ningun programa (easeus, pc inspector, hard drive inspector, 7.data recovery suite...) me lo arreglaba a pesar de tirarse 8h leyendo el disco y ser muy bonitos esteticamente ;)
    Algunos me daban el listado de ficheros pero al recuperarlos no se podian abrir...
    A punto de abandonar lei este blog sobre testpoint y decidi darle una ultima oportunidad...
    Me ha funcionado, me lo ha arreglado en un instante. En la lista de unidades me aparecian unos "disk \\.\PhysicalDrive0..." y luego como otra vez drive c:, drive d:... Inicialmente me fui al drive en cuestion y no encontraba ninguna particion... ni en el modo rapido ni en el otro (aunque sinceramente despues de tanto tiempo ya no tenia esperanza y lo deje terminar al deep search) Entre en el "disk" en vez de en el "drive" y ¡ta chan! ahi estaba mi particion en verde... Comprobe los ficheros, reescribi el codigo y tras apagar y encender (era un HD externo) estaba arreglado...
    ME quito el sombrero ante este Christophe GRENIER (el autor del programa)

    ResponderEliminar