Cuando una verificación SMART en un disco informa un sector defectuoso, es importante poder identificar el archivo que tiene el sector defectuoso y restaurarlo desde las copias de seguridad. A continuación, muestro cómo hice esto para mi servidor Linux / ext3 VMWARE, pero ¿alguien sabe si esto se puede hacer para Windows / NTFS?
Así es como lo hice para Linux / ext3: primero le pedí a la unidad que escaneara la superficie del hardware (por debajo del nivel del sistema operativo, con los circuitos SMART en la unidad):
vserver:~# smartctl -t long /dev/sdc
Miré los resultados:
vserver:~# smartctl -a /dev/sdc
...
196 Reallocated_Event_Count 0x0032 100 100 000 Old_age Always - 1
197 Current_Pending_Sector 0x0012 100 100 000 Old_age Always - 9
...
Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error
# 1 Extended offline Completed: read failure 90% 27679 591363172
Entonces, un sector ya estaba marcado como malo, 9 fueron marcados para ser reemplazados desde el espacio del sector "provisional". Más importante aún, la primera dirección de bloque lógico (LBA) que es ilegible, fue 591363172.
Encontré la partición (y el desplazamiento dentro de ella) que este número "tradujo" a:
vserver:~# fdisk -lu /dev/sdc
Device Boot Start End Blocks Id System
/dev/sdc1 32 976773119 488386544 83 Linux
La partición comenzó en el sector 32. Entonces, el sector malo fue ...
vserver:~# bc -l
591363172-32+1
591363141
... en un desplazamiento de 591363141 sectores desde el comienzo de la partición.
Ahora podría encontrar qué archivo fue "alojado":
vserver:~# tune2fs -l /dev/sdc1 | grep Block\ size
Block size: 4096
El tamaño del bloque de este sistema de archivos EXT3 fue de 4096 bytes, por lo que el sector defectuoso destruyó este bloque en el sistema de archivos:
vserver:~# bc -l
591363141*512/4096
73920392.62500000000000000000
Y el número de bloque (73920392) correspondía a este archivo:
vserver:~# debugfs
debugfs 1.41.3 (12-Oct-2008)
debugfs: open /dev/sdc1
testb 73920392
debugfs: testb 73920392
Block 73920392 marked in use
debugfs: icheck 73920392
Block Inode number
73920392 18472967
debugfs: ncheck 18472967
Inode Pathname
18472967 /path/to/filewithbadsector
Y restauré ese archivo de mis copias de seguridad.
¿Existe un procedimiento equivalente que pueda seguir para Windows / NTFS?
dd
. Esto obligará a la unidad a repararla o reasignarla.