Eu usaria envio / recebimento incremental do ZFS. Ele deve ser mais eficiente do que rsync
, pois o ZFS sabe o que foi alterado desde o instantâneo anterior sem precisar explorar todo o sistema de arquivos.
Supondo que você deseja fazer backup completo de um nome de sistema de arquivos datapool/fs
.
Primeiro, você cria um pool para armazenar seu backup no servidor de destino e um instantâneo recursivo no pool de origem:
dest # zpool create datapool ...
source # zfs snapshot -r datapool/fs@snap1
você envia os dados completos como um backup inicial:
source # zfs send -R datapool/fs@snap1 | ssh dest zfs receive datapool/fs
Na próxima semana (ou em qualquer período que você desejar), crie um segundo instantâneo no pool de origem e envie-o incrementalmente no destino. Naquela época, o ZFS é inteligente o suficiente para enviar apenas o que foi alterado durante a semana (arquivos excluídos, criados e modificados). Quando um arquivo é modificado, ele não é enviado como um todo, mas somente os blocos modificados são transmitidos e atualizados.
source # zfs snapshot -r datapool/fs@snap2
source # zfs send -ri snap1 datapool/fs@snap2 |
ssh dest zfs receive -F datapool/fs
Repita a operação incrementando os números dos instantâneos sempre que fizer backup.
Remova os instantâneos antigos não utilizados nos servidores quando você não precisar mais deles.
Se você tiver restrições de largura de banda, poderá compactar / descompactar dados rapidamente, por exemplo, inserindo comandos gzip
/ zip
no pipeline ou ativando a compactação ssh.
source # zfs send -ri snap1 datapool/fs@snap2 | gzip |
ssh dest "gunzip | zfs receive -F datapool/fs"
Você também pode aproveitar mbuffer
para obter um uso de largura de banda mais estável, conforme descrito neste página :
dest # mbuffer -s 128k -m 1G -I 9090 | zfs receive datapool/fs
source # zfs send -i snap2 datapool/fs@snap3 |
mbuffer -s 128k -m 1G -O w.x.y.z:9090
Observação: o sinalizador zfs -r
não está disponível para implementações não ZFS do Solaris, consulte link . Nesse caso, não use o sinalizador -F
no destino, mas em vez disso, reverta explicitamente os conjuntos de dados. Se novos conjuntos de dados tiverem sido criados na origem, envie-os primeiro de forma independente antes de fazer o snapshot + envio / recebimento incremental.
É claro que, se você tiver apenas um sistema de arquivos para backup sem uma hierarquia de conjunto de dados subjacente ou se desejar executar backups independentes, o backup incremental será mais simples de implementar e deverá funcionar de forma idêntica em qualquer implementação do ZFS:
T0:
zfs snapshot datapool/fs@snap1
zfs send datapool/fs@snap1 | ssh dest zfs receive datapool/fs
T1:
zfs snapshot datapool/fs@snap2
zfs send -i snap1 datapool/fs@snap2 |
ssh dest zfs receive -F datapool/fs