FreeNAS zfs zraid dois discos com falha

4

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
    
por Kirill 20.10.2014 / 17:11

1 resposta

2

Eu acredito que você está vendo coisas como

errors: Permanent errors have been detected in the following files:

        <0x7c343>:<0x45b6bcd>

é porque os dados ainda existem em um instantâneo e apenas em um instantâneo.

Lembre-se de que um instantâneo no ZFS é apenas um marcador de ponto no tempo; na verdade, ele não copia nenhum bloco, ele simplesmente mantém as referências aos antigos blocos ativos quando os dados são substituídos (usando o comportamento normal de cópia-gravação do ZFS). Portanto, se houver algum instantâneo que faça referência aos blocos defeituosos, ele continuará aparecendo durante o scrubs como um erro.

O erro afeta apenas esse arquivo específico, e seus outros dados não correm nenhum risco adicional devido a esse erro.

A "correção" é destruir cada instantâneo que contém o arquivo afetado. Uma vez que todos os instantâneos tenham sido destruídos, nenhuma referência aos blocos ruins permanecerá e o ZFS reportará (esperançosamente) que não há erros.

Além disso, a maneira recomendada de substituir um dispositivo com falha, mas ainda funcional (marginal) em um pool do ZFS é usar zpool replace pool old-dev new-dev com o old-dev e o new-dev conectados em todo o processo de substituição. Isso permite que o ZFS use os dados no dispositivo marginal, onde isso é possível. Quando o zpool replace for concluído, o dispositivo antigo será automaticamente removido do pool e poderá ser fisicamente desconectado. Obviamente, isso requer ter o número apropriado de interconexões extras disponíveis no host.

    
por 14.03.2015 / 16:29

Tags