btrfs sincronização de snapshot incremental: bootstrap com rsync

1

existem vários artigos e ferramentas na web sobre sincronização diferencial de snapshots com btrfs .

minha pergunta aqui diz respeito ao bootstrapping do processo incremental.

Eu sou capaz de iniciar o backup incremental de instantâneos quando eu configurar 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 estejam em dispositivos de bloco diferentes ou mesmo em máquinas diferentes).

Existe uma maneira de começar com subvolumes que são sincronizados com rsync ? Ou seja, posso fazer o bootstrap da sincronização diferencial dessa maneira?

se eu fizer isso de maneira ingênua (com src e dst sincronizados com rsync e criação de um instantâneo somente leitura em cada um deles), recebo o seguinte erro:

btrfs error: can not find parent snapshot

e sim, isso é compreensível.

mas há uma maneira de "convencer" btrfs de que src e dst contêm os mesmos dados e que o initial_snapshot pode ser usado como pai para o instantâneo incremental?

    
por hiro protagonist 17.01.2018 / 10:37

1 resposta

1

Infelizmente, não é possível fazer o bootstrap com nada além de uma operação de envio / recebimento. Transferências incrementais com envio / recebimento dependem de duas coisas:

  1. Os atributos 'UUID recebido' do filho de subvolume relevante, o volume de destino, devem corresponder corretamente ao atributo 'UUID' dos subvolumes correspondentes na origem. Você pode verificar isso facilmente com o comando btrfs subvolume show , mas não é possível definir esses valores antes de modificar diretamente esses valores.
  2. Os blocos no subvolume pai usados para o envio incremental devem corresponder entre a origem e o destino. Em outras palavras, se você estiver enviando uma atualização incremental que tenha alterações no arquivo X, a cópia da versão anterior do arquivo X no volume de destino deverá ser idêntica à cópia original do arquivo X no volume de origem. Estritamente falando, rsync deve tecnicamente atender a esse requisito se você não tiver nenhum outro reflexo envolvido além dos snapshots (ou seja, nada jamais usou os iCLTS CLONE_RANGE ou EXTENT_SAME em nada dentro do subvolume pai para a captura instantânea de origem).

Em teoria, é realmente possível contornar ambas as restrições, mas isso exige um esforço significativo e requer um conhecimento de nível muito baixo do BTRFS (e é extremamente arriscado).

    
por 17.01.2018 / 20:36

Tags