No se pueden escribir ceros en sectores defectuosos / Disco duro sin contar sectores reasignados

10

Tengo una unidad que informa que los sectores pendientes actuales son "45". He usado bloques defectuosos para identificar los sectores y he estado tratando de escribirles ceros con dd .

Por lo que entiendo, cuando intento escribir datos directamente en los sectores defectuosos, debería desencadenar una reasignación, reduciendo los sectores pendientes actuales en uno y aumentando el recuento de sectores reasignados.

Sin embargo, en este disco, los valores brutos Reallocated_Sector_Ct y Reallocated_Event_Count son 0, y dd falla con errores de E / S cuando intento escribir ceros en los sectores defectuosos. dd funciona bien, sin embargo, cuando escribo a un buen sector.

# dd if=/dev/zero of=/dev/sdb bs=512 count=1 seek=217152
dd: error writing ‘/dev/sdb’: Input/output error

¿Significa esto que mi unidad, de alguna manera, no tiene sectores libres para ser reasignados? ¿Es mi unidad en general una persona terrible? (La unidad no es realmente mía, estoy ayudando a un amigo. Es posible que hayan obtenido una unidad barata o algo así).

En caso de que sea relevante, aquí está la salida de smartctl -i :

Model Family:     Western Digital Caviar Green (AF)
Device Model:     WDC WD15EARS-00Z5B1
Serial Number:    WD-WMAVU3027748
LU WWN Device Id: 5 0014ee 25998d213
Firmware Version: 80.00A80
User Capacity:    1,500,301,910,016 bytes [1.50 TB]
Sector Size:      512 bytes logical/physical
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   ATA8-ACS (minor revision not indicated)
SATA Version is:  SATA 2.6, 3.0 Gb/s
Local Time is:    Fri Oct 18 17:47:29 2013 CDT
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

ACTUALIZACIÓN:
me he ejecutado shreden el disco, lo que ha provocado que Current_Pending_Sector vaya a cero. Sin embargo, Reallocated_Sector_Ct y Reallocated_Event_Count siguen siendo cero, y dd ahora puede escribir datos en los sectores que antes no podía. Esto me lleva a varias otras preguntas:

  • ¿Por qué el disco no recupera las reasignaciones? Supongo que la reasignación se realizó ya que ahora puedo escribir datos directamente en el sector y no podía antes.

  • ¿Por qué triturar causó la reasignación y no dd? ¿El hecho de que shred escribe datos aleatorios en lugar de solo ceros hace la diferencia?

