Minha história começa de maneira bastante simples. Eu tenho um servidor leve, executando o Arch Linux, que armazena a maioria dos dados em um RAID-1 composto por duas unidades SATA. Ele estava funcionando sem problemas por cerca de 4 meses. Então, de repente, comecei a receber erros de leitura em uma das unidades. Sempre, as mensagens se pareciam muito com estas:
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 erro reclamou de um número de setor diferente e foi acompanhado por um atraso de vários segundos para o usuário (eu) acessando o disco.
Verifiquei a saída do smartctl e vi a seguinte saída (peças irrelevantes cortadas):
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
Olhando para trás nos logs, descobri que os erros já estavam ocorrendo há alguns dias, principalmente durante backups, mas também frequentemente durante um uso muito leve (ou seja, a cada 5 vezes que eu tentava salvar um arquivo de texto). Concluí que meu disco estava morrendo, que o RAID-1 estava manipulando-o adequadamente e que estava na hora de solicitar um disco de substituição. Eu pedi um novo disco.
Para minha surpresa, um dia depois, os erros ... pararam. Eu não fiz nada para consertá-los. Eu não tinha reiniciado, não tinha colocado a unidade offline, nada. Mas os erros simplesmente pararam.
Nesse momento, curioso para ver se os setores defeituosos estavam apenas em partes ociosas do disco agora, tirei o disco do RAID, coloquei-o novamente no RAID e permiti que ele concluísse a ressincronização completa subsequente. A ressincronização foi concluída sem erros, 9 horas depois (os discos de 2 TB demoram um pouco).
Além disso, a saída do smartctl mudou um pouco, da seguinte maneira:
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
Portanto, a parte disso que me incomoda é, é claro, "desde quando os discos ruins se consertam?"
Suponho que seja possível que uma área muito pequena da unidade tenha espontaneamente danificado e que a unidade tenha levado apenas três dias (!) Antes que seu código de realocação do setor seja ativado e mapeie alguns setores sobressalentes sobre uma área defeituosa do disco ... Mas não posso dizer que já vi isso acontecer.
Alguém mais viu esse tipo de comportamento? Em caso afirmativo, qual foi sua experiência com a unidade depois? Isso aconteceu de novo? O disco finalmente falhou completamente? Ou foi apenas uma falha inexplicável que permaneceu inexplicável?
No meu caso, eu já tenho a unidade de substituição (obtida na garantia), então provavelmente substituirei a unidade de qualquer maneira. Mas eu adoraria saber se diagnosticou isso de alguma forma. Se ajudar, tenho uma saída 'smartctl -a' completa a partir de quando o problema estava acontecendo. É um pouco longo, então eu não postei aqui.