Averiguar qué ficheros se encuentran en bloques de disco defectuosos con NTFS

Herramientas utilizadas.

Conceptos básicos a tener en cuenta.

Clúster = Bloque

Conocer los sectores defectuosos.

Generar una imagen del disco saltándose los sectores defectuosos y anotándolos en el fichero logfile.

ddrescue -v -d -r 3 /dev/sdd3 imagen_disco.img logfile 

Ejemplo del contenido del fichero logfile.

# Rescue Logfile. Created by GNU ddrescue version 1.16
# Command line: ddrescue -d /dev/sdd3 imagen_disco.img logfile
# current_pos  current_status
0x02499600     +
#      pos        size  status
0x00000000  0x02499800  +
0x02499800  0x00000200  -
0x02499A00  0x9142566600  +

Bloque dañado. (Símbolo -)

0x02499800  0x00000200  -

Pasamos de hexadecimal a decimal.

echo $((16#02499800))
38377472

Consultamos el tamaño del clúster del disco / imagen NTFS.

ntfsinfo -m -f imagen_disco.img
....
Cluster Size: 4096
Index Block Size: 4096
...

Dividimos el valor de posición inicial de bloque entre el tamaño del clúster para averiguar el número de cluster que pertenece a ese bloque corrupto.

38377472 / 4096 = 9369

¿Por qué se divide? Supongamos que el disco es una carretera, la posición de ese bloque defectuoso vendría dada en metros, en el metro número 38377472 la carretera tiene un problema. Pero queremos saber a qué kilómetro (clúster) pertenece ese tramo, por lo tanto se debe dividir.

Mostrar el fichero que se encuentra en dicho clúster.

ntfscluster -f -c 9369 sdd3.img 2>> /dev/null
Searching for cluster 9369
Inode 89381 /Windows/System32/atidxx64.dll/$DATA

Fuente: http://radagast.ca/linux/how-to-find-the-ntfs-filename-associated-with-a-bad-block-using-linux.html