MetaNova
fuente
¿Cómo son los otros valores SMART? ¿Es Uncorrectable Sector Countmás que cero?
Synetech
Offline_Uncorrectable, que supongo que es lo mismo, tiene un valor bruto de 25.
MetaNova
Sí, lo es, y parece que la unidad está en mal estado. Puede verificar los valores en esta tabla , prestando especial atención a las filas rojas (valores críticos para la salud). La mejor opción es copiar (no mover) todo lo valioso / insustituible a otro lugar, reiniciar para darle un ciclo de encendido y, si aún funciona, darle una buena limpieza (preferiblemente con sus propias herramientas dedicadas y dejarlo a un lado como almacenamiento
adicional
Gracias por su respuesta. Mi pregunta principal probablemente debería ser por qué no puede reasignar esos sectores. ¿No debería simplemente detectar que los sectores son malos, evitarlos al vacío, reasignarlos y seguir adelante? No me preocupan los datos del disco, ya que hace tiempo que se han limpiado. Mi amigo no está ansioso por tener un pisapapeles de 1.5TB si puede evitarlo.
MetaNova
Eso parece ser lo que se puede esperar, pero podría ser que tiene una mala cabeza. Si es así, tratar de leer la unidad funcionará hasta que intente acceder al plato que tiene una cabeza defectuosa, entonces obtendrá un montón de errores de lectura porque sin un cabezal para leer, todo el plato es inaccesible. Por supuesto, dice que el sector 45 es malo, lo que podría deberse a que ya se ha reasignado, pero el SMART no se actualizó. La garantía expiró hace unos meses, pero puede intentar enviarles un correo electrónico y tal vez hagan un reemplazo de cortesía.
Synetech

Respuestas:

9

La unidad WD15EARS (y la mayoría de las unidades producidas recientemente) usa el formato avanzado , lo que significa que el tamaño real del sector físico de esta unidad es de 4 KiB, y el tamaño tradicional del sector de 512 bytes simplemente se emula. Debido a esto, si un solo sector físico de 4 KiB falla, los 8 sectores emulados de 512 bytes correspondientes se vuelven ilegibles a la vez.

(La Sector Size: 512 bytes logical/physicalsalida de smartctlno es correcta, porque algunas unidades WD15EARS informan que el tamaño del sector físico es incorrecto  ; aparentemente, su unidad tiene una versión de firmware que no funciona en ese sentido).

Además, cuando se escribe un solo sector emulado de 512 bytes, la unidad de formato avanzado realmente necesita leer el sector físico completo de 4 KiB, cambiar la parte correspondiente de 512 bytes y luego escribir todo el sector físico en los medios. Si los medios son buenos, esta operación de lectura-modificación-escritura solo causa una desaceleración significativa en comparación con una unidad con sectores físicos reales de 512 bytes. Sin embargo, si el sector físico de 4 KiB es malo y no se puede leer, cualquier operación de escritura que no reescriba el sector por completo fallará. Debido a esto, no puede forzar la reasignación de sectores en tales unidades ddcon bs=512 count=1 - debe usar al menos bs=512 count=8y asegurarse de que el número de sector enseek= la opción es un múltiplo de 8. (Esto supone que el puente "Compatible con Windows XP" no está instalado; de lo contrario, también se debe tener en cuenta el desplazamiento de alineación agregado por este puente).

Otra razón por la que ddpuede fallar el forzar la reasignación es que, de manera predeterminada, Linux usa un caché en la capa de bloque para acceder a los dispositivos de bloque, y esto puede causar operaciones de lectura-modificación-escritura en el software, que también fallarían cuando se encuentre un sector ilegible. Puede agregar la oflag=directopción para omitir esta caché para el dispositivo especificado por of=...(también existe la iflag=directopción, que se aplica al dispositivo de entrada).

Sergey Vlasov
fuente
Gracias, gracias, gracias, esto fue muy útil. Leí la etiqueta en la unidad y dice "formato avanzado". Sé lo que eso significa ahora ... ¿Tienes alguna idea, sin embargo, sobre la unidad que no informa de ningún sector reasignado?
MetaNova
1
Los "sectores pendientes actuales" no son necesariamente sectores defectuosos, el disco simplemente tuvo algunos problemas para leerlo antes en sus comprobaciones inactivas, posiblemente debido a que no ha escrito allí en mucho tiempo y los datos comienzan a desvanecerse (es decir, debilitamiento del campo magnético ) Escribir nuevos datos en ese sector actualiza los datos en ese sector con nuevos datos que están fuertemente formados en el disco. Por lo tanto, si escribe en un sector pendiente, el disco supone que está bien ahora. Debería intentar leer los datos de esos sectores para confirmar que son estables.
BeowulfNode42
para aquellas personas que no se preocupan por ningún dato en el disco y no quieren encontrar la lista exacta de sectores o que las matemáticas de recuento de sectores solo dd todo el disco con un tamaño de bloque de un múltiplo de 4KiB, como 16MiB. Luego use un tamaño de bloque de 4KiB para la última parte del disco que sea más pequeño que el tamaño de bloque elegido previamente.
BeowulfNode42
0

Tuve que hacer esto recientemente y descubrí que ejecutar shred en todo el disco funcionó muy bien. Si bien la destrucción es inútil para su propósito previsto, excepto en disquetes, hace exactamente lo que se requiere para que la autocuración se ejecute en bloques defectuosos.

Emil
fuente