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?