O que indica um erro permanente do ZFS?

18

Vários permanent errorsforam relatados no meu zpool hoje.

  pool: seagate3tb
 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://zfsonlinux.org/msg/ZFS-8000-8A
  scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        seagate3tb  ONLINE       0     0    28
          sda       ONLINE       0     0    56

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

        /mnt/seagate3tb/Install.iso
        /mnt/seagate3tb/some-other-file1.txt
        /mnt/seagate3tb/some-other-file2.txt

Editar: tenho certeza de que esses CKSUMvalores são precisos. Eu estava editando dados e pode ter os destruído por engano. Eles podem ter sido 0. Infelizmente, não consigo encontrar uma resposta conclusiva em minhas anotações e os erros foram resolvidos agora, então não tenho certeza, mas todo o resto é preciso / reflete o que o zpool estava relatando.

/mnt/seagate3tb/Install.iso é um arquivo de exemplo relatado como tendo um erro permanente.

Aqui é onde eu fico confuso. Se eu comparar meu "erro permanente" Install.isocom um backup desse mesmo arquivo em outro sistema de arquivos, eles parecerão idênticos.

shasum "/mnt/seagate3tb/Install.iso"
1ade72fe65902b2a978e5504aaebf9a3a08bc328  /mnt/seagate3tb/Install.iso
shasum "/mnt/backup/Install.iso"
1ade72fe65902b2a978e5504aaebf9a3a08bc328  /mnt/backup/Install.iso
cmp /mnt/seagate3tb/Install.iso /mnt/backup/Install.iso
diff /mnt/seagate3tb/Install.iso /mnt/backup/Install.iso

Os arquivos parecem ser idênticos. Além do mais, o arquivo funciona perfeitamente bem. Se eu usá-lo em um aplicativo, ele se comporta como eu esperaria.

Como os documentos afirmam :

Erros de corrupção de dados são sempre fatais.

Mas, com base nas minhas verificações rudimentares de arquivos, não sei se entendi a definição de fatal.

status: um ou mais dispositivos apresentaram um erro, resultando em corrupção de dados. Os aplicativos podem ser afetados.

ação: Restaure o arquivo em questão, se possível. Caso contrário, restaure o pool inteiro do backup.

Talvez esteja faltando alguma coisa, mas o arquivo parece perfeitamente bem, tanto quanto posso dizer, e não precisa de restauração nem corrupção, apesar da recomendação do ZFS.

Vi outros artigos com o mesmo erro , mas ainda não encontrei uma resposta para minha pergunta.

Qual é o erro permanente com o arquivo? Existe algum problema de nível inferior com o arquivo que não é aparente para mim? Se sim, por que isso não seria detectado por shasumuma diferença no arquivo?

Do ponto de vista de um leigo, não vejo nada que indique algum erro nesse arquivo.

Will Haley
fonte
Você tem instantâneos?
ewwhite
3
Será que, como ninguém mais disse isso, posso recebê-lo no ServerFault? Parece-me uma excelente primeira pergunta, e espero que continue a colher respostas instrutivas. Espero que você decida ficar em torno de SF e contribuir ainda mais.
MadHatter suporta Monica
Obrigado @MadHatter! Agradeço sua gentileza de boas-vindas e, certamente, permanecerá no SF. Eu já o adicionei à minha breve lista de comunidades SE.
Will Haley

Respostas:

22

A redação de zpool statusé um pouco enganadora. Um erro permanente (neste contexto) indica que ocorreu um erro de E / S e foi registrado no log de erros do SPA (Storage Pool Allocator) desse pool. Isso não significa necessariamente que haja corrupção irrecuperável de dados.

O que você deve fazer é correr zpool scrubna piscina. Quando a limpeza for concluída, o log de erros do SPA será girado e não exibirá mais erros anteriores à limpeza. Se a limpeza não detectar erros, zpool statusnão exibirá mais erros "permanentes".

Em relação à documentação, está dizendo que apenas "erros fatais" são registrados dessa maneira. Um erro fatal é um erro de E / S que não pôde ser corrigido automaticamente pelo ZFS e, portanto, foi exposto a um aplicativo como uma E / S com falha. Por outro lado, se a E / S for tentada imediatamente novamente com êxito ou se a E / S lógica for satisfeita com um dispositivo redundante, ela não será considerada um erro fatal e, portanto, não será registrada como um erro de corrupção de dados.

Um erro fatal não significa necessariamente perda permanente de dados, apenas significa que no momento não era possível corrigi-lo antes de propagar-se para o aplicativo. Por exemplo, um cabo solto ou um controlador incorreto pode causar erros fatais temporários que o ZFS descreveria como "permanente". Se realmente é um problema depende da natureza da E / S e se o aplicativo é capaz de recuperar-se de erros de E / S.

EDIT: Concorde plenamente com @bahamat que você deve investir em redundância o mais rápido possível.

Tom Shaw
fonte
O log de erros do SPA que relata isso como "permanente" realmente parece um pouco enganador. O zpool scrubfez exatamente o que você sugeriu @ tom-Shaw, e sua explicação faz todo o sentido. Não vejo mais "erros permanentes" nessa matriz após a limpeza. Não pensei em erros fatais no contexto de uma leitura com falha. Acho que deve ter sido apenas um erro temporário de E / S em uma leitura, como você sugere. Também concordo totalmente com a necessidade de redundância.
Will Haley
Tom, não te vejo há um tempo. Bem vindo de volta.
the-wabbit 02/09
7

Um erro permanente significa que houve um erro de soma de verificação no arquivo e não havia réplicas suficientes para reparar. Isso significa que pelo menos uma leitura retornou dados corrompidos devido a um erro de E / S. Se o que quer que recebesse a leitura, escrevesse isso de volta no mesmo arquivo de disco, você agora teria corrupção irrecuperável de dados.

Observando a configuração do seu pool, parece que você não tem redundância. Isso é muito perigoso. Você não obter qualquer dos benefícios de auto-cura do ZFS, mas vai ser capaz de dizer-lhe quando houve corrupção de dados. Normalmente, o ZFS corrige automaticamente e silenciosamente leituras corrompidas, mas no seu caso, não pode. Também parece que você já executou zpool clearporque a CKSUMcontagem é 0para ambas as unidades.

Infelizmente, sem réplicas, não há realmente como saber.

bahamat
fonte
2
zpool clearTambém não limparia a própria mensagem de erro, não apenas a contagem de erros? É estranho que a mensagem persista, mas nenhum erro é mostrado.
user121391
2
Me desculpe. Eu havia omitido os arquivos da lista de erros permanentes por privacidade. Ao editar essa saída, também destruí as contagens de CKSUM e perdi um contexto valioso. Eu editei a pergunta para refletir a realidade. @ user121391
Will Haley
Nesse caso, se os números exibidos estiverem corretos, é provável que você tenha um erro de hardware em algum lugar. Como os dois discos mostram CKSUM counts, pode ser o controlador, o cabo ou qualquer hardware compartilhado entre os dois discos. Também é possível que ambos os discos estejam falhando. De qualquer forma, isso ressalta a necessidade de adicionar redundância o mais rápido possível e inspecionar os arquivos indicados quanto à corrupção.
bahamat 2/09/16
O OP não parece ter redundância; o vdev possui 56 erros CKSUM e o pool possui 28 erros CKSUM. Portanto, não sei ao que você estava se referindo por "dois discos" no seu comentário anterior. Eu concordo com o seu ponto sobre o valor da redundância.
um CVn
Você está certo. Eu li mal o nome do pool como se fosse outro disco. Obrigado por apontar isso.
bahamat 3/09/16