O que indica um erro permanente do ZFS?

17

Vários permanent errors foram reportados 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

Edit: Tenho certeza de que esses valores de CKSUM estão corretos. Eu estava redigindo os dados e posso tê-los confundido por engano. Eles podem ter sido 0. Infelizmente, não consigo encontrar uma resposta conclusiva em minhas anotações e os erros são 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 reportado como tendo um erro permanente.

Aqui é onde eu me confundo. Se eu comparar o meu "permanentemente com erro" Install.iso com um backup do mesmo arquivo em outro sistema de arquivos, eles sã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 esperava.

Como o estado do documento :

Data corruption errors are always fatal.

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

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.

Talvez eu esteja perdendo alguma coisa, mas o arquivo parece perfeitamente bem, até onde eu sei, e precisa de qualquer restauração, nem mostra qualquer corrupção, apesar da recomendação do ZFS.

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

Qual é o erro permanente do arquivo? Existe algum problema de nível inferior com o arquivo que não é apenas aparente para mim? Em caso afirmativo, por que isso não seria detectado por um shasum como diferença no arquivo?

Do ponto de vista de um leigo, não vejo nada que indique qualquer erro com este arquivo.

    
por Will Haley 02.09.2016 / 06:23

2 respostas

21

O texto de zpool status é um pouco enganador. 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) para esse pool. Isto não significa necessariamente que há corrupção de dados irrecuperável.

O que você deve fazer é executar um zpool scrub no pool. Quando o scrub estiver concluído, o log de erros do SPA será girado e não mostrará mais erros antes do scrub. Se o scrub não detectar erros, então zpool status não mostrará mais erros "permanentes".

Em relação à documentação, está dizendo que apenas "erros fatais" são registrados desta forma. Um erro fatal é um erro de E / S que não pode ser corrigido automaticamente pelo ZFS e, portanto, foi exposto a um aplicativo como E / S com falha. Por outro lado, se a E / S fosse repetida com êxito ou se a E / S lógica fosse satisfeita a partir de um dispositivo redundante, ela não seria considerada um erro fatal e, portanto, não seria 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 em que não pôde ser corrigido antes de ser propagado para o aplicativo. Por exemplo, um cabo solto ou um controlador ruim pode causar erros fatais temporários que o ZFS descreveria como "permanentes". Se realmente é um problema depende da natureza da E / S e se o aplicativo é capaz de se recuperar de erros de E / S.

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

    
por 02.09.2016 / 11:12
7

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

Olhando para a configuração do seu pool, parece que você não tem redundância. Isso é muito perigoso. Você não recebe nenhum benefício de auto-recuperação do ZFS, mas será capaz de informá-lo quando houver corrupção de dados. Normalmente, o ZFS corrige automática e silenciosamente as leituras corrompidas, mas, no seu caso, não é possível. Também parece que você já executou zpool clear porque a contagem CKSUM é 0 para ambas as unidades.

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

    
por 02.09.2016 / 10:44

Tags