Erreur de rdiff-backup pour une sauvegarde sur hôte distant

Bonjour,

J’utilise massivement rdiff-backup pour mes sauvegardes, mais j’ai actuellement un problème avec deux de mes tâches de sauvegarde.

En fait, j’ai trois machines : Nut, Worm et Lookout. Nut et Worm sont sous Debian 10 et Lookout est sous Raspbian 10.
Nut est la machine qui lance toutes les sauvegardes. J’ai deux tâches pour chaque hôte : une qui lance une sauvegarde vers un dossier local sur Nut et un qui relance la même tâche vers un dossier sur Worm (Nut et Worm étant à 494 km l’un de l’autre, ça semble une bonne idée).
J’ai donc une tâche pour sauvegarder Lookout sur Nut qui fonctionne, et une tâche qui sauvegarde Lokout sur Worm :

┌ (gilles@Nut + 0) (11/12/20 - 11:03:00) (0.10 - 0%) (~)
└% sudo /usr/bin/rdiff-backup --exclude /var/lib/libvirt --exclude /var/cache --exclude /var/tmp --exclude /var/log --include /etc --include /opt --include /root --include /srv --include /home --include /var --exclude / lookout.almtesh.net::/ save@worm.home.almtesh.net::servers/lookout.almtesh.net 
Warning: Permanently added the RSA host key for IP address '2001:bc8:3335:ff00::2' to the list of known hosts.
Warning: Permanently added the RSA host key for IP address '2a01:e0a:12c:3941::1' to the list of known hosts.
Previous backup seems to have failed, regressing destination now.
Exception 'CCPP index out of order: ('var', 'lib', 'apt', 'lists', 'raspbian.raspberrypi.org_raspbian_dists_buster_main_binary-armhf_Packages') ('var', 'lib', 'dpkg', 'info', 'base-passwd.md5sums')' raised of class '<type 'exceptions.AssertionError'>':
  File "/usr/lib/python2.7/dist-packages/rdiff_backup/Main.py", line 304, in error_check_Main
    try: Main(arglist)
  File "/usr/lib/python2.7/dist-packages/rdiff_backup/Main.py", line 324, in Main
    take_action(rps)
  File "/usr/lib/python2.7/dist-packages/rdiff_backup/Main.py", line 280, in take_action
    elif action == "backup": Backup(rps[0], rps[1])
  File "/usr/lib/python2.7/dist-packages/rdiff_backup/Main.py", line 343, in Backup
    backup.Mirror_and_increment(rpin, rpout, incdir)
  File "/usr/lib/python2.7/dist-packages/rdiff_backup/backup.py", line 51, in Mirror_and_increment
    DestS.patch_and_increment(dest_rpath, source_diffiter, inc_rpath)
  File "/usr/lib/python2.7/dist-packages/rdiff_backup/connection.py", line 450, in __call__
    return apply(self.connection.reval, (self.name,) + args)
  File "/usr/lib/python2.7/dist-packages/rdiff_backup/connection.py", line 370, in reval
    if isinstance(result, Exception): raise result

Traceback (most recent call last):
  File "/usr/bin/rdiff-backup", line 30, in <module>
    rdiff_backup.Main.error_check_Main(sys.argv[1:])
  File "/usr/lib/python2.7/dist-packages/rdiff_backup/Main.py", line 304, in error_check_Main
    try: Main(arglist)
  File "/usr/lib/python2.7/dist-packages/rdiff_backup/Main.py", line 324, in Main
    take_action(rps)
  File "/usr/lib/python2.7/dist-packages/rdiff_backup/Main.py", line 280, in take_action
    elif action == "backup": Backup(rps[0], rps[1])
  File "/usr/lib/python2.7/dist-packages/rdiff_backup/Main.py", line 343, in Backup
    backup.Mirror_and_increment(rpin, rpout, incdir)
  File "/usr/lib/python2.7/dist-packages/rdiff_backup/backup.py", line 51, in Mirror_and_increment
    DestS.patch_and_increment(dest_rpath, source_diffiter, inc_rpath)
  File "/usr/lib/python2.7/dist-packages/rdiff_backup/connection.py", line 450, in __call__
    return apply(self.connection.reval, (self.name,) + args)
  File "/usr/lib/python2.7/dist-packages/rdiff_backup/connection.py", line 370, in reval
    if isinstance(result, Exception): raise result
AssertionError: CCPP index out of order: ('var', 'lib', 'apt', 'lists', 'raspbian.raspberrypi.org_raspbian_dists_buster_main_binary-armhf_Packages') ('var', 'lib', 'dpkg', 'info', 'base-passwd.md5sums')
┌ (gilles@Nut + 1) (11/12/20 - 11:04:37) (0.30 - 0%) (~)
└% Fatal Error: Lost connection to the remote system
Fatal Error: Lost connection to the remote system

