Synchronisation de contenu

Unison, l'outil dont je me sers pour synchroniser des contenus entre de nombreux périphériques n'est plus présent dans les dépôts officiels de Fedora depuis la version 34. Petite note sur la stratégie adoptée pour contourner cette absence.

Synchronisations

Unison a un énorme avantage par rapport à d'autres solutions de synchronisation de contenus : il est bi-directionnel, c'est à dire que l'on peut synchroniser A vers B mais aussi B vers A. Je l'utilise depuis plusieurs années pour appliquer les synchronisations suivantes :

  • Synchronisation des données de mon PC avec celles du portable. Les modifications se font 70% du temps côté PC (DataPC -> DataLT) mais il m'arrive aussi de faire des modifications côté portable (DataLT -> DataPC).
  • Synchronisation des bédés stockées sur une clé USB branchée à mon PC vers un disque externe branché à la Raspi et montée en NFS sur le PC (BdsPC -> BdsRaspi).
  • Idem pour mes bouquins (synchro BooksPC -> BooksRaspi).
  • Les bds stockées dans la Raspi sont copiables sur le portable (BdsRaspi -> BdsLT).
  • Idem pour les bouquins (BooksRaspi -> BooksLT) si ce n'est que l'organisation des bouquins, gérées via Calibre, peut aussi être modifiée sur le portable. Il faut donc mettre à jour la Raspi (BooksLT -> BooksRaspi) ainsi que le PC (BooksRaspi -> BooksPC).

Ce qui nous donne le diagramme suivant :

Diagramme de synchronisation

Adaptations pour rsync

Le portable me sert de plus en plus de mediacenter ; je n'y fais plus que très peu d'éditions / modifications de contenu. Les synchronisations bi-directionnelles existantes peuvent passer au second plan dans un premier temps. Le diagramme serait donc simplifié :

Diagramme de synchronisation

Là, rsync devient un outil pertinent avec quelque chose du genre :

rsync -vcrtzh --delete --force --progress <source> <destination>

Synchronisation bi-directionnelle avec rsync ?

Je ne sais pas encore si c'est possible. Il va falloir regarder ce qui existe déjà. Pour faire avec rsync ce qui se fait avec unsion, on pourrait peut-être :

(1) Lancer deux synchronisations en mode dry

rsync -vcrtzh --delete --force --dry-run <from> <to>
rsync -vcrtzh --delete --force --dry-run <to> <from>

(2) Combiner les deux listes de résultats pour présenter dans quelle direction se propagent les changements (modifications, additions, suppressions)

(3) Donner la possibiliter de désactiver un changement

(4) Construire une liste d'exclusion pour chacune des deux synchronisations

(5) Lancer les deux synchronisations

rsync -vcrtzh --exclude <list1> --delete --force --progress <from> <to>
rsync -vcrtzh --exclude <list2> --delete --force --progress <to> <from>
Solutions existantes