Limpar erros de soma de verificação do ZFS?

Limpar erros de soma de verificação do ZFS?

TLDR; Meu pool de espelhos ZFS apresentou alguns erros de soma de verificação. Substituí o controlador, pensando que essa era a causa mais provável, mas os erros não foram resolvidos. pool clear os redefine temporariamente, mas eles voltam na próxima vez que eu fizer uma limpeza. Como posso eliminá-los para sempre?

História completa: Eu tenho um ZFS mirror-0 configurado e rodando no Ubuntu 20.04.2 LTS há algum tempo. Quando um dos drives morreu, aproveitei a falha para substituir os dois drives por outros maiores, além de adicionar uma placa PCI SATA-III para os novos drives (os antigos estavam conectados ao controlador SATA II integrado , pois não tinha mais portas SATA III disponíveis). Depois de executar as novas unidades e controlador por algumas semanas, o ZFS reclamou de erros de soma de verificação em ambas as novas unidades e, como resultado, colocou a matriz em um estado "degradado".

Algumas pesquisas me levaram à conclusão de que, como ambas as unidades apresentavam exatamente o mesmo número de erros de soma de verificação, era muito mais provável que fosse um problema com o controlador do que com as próprias unidades. Então retirei o novo controlador e coloquei as unidades de volta no controlador SATA II integrado por enquanto, com a intenção de substituir a placa controladora assim que verificar se esse é o problema. Em seguida, excluí os dois arquivos que zpool status -vapresentavam erros permanentes, emiti um zpool clear datapara redefinir os erros e executei uma limpeza.

Infelizmente, após a limpeza os erros reapareceram, só que agora -vnão mostrava mais um arquivo, mas apenas o endereço (inode, acredito), provavelmente de um dos arquivos que eu havia excluído anteriormente. Tentei novamente, com o mesmo resultado. Cada vez que executo uma limpeza, ela retorna com o seguinte resultado:

root@watchman:~# zpool status -v
  pool: data
 state: DEGRADED
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://zfsonlinux.org/msg/ZFS-8000-8A
  scan: scrub repaired 16K in 0 days 09:10:20 with 1 errors on Sat Jul 24 15:48:21 2021
config:

    NAME                                 STATE     READ WRITE CKSUM
    data                                 DEGRADED     0     0     0
      mirror-0                           DEGRADED     0     0     0
        ata-ST8000VE000-2P6101_WSD1M5NW  DEGRADED     0     0    15  too many errors
        ata-ST8000VE000-2P6101_WSD1HEJX  DEGRADED     0     0    15  too many errors

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

        data:<0x380508>

Pelo que posso dizer, este é exatamente o mesmo problema que já existia devido, presumivelmente, ao controlador defeituoso, mas não consigo esclarecê-lo. Como posso restaurar meu espelho para um estado totalmente funcional?

ATUALIZAÇÃO: finalmente desisti da ideia de eliminar os erros e comecei de novo. Criei um novo pool, roubando uma das unidades do espelho existente. Em seguida, executei um rsyncpara copiar todos os dados do pool antigo para o novo. Isso ocorreu com alguns erros (o zfs não estava mentindo sobre erros de dados), mas nada significativo ou preocupante, e a exclusão dos arquivos com erros permitiu que o rsync fosse concluído com êxito. Em seguida, adicionei a segunda unidade ao novo pool e, depois de um resilver, tudo agora parece bem e uma limpeza no novo pool foi concluída sem erros.

Então, supondo que tudo continue bem na próxima semana, acho que é seguro assumir que a placa SATA III foi a causa do problema e substituí-la por uma marca/opção melhor :)

Responder1

De tempos em tempos, também tenho algum erro de soma de verificação em um espelho 0, ocorrendo principalmente após uma reinicialização, e o status do pool zfs é degradado.

zpool status <poolname>

insira a descrição da imagem aqui

Para corrigir isso e limpar os erros que executo:

zpool clear <poolname>

informação relacionada