• Compra una licencia de Windows 10/11 (10€) u Office (18€) al mejor precio u Office al mejor precio. Entra en este post con las ofertas
  • ¡Bienvenid@! Recuerda que para comentar en el foro de El Chapuzas Informático necesitas registrar tu cuenta, tardarás menos de 2 minutos y te dará valiosa información además de ayudarte en lo que necesites o pasar un rato agradable con nosotros.

Recuperando toda la información posible de un disco con errores físicos

Annubis

Capitaaaan cavernicolaaaa
Registrado
2 Sep 2013
Mensajes
9.558
Puntos
113
Bueno, debido a que le estoy haciendo una recuperación de datos a un usuario del foro que vive cerca de mí, he decidido compartir con vosotros el método usado, para que sepáis hacerlo como los "pros" xD El disco estaba muy, pero que muy jodido, ya que se le había dado un golpe importante. Desde Windows no dejaba acceder a alguna de las particiones, dando errores del tipo "El parámetro no es correcto" o de "Redundancia cíclica". Desde Linux la cosa no pintaba mucho mejor, ya que en el log de sistema, aparecían errores de entrada/salida cada pocos segundos. Así que me puse manos a la obra, para hacer una imagen completa del disco con ddrescue y a partir de ahí, recuperar los datos.

Para hacer la imagen utilicé el siguiente comando:

Código:
ddrescue -A --no-scrape /dev/sdX imagen.img imagen.log

Después de dos días haciendo dicha imagen (el disco era de 320GB y como dije antes, estaba realmente jodido), obtuve una imagen de ~300GB con los datos en bruto. Luego me dispuse a comprobar qué había dentro de dicha imagen con el comando mmls:

Código:
# mmls imagen.img
DOS Partition Table
Offset Sector: 0
Units are in 512-byte sectors

     Slot    Start        End          Length       Description
