existem vários artigos e ferramentas na web sobre sincronização diferencial de instantâneos com btrfs .
minha pergunta aqui diz respeito ao bootstrapping do processo incremental.
consigo iniciar o backup incremental de instantâneos quando configuro o diretório de backup usando algo como
(src)$ sudo btrfs send initial_snapshot -f somedir/initial_snapshot.data"
(dst)$ sudo btrfs receive initial_snapshot -f somedir/initial_snapshot.data"
(assumindo que src
e dst
estão em dispositivos de bloco diferentes ou mesmo em máquinas diferentes).
existe uma maneira de começar com subvolumes sincronizados com rsync
? ou seja, posso inicializar a sincronização diferencial dessa maneira?
se eu fizer isso de maneira ingênua (tendo src
e dst
sincronizado rsync
e criado um instantâneo somente leitura em cada um), recebo o seguinte erro:
btrfs error: can not find parent snapshot
e sim, isso é compreensível.
mas existe uma maneira de 'convencer' o btrfs de que src
contém dst
os mesmos dados e que initial_snapshot
pode ser usado como pai para o instantâneo incremental?
Infelizmente, você não pode inicializar isso com nada além de uma operação de envio/recebimento. Transferências incrementais com envio/recebimento dependem de duas coisas:
btrfs subvolume show
comando, mas não há como definir esses valores sem modificá-los diretamente.rsync
deve atender tecnicamente a esse requisito se você não tiver reflinks envolvidos além daqueles entre instantâneos (ou seja, nada jamais usou os ioctls CLONE_RANGE ou EXTENT_SAME em qualquer coisa dentro do subvolume pai para o instantâneo de origem).Em teoria, é realmente possível contornar ambas as restrições, mas fazer isso exige um esforço significativo e requer conhecimento de nível muito baixo do BTRFS (e é extremamente arriscado).