Eu uso um pool ZFS que consiste em dois discos espelhados. Para fazer backups externos, comprei mais dois discos.
Meu plano inicial era criar o backup externo anexando um terceiro disco ao espelho, aguardando o ZFS voltar a prender, desconectar a unidade e transportá-la para fora do local. Isso funciona bem o suficiente, mas fiquei surpreso ao ver que ele executa um resilver completo toda vez que um disco é conectado (eu li e, possivelmente, mal entendi, que cada anexo resultaria em um resilver incremental ou delta). Isso resulta em backups que demoram mais do que o aceitável.
Meus requisitos são ter uma cópia externa do meu zpool e todos os seus instantâneos que eu possa girar diariamente. Isso significa que a recuperação precisa levar no máximo 24 horas - no momento, é quase isso, mas nossos planos de aumentar nossa piscina o levarão além desse prazo.
Como posso manter backups externos que não exigem uma operação completa de resilver? Devo usar um sistema de arquivos diferente nas minhas unidades de backup (por exemplo, exportar uma imagem em vez de fazer parte do pool do ZFS)? Devo ter os backups em um pool separado e enviar novos instantâneos para ele à medida que são criados?
Respostas:
Depois de muitos ajustes e experiências, encontrei uma solução, embora com uma troca bastante grande.
Primeiro, as opções que eu tinha que descartar:
Ter um segundo servidor ZFS externo com um pool espelhado não era uma opção devido ao custo. Se tivesse sido uma opção, essa seria de longe a melhor abordagem, utilizando o envio / recebimento do ZFS para enviar instantâneos ao pool remoto.
Ter um segundo pool espelhado do ZFS no local, do qual eu poderia remover os discos para levar para casa. Isso é mais viável do que a primeira opção, mas eu precisaria do segundo pool para sempre ter dois discos no local (ou usar duas cópias de dados em um único disco no local). No momento, tenho quatro discos e não há mais espaço para um quinto no servidor. Essa seria uma abordagem justa, mas ainda não ideal.
O uso do ZFS anexa e desanexa para girar o disco de backup para dentro e para fora do pool espelhado. Isso funciona bem, mas é necessário executar um resilver completo toda vez que o disco é adicionado. Isso leva inaceitavelmente tempo e, portanto, não pude confiar nisso.
Minha solução é semelhante ao uso
attach
edetach
, no entanto, usaonline
eoffline
. Isso tem a vantagem de realizar uma nova pesquisa delta versus uma pesquisa completa, mas a desvantagem de o pool sempre relatar umDEGRADED
estado (o pool sempre tem dois discos; os discos rotativos externos são marcadosoffline
quando estão no armazenamento e resilver remotos e ficam on-line quando estiverem no local).Então, uma rápida recapitulação e visão geral da minha configuração:
Eu tenho um servidor ZFS e quatro discos idênticos. O ZFS está configurado para usar um pool espelhado. Dois dos quatro discos são membros permanentes desse pool. Os outros dois discos giram; um está sempre no armazenamento externo, o outro faz parte do pool para atuar como um backup pronto para uso.
Quando chegar a hora de girar os backups:
Espero que um
zfs scrub
seja concluído para garantir razoavelmente que o disco de backup está livre de errosEu
zfs offline
o disco que será levado remoto. Depois de offline, eu diminuíhdparm -Y /dev/id
-lo. Depois de um minuto, removo parcialmente o suporte de disco (apenas o suficiente para garantir a energia perdida) e depois dou outro minuto antes de puxar completamente a unidade para garantir que ela parou de girar. O disco entra em uma bolsa estática e, em seguida, em uma caixa protetora e sai do local.Trago o outro disco externo. Ele é instalado na bandeja de aquecimento e gira. Eu uso
zfs online
para restaurar o disco no pool e iniciar uma resilver parcial para torná-lo simultâneo.Esse sistema garante que, a qualquer momento, eu tenha dois
ONLINE
discos espelhos e umOFFLINE
disco remoto (que foi limpo). O quarto disco está sendo resilvered ou online, o que tem o benefício de que, no caso de uma unidade em execução falhar, é provável que o pool ainda seja consistente com dois discos online.Funcionou bem nas últimas duas semanas, mas eu ainda consideraria isso uma abordagem hackeada. Vou acompanhar se tiver problemas importantes.
Atualização: depois de executar isso por alguns meses, descobri que, no meu mundo real, o resilvering está demorando o mesmo tempo para desanexar / anexar e offline / online. Nos meus testes, acho que não estava executando uma limpeza - meu palpite é que, se uma unidade estiver offline para uma limpeza, ela precisará de um resilver completo.
fonte
Por que o zfs não envia seus snapshots para uma máquina ZFS remota? Eu uso um script bash simples para isso:
fonte
Criei uma ferramenta chamada snapdump que permite criar despejos incrementais dos conjuntos de dados do zfs para um sistema de arquivos externo (não zfs). O Snapdump também suporta a restauração de uma cadeia incremental de instantâneos com um único comando.
fonte