Um ZFS espelharia com um trabalho principalmente off-line?

5

Cenário: Eu tenho dois discos rígidos externos e gostaria que um deles fosse um backup do outro. Tradicionalmente, eu conectaria periodicamente a segunda unidade e o rsync em todas as alterações. O ZFS fornece uma maneira melhor de fazer isso?

Eu acho que gostaria de criar uma configuração 'zfs mirror', no entanto, eu não gostaria de transportar a unidade de backup comigo o tempo todo por conveniência, mas sim sincronizar quaisquer alterações periodicamente. O ZFS oferece uma maneira de fazer isso ou não é um uso adequado? Se sim, qual é a maneira canônica do ZFS de fazer isso? (Eu não quero bater o disco por ter que verificar todos os setores para mudanças toda vez que eu quero atualizar a unidade de backup por exemplo)

    
por Matthew 14.06.2015 / 14:32

1 resposta

8

O ZFS tem capacidade limitada de atualizar incrementalmente uma unidade espelhada depois de ficar offline por algum tempo. TL; DR: Você pode fazer o que você está procurando do jeito que você está sugerindo, mas não é isso que os espelhos devem fazer.

Na prática, o que você está sugerindo quase certamente exigiria um resilver completo de cada vez, porque as mudanças intermediárias levariam a muitas revisões do überblock, então não haveria um ponto de base comum para um resilver incremental. Se houver uma falha durante esse processo, parece provável que você esteja com problemas graves no que diz respeito aos seus dados. Também tenha em mente que, devido ao formato de dados em disco da árvore Merkle, as resilvas do ZFS podem ser (e são) feitas "em ordem decrescente de importância de dados", em vez de sequencialmente como sistemas RAID não baseados em sistemas de arquivos. É claro que a "importância dos dados" aqui é no que diz respeito ao ZFS, não tanto quanto o que você pode considerar importante ou que vale a pena manter. A atividade de busca resultante pode facilmente causar grande estresse em uma única unidade.

A maneira canônica de colocar dois sistemas de arquivos ZFS em sincronia é usar um zfs send | zfs receive entre eles. Isso requer que ambos os sistemas de arquivos estejam disponíveis (mas você pode armazenar a saída do zfs send e usá-los como a entrada para o zfs receber posteriormente, se você estiver inclinado, mas deve estar ciente de que isso vem com a imensa ressalva : zfs receive faz não tentar recuperar de um fluxo de dados parcialmente danificado, e apenas anula se erros forem detectados).

  • Tenha um pool para cada unidade de backup. Vamos chamá-los de tank e pipe . Digamos que temos dados em tank que queremos copiar para o pipe .
  • Conecte as duas unidades e zpool import tanque e canal . Você pode passar -N para zpool import para fazer com que ele não monte nenhum sistema de arquivos.
  • Tire um instantâneo do sistema de arquivos de origem, tank . %código%
  • Encontre o instantâneo mais recente que tanque e canal têm em comum. Use algo como zfs snapshot tank@current1984 -r para obter uma lista básica para trabalhar. Digamos que o instantâneo mais recente que eles têm em comum é zfs list tank pipe -t snapshot .
  • Execute algo como current1948 para transferir incrementalmente o delta entre os instantâneos zfs send -R -I tank@current1948 tank@current1984 | zfs receive pipe e current1948 de tank para o pipe . Leia a página current1984 man para obter mais detalhes sobre os subcomandos de envio e recebimento.
  • Aguarde o término e, opcionalmente, exclua os instantâneos que não são mais necessários. Certifique-se de manter pelo menos um instantâneo (por exemplo, zfs ) que os dois pools (sistemas de arquivos, em vez disso) têm em comum, para usar como base na próxima vez.

Neste ponto, os dois pools terão o mesmo conteúdo, até o instantâneo usado. Se feito corretamente, isso também deve exigir apenas a transferência das diferenças; Não consigo imaginar um cenário em que um current1984 incremental precisaria fazer algo como um resilver de espelho completo. Ele também permite adicionar redundância aos pools de backup posteriormente, caso deseje. Se a unidade de origem falhar durante o processo de cópia, você ainda deve ter o backup antigo prontamente disponível; somente as diferenças que você estava tentando transferir seriam perdidas.

    
por 14.06.2015 / 14:50

Tags