É possível desanexar e reconectar um disco ZFS sem precisar de um resilver completo?

10

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 detache posteriormente attachum 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/ onlineme 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 sendinserir os instantâneos mais recentes sempre que precisar ser atualizado?

STW
fonte
5
-1 Não desconecte / conecte unidades para backup, use os comandos de envio / recebimento conforme planejado pelos projetistas do ZFS.
Chris S
2
@ Chrisis em vez de -1, que tal escrever uma resposta com algumas citações. Parece que você está dizendo que as únicas opções para backups são um pool on-line em outro lugar - o que seria ótimo saber se é verdade, mas suspeito que não seja o caso.
STW
1
Desculpe, não pretendo ser um idiota arrogante, mas a falha do servidor deve ser apenas para administradores profissionais do sistema (et al). O método de backups espelhos quebrados é tão totalmente incontrolável, propenso a erros e não profissional que não deve ser considerado um método viável de backup. O que estou sugerindo é que você formate as duas unidades de backup com o sistema de arquivos que desejar e use o zfs sendcomando para obter fluxos de backup completos ou incrementais salvos nos discos de backup ou use zfs recvpara criar um disco duplicado. Eu recomendo o uso de algum tipo de software para gerenciar esse processo.
Chris S
Eu acho que seus pontos são válidos, eu recomendaria isso como resposta. Estou pensando em reescrever minha pergunta para focar menos no meu cenário específico (que resulta de um orçamento apertado para um servidor interno não crítico, mas importante) e mais no núcleo "posso reconectar uma unidade sem precisar de uma licença completa? resilvering? "
STW

Respostas:

14

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.

ewwhite
fonte
Infelizmente, não posso usar uma abordagem snapshot-> send, pois não tenho hardware nem largura de banda para executar um segundo servidor ZFS fora do local. No entanto, parece que o uso offline / online funcionará, com a troca que o status relata como degradado. Vou ver como será a próxima semana.
STW
1
Entendido. Mas retirar discos em execução de um sistema como forma de backup não é uma solução sólida. Seu risco aumenta drasticamente quando você faz isso.
ewwhite
Bom ponto, o meu plano é para offline los, suspendê-las, destituir a sua bandeja de troca a quente e, em seguida, dar-lhe um minuto para assegurar um ponto final antes de puxar-la totalmente
STW
1
Você pode operar um segundo servidor no local (ou mesmo uma segunda matriz do ZFS no mesmo servidor)? Coloque suas baias de hotswap, sincronize-as com a principal e, em seguida, gire toda a matriz ZFS de backup para dentro / fora do servidor como uma unidade.
Dan Is Fiddling Por Firelight
11

Depois de mais experiências, encontrei uma solução justa, porém com um trade-off significativo. Os discos que foram offlinemas 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 é:

  • offline o disco no pool: zpool offline pool disk
  • gire a unidade para baixo (se for para ser puxada fisicamente): hdparm -Y /dev/thedisk
  • deixe a piscina em um estado degradado com a unidade desativada
  • para adicionar o disco de volta ao pool: 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.

STW
fonte
1
Se o resilver introduzir erros de dados, eles serão reparados automaticamente ao longo do tempo ou após uma limpeza do zpool.
the-wabbit
Eu percebi o valor de uma esfoliação; I esperar até depois de um matagal de sucesso para off-line e remover o disco de backup
STW
2
Apenas uma atualização rápida: no último ano, essa abordagem funcionou bem o suficiente. Os testes mensais de restauração do backup externo foram bem-sucedidos e consistentes. Girar uma matriz (em vez de um único disco) seria melhor para fornecer um nível de redundância na cópia externa, e eu recomendaria fazer isso, se possível. No geral, essa ainda é uma abordagem hackiana e apresenta alguns riscos, mas forneceu um backup externo razoavelmente seguro e barato de nossos dados.
STW
Eu argumentaria contra a rotação de todas as unidades da matriz, pois o transporte pode danificar lentamente todas elas. Eu não faria a rotação mesmo que as unidades permanecessem no local.
Costin Guș
2

Atualização em 15 de outubro de 2015: Hoje descobri o zpool splitcomando, que divide um novo pool (com um novo nome) de um pool existente. splité muito mais limpo que offlinee detach, 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 detachuma 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 detachremove as "informações do pool" da unidade desconectada. Em outras palavras, a detaché como uma rápida reformatação da unidade . Depois de detachmuitos 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 que destroy, como acredito, zpool importpode recuperar poças destruídas!

A nãodetach é a , nem a , nem a .umountzpool exportzpool offline

Na minha experiência, se eu primeiro zpool offlineum dispositivo e depois zpool detacho mesmo, o resto do pool esquece que o dispositivo já existiu. No entanto, como o dispositivo em si estava offline[d]antes dele detach[ed], ele nunca é notificado sobre o detach. Portanto, o próprio dispositivo ainda tem suas informações de pool e pode ser movido para outro sistema e depois import[ed](em um estado degradado).

Para proteção adicional, detachvocê pode desconectar fisicamente o dispositivo após o offlinecomando, ainda antes de emitir o detachcomando.

Espero usar isso e offline, em seguida detach, importprocessar 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.

mpb
fonte
0

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.

soyayix
fonte