Eu tenho um pool espelhado do ZFS com quatro unidades totais. Duas das unidades destinam-se a ser usadas para alternar backups externos. Minha expectativa era que, após o resilver inicial, eu pudesse detach
e posteriormente attach
um disco e o fizesse apenas um resilver incremental - no entanto, nos testes, ele parece executar um resilver completo, independentemente de o disco que está sendo anexado já conter quase todo o pool conteúdo.
Usar uma abordagem offline
/ online
me daria o resultado desejado de apenas atualizar o disco - em vez de reconstruí-lo completamente? Ou, para ter esse trabalho como esperado, precisarei fazer algo totalmente diferente - como usar cada disco de backup como um pool de 1 disco e send
inserir os instantâneos mais recentes sempre que precisar ser atualizado?
zfs send
comando para obter fluxos de backup completos ou incrementais salvos nos discos de backup ou usezfs recv
para criar um disco duplicado. Eu recomendo o uso de algum tipo de software para gerenciar esse processo.Respostas:
Não desmonte a matriz do ZFS para "girar" os discos fora do local. Como você viu, o tempo de reconstrução é alto e o processo de resilversão lerá / verificará o tamanho usado do conjunto de dados.
Se você tiver a capacidade, capturar instantâneos e enviar dados para um sistema remoto é uma abordagem limpa e não intrusiva. Suponho que você possa passar pelo processo de ter um pool de disco único dedicado, copiar para ele e exportar / importar o zpool ... mas não é muito elegante.
fonte
Depois de mais experiências, encontrei uma solução justa, porém com um trade-off significativo. Os discos que foram
offline
mas não desanexados podem ser colocados online novamente com apenas uma operação incremental de resilvering (" Quando um dispositivo é colocado online, todos os dados que foram gravados no pool são ressincronizados com o novo dispositivo disponível "). Nos meus testes, isso reduz o tempo de recuperação de um espelho de três discos de 28 horas para pouco mais de 30 minutos, com cerca de 40 GB de delta de dados.A desvantagem é que qualquer pool com um disco offline será sinalizado como degradado. Desde que ainda haja pelo menos dois discos online (em um pool espelhado), isso é efetivamente um aviso - a integridade e a redundância permanecem intactas.
Como outros mencionaram, essa abordagem geral está longe de ser ideal - enviar instantâneos para um pool remoto seria muito mais adequado, mas no meu caso não é viável.
Para resumir, se você precisar remover um disco de um pool e depois adicioná-lo novamente sem exigir uma nova redefinição completa, a abordagem que eu recomendaria é:
zpool offline pool disk
hdparm -Y /dev/thedisk
zpool online pool disk
E, como ainda não foi testado, existe o risco de a operação delil resilvering não ser precisa. O pool "ativo" e / ou os discos offline podem ter problemas. Vou atualizar se isso acontecer comigo, mas por enquanto vou experimentar essa abordagem.
fonte
Atualização em 15 de outubro de 2015: Hoje descobri o
zpool split
comando, que divide um novo pool (com um novo nome) de um pool existente.split
é muito mais limpo queoffline
edetach
, pois os dois conjuntos podem existir (e serem limpos separadamente) no mesmo sistema. O novo pool também pode ser limpo (e adequadamente)export[ed]
antes de ser desconectado do sistema.(Minha postagem original segue abaixo.)
Aviso! Vários comentários nesta página sugerem que é (ou pode ser) possível para
zpool detach
uma unidade e, de alguma forma, reconecte a unidade e acesse os dados que ela contém.No entanto, de acordo com este segmento (e minha própria experiência)
zpool detach
remove as "informações do pool" da unidade desconectada. Em outras palavras, adetach
é como uma rápida reformatação da unidade . Depois dedetach
muitos dados ainda estarem na unidade, será praticamente impossível remontar a unidade e visualizar os dados como um sistema de arquivos utilizável.Consequentemente, parece-me que
detach
é mais destrutivo do quedestroy
, como acredito,zpool import
pode recuperar poças destruídas!A não
detach
é a , nem a , nem a .umount
zpool export
zpool offline
Na minha experiência, se eu primeiro
zpool offline
um dispositivo e depoiszpool detach
o mesmo, o resto do pool esquece que o dispositivo já existiu. No entanto, como o dispositivo em si estavaoffline[d]
antes deledetach[ed]
, ele nunca é notificado sobre odetach
. Portanto, o próprio dispositivo ainda tem suas informações de pool e pode ser movido para outro sistema e depoisimport[ed]
(em um estado degradado).Para proteção adicional,
detach
você pode desconectar fisicamente o dispositivo após ooffline
comando, ainda antes de emitir odetach
comando.Espero usar isso e
offline
, em seguidadetach
,import
processar o backup da minha piscina. Como no pôster original, planejo usar quatro unidades, duas em um espelho constante e duas para backups mensais, rotativos, externos (e offline). Vou verificar cada backup importando e limpando-o em um sistema separado, antes de transportá-lo para fora do local. Ao contrário do pôster original, não me importo de reescrever toda a unidade de backup todos os meses. Na verdade, prefiro reescritas completas para ter novos bits.fonte
Na mesma máquina, você tentou criar um novo pool com as 2 unidades em um espelho? Em seguida, crie um instantâneo em seu pool de trabalho e envie-o para o novo pool; repita; o próximo envio de instantâneo será incremental. Isso não é o mesmo com "enviar dados para um sistema remoto", pois esse é um pool no mesmo sistema / servidor / máquina. Com essa configuração, você ainda pode aplicar o zpool split / offline / desanexar / anexar, mas apenas o faz no segundo pool (cópia) e não no pool de origem.
fonte