Sincronize pools do zfs rapidamente

3

Meu servidor salva backups incrementais em um volume zfs. Como os dados são muito semelhantes, posso reduzir significativamente o crescimento - há cerca de 500 GB de "novos dados" todos os dias, mas o pool cresce apenas em torno de 5 a 10 GB / dia; o restante é armazenado em deduplicação / compactação.

Eu quero copiar o backup para discos usb criptografados, que também configuro como volumes zfs por esse motivo. Quando sincronizo o backup com rsync ou zfs send / recieve, parece que todos os dados são transferidos novamente (apenas armazenados como dedup na unidade usb). Devido a isso, o backup atualmente leva mais de 24 horas, o que impossibilita backups diários.

Existe uma maneira de fazer backup disso mais rapidamente?

    
por user19760 31.10.2016 / 18:56

1 resposta

3

O conselho de Michael Hampton está certo e as páginas de manual do Solaris são muito boas, mas o conceito não é tão fácil de entender para um iniciante. Vou descrever os pontos que experimentei ao escrever meus scripts.

Essencialmente, você primeiro faz um snapshot x e um send/recv completo como de costume:

# Initial send, destroy all filesystems on the destination
# pool which are not present on the source pool.
zfs snapshot pool0@snap0
zfs send -R pool0@snap0 | zfs recv -Fdu pool1

Depois disso, você faz o instantâneo x+1 e envia-o de forma incremental. Você pode excluir snaps antigos na fonte, mas você precisa manter o último em (mais recente) para que as diferenças possam ser calculadas. Se você perder / destruir seu último instantâneo na fonte, terá que recomeçar com um envio inicial completo!

# incremental send, destroy all filesystems on the destination
# pool which are not present on the source pool. Afterwards, old
# snapshots can be destroyed.
zfs snapshot pool0@snap1
zfs send -R -I pool0@snap0 pool0@snap1 | zfs recv -Fdu pool1
zfs destroy pool0@snap0

# Afterwards, repeat and replace snap1 with snap2 and snap0 with snap1 etc.

Alguns conselhos de minhas próprias experiências:

  • Excluir o último instantâneo significa que você precisa começar de novo, portanto, tenha cuidado, verifique os valores de retorno bem-sucedidos em seu script primeiro.
  • Você pode numerar os snaps ou usar date - a numeração é mais fácil, mas as datas são melhores se você observar os registros e / ou fizer instantâneos freqüentes.
  • Ao experimentar opções e tentar simular -nv , saiba que isso funciona para envio, mas falhará com recv, porque não há nada para receber. Isso não é óbvio nem no manual nem nas mensagens de erro.
  • Os instantâneos ocupam espaço até serem destruídos e "bloquear" seu espaço excluído. Se você fizer backup com freqüência, isso não é um problema. Se você usar mais de um disco / pool de destino e / ou backup raramente, poderá haver restrições de espaço em disco. No illumos / OpenZFS existe o recurso bookmarks , que pode ser uma forma de contornar esse problema. Infelizmente, atualmente suporta apenas instantâneos únicos em vez de recursivos, por isso você tem que adicionar o código recursivo você mesmo.
  • Se você não quiser usar / escrever seu próprio, use um dos muitos no Github. Eu acho que znapzend é o mais maduro deles.
por 02.11.2016 / 10:05