Instantâneo do ZFS para arquivo como backup com rotação

12

Eu tenho um sistema FreeNAS local e quero usar instantâneos do ZFS para backups.
O FreeNAS tem as Tarefas de Replicação incorporadas que usam

zfs send snapshot_name

para enviar um instantâneo para um sistema remoto. Mas isso precisa de um sistema com o ZFS do outro lado.

Eu quero enviar o instantâneo para um arquivo e enviar esse arquivo compactado e criptografado para o computador remoto.

Isso é possível com

zfs send snapshot_name | gzip | openssl enc -aes-256-cbc -a -salt > file.gz.ssl

Todos os dias faço um instantâneo do conjunto de armazenamento e mantenho todos os instantâneos por 30 dias.
Com cada instantâneo capturado, canalizo esse instantâneo para um arquivo.
- snapshot_file 1 tem todos os arquivos nele (digamos 2GB)
- snapshot_file 2 tem apenas as alterações para snapshot_file 1 (digamos 5MB)
- snapshot_file 3 guarda as alterações no snapshot_file 2; e assim por diante.

No dia 31, snapshot_file 1 está sendo excluído (porque quero apenas as alterações dos últimos 30 dias)

Portanto snapshot_file 2 precisa conter todos os arquivos (2GB de snapshot_file 1 + 5MB changes)

Mas com essa abordagem todos os dias (a partir do dia 31) um novo arquivo de 2GB precisa ser criado e enviado para um sistema remoto. Isso é muita sobrecarga.

Qual seria a melhor abordagem para usar snapshots canalizados para um arquivo como uma estratégia de backup com um histórico de X dias?

P.S .: Eu sei que existem muitos softwares de backup (rdiff-backup, por exemplo), que eu poderia usar. Mas estou curioso para saber como isso pode ser feito.

    
por Martin Grohmann 05.02.2014 / 21:18

1 resposta

10

Se você armazenar os instantâneos em arquivos, ao contrário do sistema de arquivos (por exemplo, com zfs receive ), receio, isso não é possível.

ZFS no lado de recebimento

Se você usa o ZFS no envio e no lado de recepção, pode evitar ter para transferir todo o instantâneo e apenas transferir as diferenças do instantâneo em comparação com o anterior:

ssh myserver 'zfs send -i pool/dataset@2014-02-04 pool/dataset@2014-02-05' | \
  zfs receive

O ZFS sabe sobre os instantâneos e armazena blocos mútuos apenas uma vez. Tendo o sistema de arquivos entender os instantâneos permite que você exclua os antigos sem problemas.

Outro sistema de arquivos no lado de recebimento

No seu caso, você armazena os instantâneos em arquivos individuais e o seu sistema de arquivos não tem conhecimento dos instantâneos. Como você já percebeu, isso quebra a rotação. Você ou tem que transmitir instantâneos inteiros, o que desperdiçará largura de banda e armazenamento espaço, mas permite excluir instantâneos individuais. Eles não dependem de entre si. Você pode fazer instantâneos incrementais como este:

ssh myserver 'zfs send -i pool/dataset@2014-02-04 pool/dataset@2014-02-05' \
  > incremental-2014-02-04:05

Para restaurar um instantâneo incremental, você também precisa dos instantâneos anteriores. Isso significa que você não pode excluir os incrementais antigos.

Soluções possíveis

Você pode fazer incrementais como mostrado no meu último exemplo e fazer um novo não incremental a cada mês. Os novos incrementos dependem disso não incremental e você está livre para excluir os instantâneos antigos.

Ou você pode procurar outras soluções de backup. Há sim rsnapshot , que usa rsync e hard links. Ele faz um trabalho muito bom em rotação e é muito eficiente na largura de banda, já que requer um backup completo apenas uma vez.

Depois, há bareos . Faz incrementais, que têm economia de espaço e largura de banda. Tem um recurso muito bom; pode calcular um backup completo de um conjunto de incrementais. Isso permite que você exclua o antigo incrementais. Mas é um sistema bastante complexo e destinado a configurações maiores.

A melhor solução, no entanto, é usar o ZFS no lado do recebimento. Será largura de banda eficiente, armazenamento eficiente e muito mais rápido do que o outro soluções. A única desvantagem que posso pensar é que você deve ter um mínimo de 8 GiB de memória ECC nessa caixa (você pode ficar bem com 4 GiB se não execute nenhum serviço e use-o apenas em zfs receive ).

    
por 05.02.2014 / 22:16