O que parece estar procurando é a funcionalidade --link-dest
que faz parte do rsync. O que você parece descrever é exatamente como dirvish opera.
A opção link-dest cria links físicos do caminho de destino para outra cópia da estrutura.
Com o dirvish, você executa um backup inicial, que apenas usa o rsync.
Depois disso, cada volta adicional é vinculada ao backup anterior bem-sucedido. Significado não há duplicação de arquivos. Você pode acessar diretamente qualquer backup único de dentro do cofre, e cada backup é um backup completo e completo. Você pode remover backups anteriores a qualquer momento.
Aqui está um script que você pode usar para demonstrar.
# create test area
mkdir -p /tmp/backuptest/{source,dest1,dest2,dest3}
for a in 'seq 10' ; do dd if=/dev/urandom of=/tmp/backuptest/source/file$a bs=1M count=1; done
# look
find /tmp/backuptest/ -ls ; du find /tmp/backuptest/
# initial backup
rsync -va /tmp/backuptest/source/ /tmp/backuptest/dest1/
# look
find /tmp/backuptest/ -ls ; du find /tmp/backuptest/
# make chagnes
rm /tmp/backuptest/source/file[2-4]
cat /tmp/backuptest/source/file[6-7] >/tmp/backuptest/source/file11
# new backup linked to previous
rsync -va /tmp/backuptest/source/ /tmp/backuptest/dest2/ --link-dest=/tmp/backuptest/dest1/
# look
find /tmp/backuptest/ -ls ; du find /tmp/backuptest/
# make changes
rm /tmp/backuptest/source/file5
cat /tmp/backuptest/source/file[5-7] >/tmp/backuptest/source/file12
# new backup linked to previous
rsync -va /tmp/backuptest/source/ /tmp/backuptest/dest3/ --link-dest=/tmp/backuptest/dest2/
# look
find /tmp/backuptest/ -ls ; du find /tmp/backuptest/
# remove dest1
rm -r /tmp/backuptest/dest1/
# see your dest2, and dest3 are still complete backups for the state at those times.
find /tmp/backuptest/ -ls ; du find /tmp/backuptest/