00:  Meta    0000000000   0000000000   0000000001   Primary Table (#0)
01:  -----   0000000000   0000002047   0000002048   Unallocated
02:  00:00   0000002048   0020482047   0020480000   Win95 FAT32 (0x0b)
03:  00:01   0020482048   0322828287   0302346240   NTFS (0x07)
04:  00:02   0322828288   0625139711   0302311424   NTFS (0x07)
05:  -----   0625139712   0625142447   0000002736   Unallocated

De ahí podemos ver que hay 1 tabla de particiones, 1 partición en FAT32 (de ~10GB) y 2 particiones NTFS (de ~150GB) y espacio sin asignar, así que nos disponemos a extraerlas de la imagen original para poder operar sobre ellas más cómodamente. Para ello usamos el comando dd y los parámetros adecuados:

Código:
dd if=imagen.img bs=512 skip=2048 count=20480000 of=particion1.img

Como véis, con el parámetro bs se le dice el tamaño del sector que usa el disco, con skip se le dice en qué sector debe empezar leer y con count cuántos sectores debe guardar, los parámetros if y of son los ficheros de entrada y de salida. Después hacemos lo mismo con las otras 2 particiones.

Ahora montamos las imágenes resultantes como si de ISOs se tratar para poder acceder a ellas como si fueran discos normales:

Código:
mount -o ro,loop  particion1.img /mnt/imagen/

Lo montamos con el modificador ro para que se monte en modo sólo lectura y así prevenirnos para en caso de cargarla no se borre nada xD

Actualización: He encontrado otro método para montar las particiones que, la verdad, es más cómodo y rápido, pues nos ahorra el paso de extraer las particiones del disco. Se trata del comando kpartx, que lo que hace es leer una tabla de particiones y mapear como dispositivos en el sistema las particiones contenidas en ella. Para más información, man kpartx:

Código:
# kpartx -a -v imagen.img 
add map loop0p1 (252:1): 0 20480000 linear /dev/loop0 2048
add map loop0p2 (252:2): 0 302346240 linear /dev/loop0 20482048
add map loop0p3 (252:3): 0 302311424 linear /dev/loop0 322828288

Con el modificador -a le dicemos que añada las particiones que encuentre como nuevos dispositivos al sistema, y con -v le decimos que nos muestre la información detallada de lo que haga. Automáticamente nos ha añadido las 3 particiones como nuevos dispositivos. Ahora sólo nos queda montarlas:

Código:
mount /dev/mapper/loop0p1 /mnt/imagen/ -o ro

Y... ¡se hizo la luz!

Código:
# ls -lh /mnt/imagen/
total 233M
-rwxr-xr-x 1 root root 232M oct  1  2008 ACERBOOT.ISO*
drwxr-xr-x 3 root root 8,0K feb 13  2008 boot/
-rwxr-xr-x 1 root root 326K ene 18  2008 bootmgr*
drwxr-xr-x 4 root root 8,0K feb 13  2008 d2d/
drwxr-xr-x 3 root root 8,0K feb 13  2008 EFI/
drwxr-xr-x 2 root root 8,0K nov 14  2008 FACTORY/
-rwxr-xr-x 1 root root  142 nov 14  2008 ImageInfo.dat*
drwxr-xr-x 2 root root 8,0K feb 13  2008 logs/
drwxr-xr-x 2 root root 8,0K oct 10  2010 MSI10906.tmp/
-rwxr-xr-x 1 root root 2,3K oct  6  2008 NAPP.DAT*
-rwxr-xr-x 1 root root   31 nov 14  2008 NewEnv.bat*
-rwxr-xr-x 1 root root   11 jul  7  2005 p1.dat*
-rwxr-xr-x 1 root root  286 nov 16  2007 PRED2D.BAT*
-rwxr-xr-x 1 root root 1,6K mar 21  2008 PRENAPP.BAT*
-rwxr-xr-x 1 root root  333 nov 14  2008 RCD.DAT*
-rwxr-xr-x 1 root root 1,6K feb 22  2008 RENDSI.BAT*
-rwxr-xr-x 1 root root  230 nov 23  2009 Restore.dat*
-rwxr-xr-x 1 root root   37 nov 14  2008 SetActivePT.txt*
drwxr-xr-x 2 root root 8,0K feb 13  2008 sources/
-rwxr-xr-x 1 root root   69 oct 20  2008 SWCD.DAT*
-rwxr-xr-x 1 root root  101 oct 20  2008 SYSTEMCD.DAT*
-rwxr-xr-x 1 root root 188K ene 14  2008 WISINIBT.EXE*
drwxr-xr-x 2 root root 8,0K nov 14  2008 WisTools/
drwxr-xr-x 2 root root 8,0K nov 14  2008 X64/
drwxr-xr-x 2 root root 8,0K nov 14  2008 X86/

Vemos el contenido de la partición, que no es más que la partición de recuperación del portátil al que pertencecía el disco escacharrado. Ahora sólo nos queda copiar los datos que queramos salvar a donde queramos y seguir con el resto de imágenes.

Actualización 2: Como una de las particiones parecía estar realmente dañada, al usar kpartx y luego querer montar la imagen, daba un error de que no reconocía el sistema de ficheros de dicha partición, así que pensando en otro método para poder acceder a dicha información, se me ocurrió usar el propio chkdsk de Windows para que comprobara la integridad del disco y, en caso de ser necesario que reparara lo que pudiera. Como no tengo ningún Windows instalado "físicamente" en ninguna de mis máquinas y usé VirtualBox para ejecutar el chkdsk, me tocó "convertir" la imagen "en bruto" a un formato reconocible por VirtalBox, por ejemplo VDI, aunque valen todos los formatos de discos virtuales soportados por éste software de virtualización:

Código:
VBoxManage convertfromraw --format VDI imagen.img imagen.vdi

Después de ello, vamos a la configuración de la máquina virtual que vayamos a usar para la operación y añadimos la imagen creada por el anterior comando, como un disco secundario. Al iniciar la máquina virtual, veremos tantas unidades como particiones tuviera el disco duro fallecido. En el caso que nos ocupa, eran 3: 2 accesibles y una inaccesible, que concretamente nos pedía formatear antes de acceder a ella (cosa que no queríamos y no hay que hacer bajo ningún concepto xD). Así que abrimos una línea de comandos de Windows como administrador y ejecutamos la orden:

Código:
chkdsk /r x:

Aquí hará una comprobación completa del sistema de ficheros y reparará todo lo que pueda repararse. Cuando termine, ya podremos acceder a dicha partición normalmente y sacar (si queremos) toda la información que nos de la gana. Ahora sí, hemos terminado :fiesta:

Ale chapuzas, hasta la próxima. Recordad hacer éstas cosas siempre con la supervisión de un adulto.

Fuente: tener los huevos pelados de tanto hacerlo :ECI:
 
Última edición:
Juer, buen curro te has pegado para salvar los datos! Grande!
 
No es tanto. Realmente "mi curro" es lanzar los comandos que ves. El resto es esperar a que termine. De tanto hacerlo es hasta mecánico ya. Ni tengo que buscarlos xD
 
No es tanto. Realmente "mi curro" es lanzar los comandos que ves. El resto es esperar a que termine. De tanto hacerlo es hasta mecánico ya. Ni tengo que buscarlos xD

Pero no todo el mundo conoce tan a fondo esos comendos, o ni siquiera los conoce.

PD: Esto molaría más como un tutorial/guía para los que no han pisado Linux en su vida :p
 
Buen aporte annubis, esto vendrá bien a bastante gente. Por curiosidad, ¿con el testdisk no se lograría también lo mismo, o no es tan fiable para recuperar datos?
 
Testdisk te recupera particiones en caso de que no se puedan ver, no recupera datos. Eso lo hace Photorec. Si el disco está jodido no puede hacer mucho. La idea de ésto es sacar la imagen cuanto antes, para que nos de igual que el disco muera y trabajar sobre la imagen (o sobre copias de la misma). Además de ir mucho más rápido, tenemos la seguridad de que el disco no morirá en el proceso (cosa que sí puede pasar con testdisk y photorec puesto que trabajamos directamente sobre el dispositivo. Y por otro lado, photorec no recupera la estructura de directorios ni los nombres de fichero, si no que busca las definiciones de los ficheros en bruto.

Iván, en los manuales que yo suelo hacer no lo doy todo mascadito. Siempre dejo algo para que el lector "piense" un poco xD
 
Última edición:
Gracias por la aclaración.
 
Iván, en los manuales que yo suelo hacer no lo doy todo mascadito. Siempre dejo algo para que el lector "piense" un poco xD

Yo pensaba que nos darías el "Annubis Disk Regenerator Turbo Power 4000" :(
 
¡D'oh! Tengo problemas con una de las particiones, nunca me había pasado. Actualizaré con el resultado :)
 
Bueno, he usado otro método para montar las particiones que, reconozco que nunca había usado. Ya sabéis... Si algo funciona, ¡no lo toques! xD

Actualizo el post principal con la nueva información.
 
Actualizo el post principal con el último paso que realicé en éste caso para poder acceder a toda la información.
 
Y la chincheta? Esto no puede estar por ahí perdido
 
Ya está :guiño:
 
Oh, gracias ^^
 
Gran trabajo. Como dice Ivan los que no pisan windows no se saben esos comandos ni de coña.

Yo volvere a linux cuando SteamOs madure. Una vez tengan el SO final me metere manos a la hobra haber si puedo sacar un UE capaz de agregar juegos que no sean de steam ya que al menos hoy dia en su fase beta es inpensable. Los programas como PLayOn Linux tienen muchos bugs y me daba pereza trabajarlos.

Si consigo mi sueño que es correr todos los juegos bajo linux con el mismo o mejor rendimiento que bajo windows ya no me moveran de linux.

Se que sera un trabajo de meses o incluso años pero creo que es un proyecto que merece la pena.

Pero... ¿steamOS no es una distro que solo sirve para jugar? O se pueden hacer más cosas?
 
SteamOS es una Debian tuneada, con sus mismos repositorios

Trocotroleado con mi Movilote
 
Buenísimo aporte.

Yo no conozco mucho Linux aunque lo uso alguna vez y siempre viene bien conocer cosas como esta.

Grande Annubis!!

Enviado desde mi OnePlus One vía Tapatalk 4
 
Madre mia, que crack Annubis!

Muchas gracias por el tuto, le pondre una chincheta y lo guardare bien, nunca se sabe!

Algun dia me pondre con linux... xD

Saludos!
 
Buena info annubis muchas gracias
 
Arriba