Eu tenho um servidor de arquivos FreeNAS 8.3 com o ZFS executando quatro discos de 3 TB no raidz.
camcontrol devlist:
at scbus0 target 0 lun 0 (pass0,ada0)
at scbus1 target 0 lun 0 (pass1,ada1)
at scbus2 target 0 lun 0 (pass2,ada2)
at scbus3 target 0 lun 0 (pass3,ada3)
at scbus6 target 0 lun 0 (pass4,da0)
Na semana passada, notei que dois dos quatro discos estavam começando a falhar:
freenas smartd[2241]: Device: /dev/ada0, 24 Currently unreadable (pending) sectors
freenas smartd[2241]: Device: /dev/ada0, 24 Offline uncorrectable sectors
freenas smartd[2241]: Device: /dev/ada2, 24 Currently unreadable (pending) sectors
freenas smartd[2241]: Device: /dev/ada2, 24 Offline uncorrectable sectors
zpool status -v não mostrou nenhum erro no entanto. Eu não sou tão familiarizado com o ZFS, e isso foi configurado por outro administrador. Por alguma razão, fiquei com a impressão de que poderia simplesmente substituir as unidades com falha, uma após a outra. O que eu fiz foi o seguinte.
2014-10-13.17:41:29 zpool offline vol1 gptid/24726389-df9e-11e1-9963-c860009da3f8
2014-10-13.18:19:24 zpool replace vol1 15380758640793782293 gptid/f1a3e8b8-5326-11e4-966d-c860009da3f8
2014-10-13.18:21:28 zpool detach vol1 15380758640793782293
Quando o processo de resilvering é concluído, recebi um erro sobre corrupção de dados em um instantâneo. O sistema é configurado para instantâneo uma vez por hora, que são salvos por duas semanas e uma vez por dia durante seis meses.
[root@freenas] ~# zpool status -v
pool: vol1
state: ONLINE
status: One or more devices has experienced an error resulting in data
corruption. Applications may be affected.
action: Restore the file in question if possible. Otherwise restore the
entire pool from backup.
see: http://www.sun.com/msg/ZFS-8000-8A
scan: resilvered 2.25T in 27h51m with 1 errors on Tue Oct 14 22:10:59 2014
config:
NAME STATE READ WRITE CKSUM
vol1 ONLINE 0 0 1
raidz1-0 ONLINE 0 0 2
gptid/f1a3e8b8-5326-11e4-966d-c860009da3f8 ONLINE 0 0 0
gptid/24f91374-df9e-11e1-9963-c860009da3f8 ONLINE 0 0 0
gptid/25865cb9-df9e-11e1-9963-c860009da3f8 ONLINE 0 0 0
gptid/260cd97a-df9e-11e1-9963-c860009da3f8 ONLINE 0 0 0
errors: Permanent errors have been detected in the following files:
[email protected]:/home/.../some.pdf
Agora, esse arquivo foi excluído há muito tempo e, portanto, não me importo com isso, imaginei que posso excluir o instantâneo, mas isso piorou as coisas:
[root@freenas]~# zfs destroy [email protected]
[root@freenas] ~# zpool status -v
pool: vol1
state: ONLINE
status: One or more devices has experienced an error resulting in data
corruption. Applications may be affected.
action: Restore the file in question if possible. Otherwise restore the
entire pool from backup.
see: http://www.sun.com/msg/ZFS-8000-8A
scan: resilvered 2.25T in 27h51m with 1 errors on Tue Oct 14 22:10:59 2014
config:
NAME STATE READ WRITE CKSUM
vol1 ONLINE 0 0 1
raidz1-0 ONLINE 0 0 2
gptid/f1a3e8b8-5326-11e4-966d-c860009da3f8 ONLINE 0 0 0
gptid/24f91374-df9e-11e1-9963-c860009da3f8 ONLINE 0 0 0
gptid/25865cb9-df9e-11e1-9963-c860009da3f8 ONLINE 0 0 0
gptid/260cd97a-df9e-11e1-9963-c860009da3f8 ONLINE 0 0 0
errors: Permanent errors have been detected in the following files:
<0x7c343>:<0x45b6bcd>
Então, decidi investigar mais, ler documentos do Oracle e descobri: "Se dois discos em um dispositivo virtual RAID-Z (raidz1) de quatro vias estiverem com falha, nenhum dos discos pode ser substituído porque não são recuperar dados existem. "ada2 ainda está lançando erros, e parece que não posso substituí-lo no pool existente, pois ele tornará os dados indisponíveis?
Isso significa que a única maneira de recuperar é fazer backup de dados existentes, destruir o pool, substituir ada2, criar um novo pool e restaurar os dados em um novo pool? Ou há outra maneira de fazer isso, excluindo todos os instantâneos antes de 20140830 talvez? Btw mais recente scrub encontrou outro instantâneo com dados corrompidos, mesmo arquivo, obviamente:
[email protected]:/home/.../some.pdf