Minha história começa com simplicidade. Eu tenho um servidor leve, executando o Arch Linux, que armazena a maioria dos seus dados em um RAID-1 composto de 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 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) acessar o disco.
Eu verifiquei a saída 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 realmente estavam acontecendo há alguns dias, principalmente durante os backups, mas também frequentemente durante o uso muito leve (o que significa que a cada cinco tentativas eu tentei salvar um arquivo de texto). Eu concluí que meu disco estava morrendo, que o RAID-1 estava manipulando-o apropriadamente e que era hora de pedir 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 tomado o drive off-line, nada. Mas os erros acabaram de parar.
Nesse ponto, curioso para ver se os setores defeituosos estavam apenas em partes ociosas do disco agora, tirei o disco do RAID, coloquei-o de volta no RAID e permiti que ele concluísse a ressincronização completa resultante. A ressincronização foi concluída sem nenhum erro, 9 horas depois (os discos de 2 TB demoram um pouco).
Além disso, a saída smartctl mudou um pouco, da seguinte forma:
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
Então, a parte disso que está me incomodando é, claro, "Desde quando os discos ruins se consertam?"
Suponho que é possível que uma área muito pequena do drive tenha sido espontâneamente ruim e que o drive tenha levado 3 dias (!) antes de seu código de realocação do setor ser acionado e mapeado alguns setores sobressalentes em uma área ruim do disco ... Mas não posso dizer que já vi isso acontecer.
Alguém mais viu esse tipo de comportamento? Se sim, qual foi sua experiência com o disco depois? Isso aconteceu de novo? O disco eventualmente 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 mesmo assim. Mas eu adoraria saber se eu diagnosticasse isso de alguma forma. Se isso ajudar, eu tenho a saída 'smartctl -a' completa de quando o problema estava acontecendo. É um pouco longo, então não postei aqui.