Eu tenho um sistema FreeNAS local e quero usar snapshots do ZFS para backups.
O FreeNAS possui as Tarefas de replicação internas 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.
Quero enviar o instantâneo para um arquivo e enviar esse arquivo compactado e criptografado para a máquina remota.
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 pool de armazenamento e mantenho todos os instantâneos por 30 dias.
Com cada instantâneo tirado, canalizo esse instantâneo para um arquivo.
- snapshot_file 1 possui todos os arquivos (digamos 2GB)
- snapshot_file 2 possui apenas as alterações no snapshot_file 1 (digamos 5MB)
- snapshot_file 3 mantém as alterações no snapshot_file 2; e assim por diante.
No dia 31, o snapshot_file 1 está sendo excluído (porque eu só quero as alterações dos últimos 30 dias)
Portanto, o snapshot_file 2 precisa armazenar todos os arquivos (2 GB de snapshot_file 1 + 5 MB são alterados)
Mas com essa abordagem todos os dias (a partir do dia 31), um novo arquivo de 2 GB deve ser criado e enviado para um sistema remoto. Isso é demais.
Qual seria a melhor abordagem para usar os instantâneos canalizados para um arquivo como uma estratégia de backup com um histórico de X dias?
PS: Eu sei que há muitos softwares de backup por aí (rdiff-backup, por exemplo), que eu poderia usar. Mas estou curioso para saber como isso pode ser feito.
zfs recv
do outro lado (em uma piscina,zfs set compression=gzip-9
por exemplo). Armazenar arquivos de instantâneo parece muito ineficiente para mim.Respostas:
Se você armazena os instantâneos nos arquivos, ao contrário do sistema de arquivos (por exemplo, com
zfs receive
), receio que isso não seja possível.ZFS no lado receptor
Se você usar o ZFS no lado de envio e de recebimento, poderá evitar a transferência de todo o instantâneo e transferir apenas as diferenças do instantâneo em comparação com o anterior:
O ZFS conhece os instantâneos e armazena blocos mútuos apenas uma vez. O fato de o sistema de arquivos entender os instantâneos permite excluir os antigos sem problemas.
Outro sistema de arquivos no lado de recebimento
No seu caso, você armazena os instantâneos em arquivos individuais, e seu sistema de arquivos não os conhece. Como você já percebeu, isso interrompe a rotação. Você precisa transmitir instantâneos inteiros, o que desperdiçará largura de banda e espaço de armazenamento, mas permitirá excluir instantâneos individuais. Eles não dependem um do outro. Você pode fazer snapshots incrementais como este:
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 incrementais dependem desse não incremental e você pode excluir os instantâneos antigos.
Ou você pode procurar outras soluções de backup. Há o rsnapshot , que usa
rsync
e links físicos. Faz um trabalho muito bom na rotação e é muito eficiente na largura de banda, pois requer um backup completo apenas uma vez.Depois, há bareos . Faz incrementais, que economizam largura de banda e espaço. Tem um recurso muito bom; Ele pode calcular um backup completo de um conjunto de incrementais. Isso permite excluir incrementais antigos. Mas é um sistema bastante complexo e destinado a configurações maiores.
A melhor solução, no entanto, é usar o ZFS no lado de recebimento. Será eficiente em largura de banda, armazenamento eficiente e muito mais rápido que as outras soluções. A única desvantagem real que consigo pensar é que você deve ter no mínimo 8 GiB de memória ECC nessa caixa (você pode usar 4 GiB se não executar nenhum serviço e usá-lo apenas
zfs receive
).fonte
rsnapshot
. Ou você pode iniciar um novo não incremental após um mês e excluir os incrementais anteriores.