Mi historia comienza de manera bastante simple. Tengo un servidor liviano, que ejecuta Arch Linux, que almacena la mayoría de sus datos en un RAID-1 compuesto por dos unidades SATA. Funcionó sin problemas durante aproximadamente 4 meses. Luego, de repente, comencé a recibir errores de lectura en una de las unidades. Siempre, los mensajes se parecían mucho a estos:
Apr 18 00:20:15 hope kernel: [307085.582035] ata5.01: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x0
Apr 18 00:20:15 hope kernel: [307085.582040] ata5.01: failed command: READ DMA EXT
Apr 18 00:20:15 hope kernel: [307085.582048] ata5.01: cmd 25/00:08:08:6a:34/00:00:27:00:00/f0 tag 0 dma 4096 in
Apr 18 00:20:15 hope kernel: [307085.582050] res 51/40:00:0c:6a:34/40:00:27:00:00/f0 Emask 0x9 (media error)
Apr 18 00:20:15 hope kernel: [307085.582053] ata5.01: status: { DRDY ERR }
Apr 18 00:20:15 hope kernel: [307085.582056] ata5.01: error: { UNC }
Apr 18 00:20:15 hope kernel: [307085.621301] ata5.00: configured for UDMA/133
Apr 18 00:20:15 hope kernel: [307085.640972] ata5.01: configured for UDMA/133
Apr 18 00:20:15 hope kernel: [307085.640986] sd 4:0:1:0: [sdd] Unhandled sense code
Apr 18 00:20:15 hope kernel: [307085.640989] sd 4:0:1:0: [sdd] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
Apr 18 00:20:15 hope kernel: [307085.640993] sd 4:0:1:0: [sdd] Sense Key : Medium Error [current] [descriptor]
Apr 18 00:20:15 hope kernel: [307085.640998] Descriptor sense data with sense descriptors (in hex):
Apr 18 00:20:15 hope kernel: [307085.641001] 72 03 11 04 00 00 00 0c 00 0a 80 00 00 00 00 00
Apr 18 00:20:15 hope kernel: [307085.641010] 27 34 6a 0c
Apr 18 00:20:15 hope kernel: [307085.641020] sd 4:0:1:0: [sdd] Add. Sense: Unrecovered read error - auto reallocate failed
Apr 18 00:20:15 hope kernel: [307085.641023] sd 4:0:1:0: [sdd] CDB: Read(10): 28 00 27 34 6a 08 00 00 08 00
Apr 18 00:20:15 hope kernel: [307085.641027] end_request: I/O error, dev sdd, sector 657746444
Apr 18 00:20:15 hope kernel: [307085.641035] ata5: EH complete
Apr 18 00:20:15 hope kernel: [307085.641672] md/raid1:md16: read error corrected (8 sectors at 657744392 on sdd1)
Apr 18 00:20:17 hope kernel: [307087.505082] md/raid1:md16: redirecting sector 657742336 to other mirror: sdd1
Cada error se quejó de un número de sector diferente y estuvo acompañado de un retraso de varios segundos para que el usuario (yo) accediera al disco.
Verifiqué la salida de smartctl y vi la siguiente salida (partes irrelevantes recortadas):
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
1 Raw_Read_Error_Rate 0x002f 193 193 051 Pre-fail Always - 1606
5 Reallocated_Sector_Ct 0x0033 194 194 140 Pre-fail Always - 0
196 Reallocated_Event_Count 0x0032 162 162 000 Old_age Always - 0
197 Current_Pending_Sector 0x0032 200 200 000 Old_age Always - 51
Mirando hacia atrás en los registros, descubrí que los errores habían estado ocurriendo durante unos días, principalmente durante las copias de seguridad, pero también con frecuencia durante el uso muy ligero (es decir, cada 5 veces que intenté guardar un archivo de texto). Llegué a la conclusión de que mi disco se estaba muriendo, que el RAID-1 lo estaba manejando adecuadamente y que era hora de pedir un disco de reemplazo. Pedí un nuevo disco.
Para mi sorpresa, un día después, los errores ... se detuvieron. No había hecho nada para arreglarlos. No había reiniciado, no había desconectado el disco, nada. Pero los errores simplemente se detuvieron.
En ese momento, curioso por ver si los sectores defectuosos estaban ahora en porciones inactivas del disco, saqué el disco del RAID, lo volví a colocar en el RAID y le permití completar la resincronización completa subsiguiente. La resincronización se completó sin errores, 9 horas más tarde (los discos de 2 TB tardan un poco).
Además, la salida de smartctl ha cambiado un poco, de la siguiente manera:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
1 Raw_Read_Error_Rate 0x002f 193 193 051 Pre-fail Always - 1606
5 Reallocated_Sector_Ct 0x0033 194 194 140 Pre-fail Always - 43
196 Reallocated_Event_Count 0x0032 162 162 000 Old_age Always - 38
197 Current_Pending_Sector 0x0032 200 200 000 Old_age Always - 0
Entonces, la parte de esto que me está extrañando es, por supuesto, "¿Desde cuándo se arreglan los discos malos?"
Supongo que es posible que un área muy pequeña de la unidad se estropeó espontáneamente, y que la unidad simplemente tomó 3 días (!) Antes de que su código de reasignación de sector se activara y mapeó algunos sectores de repuesto sobre un área defectuosa del disco ... Pero no puedo decir que haya visto que eso suceda.
¿Alguien más ha visto este tipo de comportamiento? Si es así, ¿cuál fue su experiencia con el viaje después? ¿Sucedió de nuevo? ¿El disco finalmente falló por completo? ¿O fue solo una falla inexplicable que permaneció sin explicación?
En mi caso, ya tengo la unidad de reemplazo (obtenida bajo garantía), por lo que probablemente solo la reemplace de todos modos. Pero me encantaría saber si lo diagnostiqué mal de alguna manera. Si ayuda, tengo una salida 'smartctl -a' completa de cuando estaba ocurriendo el problema. Es un poco largo, así que no lo publiqué aquí.