ZFS em réplicas insuficientes do Linux

2

Resumo

Um dos pools do ZFS não pode mais ser importado devido à seguinte mensagem:

status: One or more devices contains corrupted data.
action: The pool cannot be imported due to damaged devices or data.
...
    data1       UNAVAIL  insufficient replicas

Eu gostaria de entender o que "réplicas insuficientes" significam, e se há alguma maneira de recuperar isso com segurança antes de extrair os backups e reconstruir o conjunto de armazenamento.

Eu também gostaria de entender o que causou isso e o que posso fazer para evitar essa situação no futuro. Eu entendo as rochas do ZFS, mas como um novato do ZFS, é assustador que eu precise extrair backups para algo tão inofensivo quanto extrair uma unidade de uma caixa.

Antecedentes

Recentemente, desliguei esta caixa e tirei o disco SATA sda. Tenho 99% de certeza de que deixo o sistema desligar completamente antes de desconectá-lo da parede, mas é possível que eu tenha feito um disco rígido desligado se o desligamento estivesse demorando muito.

Ao conectar a unidade novamente, acredito que a conectei novamente na mesma porta SATA da placa-mãe, mas é possível que eu a tenha conectado em uma porta diferente.

A caixa também contém um disco sdb PATA mais antigo no qual o Debian é instalado como o único sistema operacional em uma partição ext.

No passado, eu inicializava, todos os meus pools seriam importados e montados em volumes. Desta vez não consegui nada.

Hoje

Quando inicializei a caixa, estava na tela de login do GDM e percebi que não conseguia fazer o login. Mais tarde, descobri que não tinha diretórios pessoais de usuários, pois eles estão todos em um pool.

Na linha de comando, descobri o seguinte:

# zfs list
no datasets available

# zpool list
no pools available

# zpool status
no pools available

Meus discos estavam disponíveis; O fdisk produziu a saída esperada e eu tive meus dispositivos / dev / sdaX e / dev / sdbX.

zpool import me deu resultados interessantes. Os outros grupos relataram ONLINE, mas o item em questão relatou isso:

   pool: ...
     id: ...
  state: UNAVAIL
 status: One or more devices contains corrupted data.
 action: The pool cannot be imported due to damaged devices or data.
    see: http://zfsonlinux.org/msg/ZFS-8000-5E
 config:

        data1       UNAVAIL  insufficient replicas
          sda2      UNAVAIL

Eu consegui importar os outros pools neste momento usando zpool import poolname e, em seguida, vejo que tudo estava bem com eles com zfs list .

Não assim com este:

# zpool import data1
cannot import 'data1': one or more devices are already in use

zpool import mostrou a mesma saída para este conjunto.

Eu pensei em excluir o arquivo /etc/zfs/zpool.cache . Eu exportei tudo e verifiquei o diretório:

# zpool export -a
# ls /etc/zfs

Não havia zpool.cache após a exportação, então eu simplesmente reiniciei. (Eu não sei o que aconteceria se eu apagar o zpool.cache enquanto os pools são importados, então eu não tentei.)

Mesmos resultados após a reinicialização. As outras piscinas são boas e esta não pode ser importada.

    
por jia103 11.11.2016 / 21:36

1 resposta

1

I would like to understand what "insufficient replicas" means

Isso significa que o ZFS encontrou um erro ao ler ou gravar no pool e, em seguida, descobriu que não há redundância suficiente no conjunto para corrigir o problema. Como parece que você configurou o ZFS para pools de unidade única, isso significa simplesmente que ele se deparou com um problema e agora não pode se recuperar sozinho.

No caso simples, zpool status -v relatará arquivos individuais que agora estão irremediavelmente corrompidos. Restaurá-los a partir de backups ou removê-los retornará o pool a um estado não corrompido. Essa é uma das vantagens que você obtém com o ZFS, em vez de separar os subsistemas do sistema de arquivos, do gerenciador de volume lógico e do RAID. Um erro no nível do disco que afeta um único arquivo pode ser relatado como um erro nesse arquivo específico, enquanto que com lash-ups FS + LVM + RAID, um erro nos níveis inferiores não pode manter o contexto semântico à medida que se propaga para a pilha. / p>

De acordo com a sua pergunta, no entanto, zpool status não está relatando um problema com arquivos específicos, o que significa que algo mais fundamental deu errado com o disco solitário no pool de problemas. Neste ponto, eu estaria analisando o próprio disco: smartctl , badblocks , SpinRite, ferramentas de diagnóstico de fornecedores, etc.

No futuro, considere usar pelo menos espelhos com o ZFS. O ZFS pode corrigir esses problemas quando recebe alguma redundância para trabalhar ou, pelo menos, deixá-lo flácido até conseguir a substituição do disco.

any way to recover from this safely before I pull out the backups

Se o ZFS pudesse fazê-lo, seria. O ZFS não desiste facilmente, mas quando isso acontece, significa que você não pode usar com segurança os dados no pool.

Neste ponto, sua melhor esperança é que o problema seja que o meio de armazenamento subjacente tenha um erro temporário que permitirá que o SpinRite, badblocks ou similar apareça e force o disco a extrair uma cópia limpa do arquivo. setor ruim uma última vez e copiá-lo para um setor de reposição.

Tenha em atenção que o ZFS é mais rigoroso do que outros sistemas de ficheiros a este respeito, pois não aceita uma recuperação parcial do sector. A strong soma de verificação de dados significa que apenas uma restauração completa de cada setor pode fazer com que o ZFS aceite que o sistema de arquivos está limpo agora.

Se você acredita que os dados parciais são melhores que nenhum dado, isso significa que o ZFS é um problema para você. Se você acredita que os dados incorretos estão incorretos, o ZFS está fazendo exatamente o que você deseja.

one or more devices are already in use

Isso não é bom.

Isso significa que você permite que algum outro driver de kernel seja anexado a esse disco antes que o ZFS possa acessá-lo, ou o ZFS está localizando o mesmo disco por vários caminhos.

Sua melhor esperança é que você esteja no segundo caso e forçar o ZFS a procurar discos por apenas um caminho pode fazer com que você passe por esse problema:

$ sudo ZPOOL_IMPORT_PATH="/dev/disk/by-id" zpool import -a

Se isso funcionar, a exportação e reimportação do pool de problemas poderá funcionar sem a força, já que o ZFS geralmente lembra o caminho pelo qual seus vdevs foram importados pela última vez.

    
por 11.11.2016 / 21:58