Criando um backup diferencial vinculado (tentando com rsync)

1

Estou tentando criar um script que crie ambos um backup de snapshot e um backup diferencial, mas com links físicos em vez de arquivos duplicados . Em outras palavras:

  • Todos os arquivos inalterados entre o backup do instantâneo atual e o instantâneo anterior têm um link físico rígido em vez de serem duplicados;
  • Todos os arquivos no backup diferencial são links físicos para os arquivos no instantâneo atual.


Deixe-me tentar esclarecer. Seja:

  • $SRC : Árvore de origem, arquivos originais dos quais será feito backup
  • $PREV : backup de snapshot anterior
  • $SNAPSHOT : backup de snapshot atual
  • $DIFF : backup diferencial (apenas arquivos alterados)
  • $RF : sinalizadores rsync, como -aPhvv


Eu posso criar o instantâneo vinculado com o seguinte comando:

rsync $RF --link-dest=$PREV $SRC $SNAPSHOT

Isso funciona perfeitamente bem.


Agora quero criar outra árvore, $DIFF , com apenas as diferenças entre $SNAPSHOT e $PREV .

Eu posso fazer exatamente isso com o seguinte comando:

rsync $RF --compare-dest=$PREV $SNAPSHOT $DIFF

Isso também funciona bem e está muito próximo do que eu quero alcançar. O único problema é que todos os arquivos que mudaram entre $PREV e $SNAPSHOT agora estão duplicados em $DIFF , eu gostaria que eles fossem hard links para $SNAPTSHOT em vez de cópias simples.


Da perspectiva do rsync, o que eu quero fazer é o seguinte: depois que o instantâneo é criado, ele se torna minha nova árvore de origem, $SNAPSHOT . O destino é $DIFF . A base de comparação com a fonte é $PREV , então o argumento --compare-dest=$PREV deve cuidar disso. Isso, como o comando anterior, copiaria apenas os arquivos alterados entre o instantâneo anterior e o instantâneo atual. Agora, para que os arquivos sejam copiados, quero que eles sejam comparados aos arquivos em $ SNAPSHOT primeiro e, em seguida, se existirem, vinculados a eles em vez de copiados. Isso é o que o --link-dest=$SNAPSHOT faz e também funciona. Ambas as opções funcionam bem individualmente, compare-dest cria uma cópia diferencial e link-dest cria uma árvore vinculada, mas eu quero misturar ambas, da maneira descrita acima, que rsync não permite.

Se o rsync permitisse, o que eu queria fazer:

# Create the snapshot backup:
myhost:~$ rsync $RF --link-dest=$PREV $SRC $SNAPSHOT
     // successful. output suppressed...

# Try to create the hard linked differential backup:
myhost:~$ rsync $RF --compare-dest=$PREV --link-dest=$SNAPSHOT $SNAPSHOT $DIFF
rsync: You may not mix --compare-dest, --copy-dest, and --link-dest.
rsync error: syntax or usage error (code 1) at main.c(1567) [client=3.1.2]


Alguma idéia de como criar a árvore $DIFF de forma que os arquivos nessa árvore sejam todos links para $SNAPSHOT ? Ou outras sugestões sobre como alcançar meus objetivos com outros comandos do Linux?

    
por Fabiano 14.09.2016 / 19:40

1 resposta

0

Você pode fazer isso criando $DIFF e $SNAPSHOT na ordem oposta. Primeira execução

rsync $RF --compare-dest=$PREV $SRC $DIFF

Em seguida, crie uma cópia com link físico do backup anterior:

cp -al $PREV $SNAPSHOT

Finalmente, o hardlink copia as alterações para lá:

cp -al $DIFF $SNAPSHOT

Nota: Eu não testei isso, então não posso garantir que funciona.

    
por 16.09.2016 / 15:48