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.