Averiguar qué ficheros se encuentran en bloques de disco defectuosos con NTFS
Herramientas utilizadas.
- ddrescue para mostrar las zonas del disco donde hay sectores defectuosos.
- ntfscluster para consultar las tablas MFT para saber qué ficheros pertenecen a esos sectores defectuoso.
Conceptos básicos a tener en cuenta.
- Sector: Bloque de Hardware. La cantidad mínima de datos accesibles en un dispositivo.
- Cluster / Bloque: Se refiere a la cantidad de datos. Un bloque se describe por su posición inicial y su tamaño. Su posición final se define por la posición de partida + su tamaño. Es el grupo de Sectores consecutivos a leer o escribir de una sola pasada. Un clúster (o unidad de asignación según la terminología de Microsoft) es un conjunto contiguo de sectores que componen la unidad más pequeña de almacenamiento de un disco. Los archivos se almacenan en uno o varios clústeres, dependiendo de su tamaño de unidad de asignación. Sin embargo, si el archivo es más pequeño que el tamaño de un clúster, éste lo ocupa completo.
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