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
e detach
, no entanto, usa online
e offline
. Isso tem a vantagem de realizar uma nova pesquisa delta versus uma pesquisa completa, mas a desvantagem de o pool sempre relatar um DEGRADED
estado (o pool sempre tem dois discos; os discos rotativos externos são marcados offline
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 erros
Eu 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 um OFFLINE
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.