Depois de muita dedicação e experimentação, encontrei uma solução, embora com um tradeoff bastante grande.
Primeiro, as opções que eu tive que excluir:
-
Ter um segundo servidor externo do ZFS com um pool espelhado não era uma opção devido ao custo. Se fosse uma opção, essa seria, de longe, a melhor abordagem, utilizando envio / recebimento do ZFS para enviar instantâneos para o pool remoto.
-
Ter um segundo pool espelhado do ZFS no local, do qual eu poderia remover discos para levar para casa. Isso é mais viável do que a primeira opção, mas eu precisaria que o segundo pool tivesse sempre dois discos no local (ou que usasse duas cópias de dados em um único disco no local). Atualmente tenho quatro discos e não há mais espaço para um quinto no servidor. Esta seria uma abordagem justa, mas ainda não é ideal.
-
Usando o ZFS, anexar e desanexar para girar o disco de backup para dentro e para fora do pool espelhado. Isso funciona bem, mas tem que executar um resilver completo sempre que o disco é adicionado. Isso leva um tempo inaceitavelmente longo e, por isso, não pude contar com isso.
Minha solução é semelhante a usar attach
e detach
, mas usa online
e offline
. Isso tem a vantagem de executar uma resilvering delta versus uma resilvering completa, mas a desvantagem de que o pool sempre relata um estado DEGRADED
(o pool sempre tem dois discos; os discos externos rotacionais são marcados como offline
quando estão em armazenamento remoto e resilver e, em seguida, vêm on-line quando estão no local).
Então, uma recapitulação rápida e uma visão geral da minha configuração:
Eu tenho um servidor ZFS e quatro discos idênticos. O ZFS é configurado para usar um pool espelhado. Dois dos quatro discos são membros permanentes desse pool. Os outros dois discos giram; um está sempre em armazenamento externo, o outro é parte do pool para atuar como um backup pronto para uso.
Quando chega a hora de girar os backups:
-
Espero que um
zfs scrub
seja concluído para garantir razoavelmente que o disco de backup esteja livre de erros -
Eu
zfs offline
o disco que será tomado como remoto. Após o seu offline euhdparm -Y /dev/id
para girar para baixo. Após um minuto, eu removo parcialmente o trenó do disco (o suficiente para garantir a perda de energia) e, em seguida, dou outro minuto antes de puxar totalmente a unidade para garantir que ela parou de girar. O disco entra em uma bolsa estática e, em seguida, em um estojo de proteção e vai para fora do local. -
Eu trago o outro disco externo. Ele é instalado na bandeja do hotswap e gira. Eu uso
zfs online
para restaurar o disco para o pool e lançar um resilvering parcial para torná-lo concorrente.
Este sistema garante que, a qualquer momento, eu tenha dois ONLINE
mirror discos e um OFFLINE
disco remoto (que tenha sido limpo). O quarto disco está sendo resilvered ou on-line, o que traz o benefício de, no caso de uma unidade em execução falhar, provavelmente o pool ainda consistir em dois discos on-line.
Funcionou bem nas últimas duas semanas, mas eu ainda considero isso uma abordagem hackeada. Vou acompanhar se eu tiver problemas importantes.
Atualização: Depois de correr com isso por alguns meses, descobri que, no meu mundo real, o uso do resilvering leva o mesmo tempo para separar / anexar e offline / online. Nos meus testes, eu não acho que eu estava executando um scrub - meu palpite é que, se uma unidade está offline para um scrub, ela requer um resilver completo.