J’ai la même chose pour la sauvegarde de Worm, la partie de Worm vers Nut fonctionne sans problème, mais la sauvegarde de Worm vers Worm (oui, via Nut, je sais, ce n’est pas très optimal) ne fonctionne pas non plus :

┌ (gilles@Nut + 0) (11/12/20 - 11:16:11) (0.35 - 0%) (~)
└% sudo /usr/bin/rdiff-backup --exclude /var/lib/libvirt --exclude /var/cache --exclude /var/tmp --exclude /var/log --exclude /mnt/data/home/gilles/Téléchargements --exclude /mnt/data/home/gilles/Bureau --exclude /mnt/data/home/gilles/Documents --exclude /mnt/data/home/gilles/Images --exclude /mnt/data/home/gilles/Projets --exclude /mnt/data/home/gilles/Sync --exclude /srv/netboot/systems --include /etc --include /opt --include /root --include /srv --include /home --include /var --exclude / worm.home.almtesh.net::/ save@worm.home.almtesh.net::servers/lookout.almtesh.net
Warning: Permanently added the RSA host key for IP address '2a01:e0a:12c:3941::1' to the list of known hosts.
Exception 'CCPP index out of order: ('home', 'gilles', '.config', 'syncthing', 'index-v0.14.0.db', '004210.log') ('var', 'lib', 'dpkg', 'info', 'libcephfs2:amd64.symbols')' raised of class '<type 'exceptions.AssertionError'>':
  File "/usr/lib/python2.7/dist-packages/rdiff_backup/Main.py", line 304, in error_check_Main
    try: Main(arglist)
  File "/usr/lib/python2.7/dist-packages/rdiff_backup/Main.py", line 324, in Main
    take_action(rps)
  File "/usr/lib/python2.7/dist-packages/rdiff_backup/Main.py", line 280, in take_action
    elif action == "backup": Backup(rps[0], rps[1])
  File "/usr/lib/python2.7/dist-packages/rdiff_backup/Main.py", line 343, in Backup
    backup.Mirror_and_increment(rpin, rpout, incdir)
  File "/usr/lib/python2.7/dist-packages/rdiff_backup/backup.py", line 51, in Mirror_and_increment
    DestS.patch_and_increment(dest_rpath, source_diffiter, inc_rpath)
  File "/usr/lib/python2.7/dist-packages/rdiff_backup/connection.py", line 450, in __call__
    return apply(self.connection.reval, (self.name,) + args)
  File "/usr/lib/python2.7/dist-packages/rdiff_backup/connection.py", line 370, in reval
    if isinstance(result, Exception): raise result

Traceback (most recent call last):
  File "/usr/bin/rdiff-backup", line 30, in <module>
    rdiff_backup.Main.error_check_Main(sys.argv[1:])
  File "/usr/lib/python2.7/dist-packages/rdiff_backup/Main.py", line 304, in error_check_Main
    try: Main(arglist)
  File "/usr/lib/python2.7/dist-packages/rdiff_backup/Main.py", line 324, in Main
    take_action(rps)
  File "/usr/lib/python2.7/dist-packages/rdiff_backup/Main.py", line 280, in take_action
    elif action == "backup": Backup(rps[0], rps[1])
  File "/usr/lib/python2.7/dist-packages/rdiff_backup/Main.py", line 343, in Backup
    backup.Mirror_and_increment(rpin, rpout, incdir)
  File "/usr/lib/python2.7/dist-packages/rdiff_backup/backup.py", line 51, in Mirror_and_increment
    DestS.patch_and_increment(dest_rpath, source_diffiter, inc_rpath)
  File "/usr/lib/python2.7/dist-packages/rdiff_backup/connection.py", line 450, in __call__
    return apply(self.connection.reval, (self.name,) + args)
  File "/usr/lib/python2.7/dist-packages/rdiff_backup/connection.py", line 370, in reval
    if isinstance(result, Exception): raise result
AssertionError: CCPP index out of order: ('home', 'gilles', '.config', 'syncthing', 'index-v0.14.0.db', '004210.log') ('var', 'lib', 'dpkg', 'info', 'libcephfs2:amd64.symbols')
┌ (gilles@Nut + 1) (11/12/20 - 11:17:18) (0.50 - 0%) (~)
└% Fatal Error: Lost connection to the remote system
Fatal Error: Lost connection to the remote system

Il faut savoir que les tâches de sauvegarde Worm vers Nut, Lookout vers Nut et Nut vers Worm fonctionnent très bien.

J’ai trouvé une solution de contournement.
En fait, il s’agit d’une seconde sauvegarde, j’ai tout simplement changé la façon de faire la sauvegarde.
Je fais la première sauvegarde, puis je la réplique en enlevant toutes les options --include et --exclude, je mets la sauvegarde primaire en source, puis je rajoute l’option --backup-mode et le tour est réglé.