GNU/Linux >> Tutoriels Linux >  >> Linux

RSync :Comment synchroniser dans les deux sens ?

Il suffit de l'exécuter deux fois, avec le mode "plus récent" (indicateur -u ou --update) plus -t (pour copier l'heure de modification du fichier), -r (pour les dossiers récursifs) et -v (pour une sortie détaillée pour voir ce que c'est faire):

rsync -rtuv /path/to/dir_a/* /path/to/dir_b
rsync -rtuv /path/to/dir_b/* /path/to/dir_a

Cela ne gérera pas les suppressions, mais je ne suis pas sûr qu'il existe une bonne solution à ce problème avec uniquement une synchronisation périodique.


Connaissez-vous Unison File Synchronizer ?

Unison est un outil de synchronisation de fichiers pour Unix et Windows. Il permet de stocker deux répliques d'un ensemble de fichiers et de répertoires sur des hôtes différents (ou des disques différents sur le même hôte), de les modifier séparément, puis de les mettre à jour en propageant les modifications de chaque réplique à l'autre. ...

Notez également qu'il est résistant aux pannes :

Unisson est résistant à l'échec. Il est prudent de laisser les répliques et ses propres structures privées dans un état sensible à tout moment, même en cas de terminaison anormale ou de panne de communication.


Vous devez exécuter rsync deux fois et je recommande de l'exécuter avec -au :

rsync -au /local/source/* /remote/destination
rsync -au /remote/destination/* /local/source

-a (a pour archive) est un raccourci pour -rlptgoD :

  • -r Parcourir les sous-répertoires
  • -l Synchroniser également les liens symboliques
  • -p Synchroniser également les autorisations de fichiers
  • -t Synchroniser également les heures de modification des fichiers
  • -g Synchroniser également les groupes de fichiers
  • -o Synchroniser également le propriétaire du fichier
  • -D Synchronisez également les fichiers spéciaux (non réguliers/méta)

Fondamentalement, chaque fois que vous souhaitez créer une copie identique un à un en utilisant rsync , vous devez toujours utiliser -a car c'est ce à quoi la plupart des utilisateurs s'attendent lorsqu'ils parlent de "synchronisation ". D'autres réponses ici semblent ignorer que parfois le contenu d'un fichier reste inchangé mais que son propriétaire peut avoir changé ou que ses autorisations d'accès peuvent avoir changé et dans ce cas rsync ne synchroniserait pas le fichier, ce qui pourrait être fatal.

Mais vous avez également besoin de -u comme cela indique rsync pour laisser complètement n'importe quel fichier/dossier seul, au cas où il existe déjà à la destination et a une date de dernière modification plus récente. Sans -u rsync se synchroniserait, qu'un fichier/dossier soit plus récent ou non.

Veuillez noter que cette solution ne peut pas gérer les fichiers supprimés. La gestion des suppressions n'est pas facilement possible, car considérez la situation suivante :un fichier a été supprimé à la source, comment procéder maintenant ? rsync savoir si ce fichier a déjà existé et a été supprimé (dans ce cas, il doit également être supprimé à la destination) ou s'il n'a jamais existé à la source (dans ce cas, il doit être copié à partir de la destination). Ces deux situations semblent identiques à rsync il ne peut donc pas savoir comment réagir correctement. Cela n'aidera pas à synchroniser dans l'autre sens car cela peut conduire à la même situation :un fichier existe à la source mais pas à la destination. Pourquoi? N'a-t-il jamais existé à destination ou a-t-il été supprimé ? Les deux cas semblent identiques à rsync .

Les outils de synchronisation qui peuvent synchroniser de manière fiable les fichiers supprimés gèrent généralement un journal de synchronisation sur toutes les opérations de synchronisation passées. Si ce journal révèle qu'il y avait autrefois un fichier et qu'il a été synchronisé mais qu'il est maintenant manquant, il est clair qu'il a été supprimé. S'il n'y a jamais eu un tel fichier selon le journal, il doit être synchronisé. En stockant toutes les entrées de journal avec des horodatages, il est même possible qu'un fichier supprimé revienne et soit supprimé plusieurs fois, mais l'outil de synchronisation saura toujours quoi faire et le résultat est toujours correct. rsync n'a pas un tel journal, il s'appuie uniquement sur l'état actuel du fichier des deux côtés de l'opération.

Vous pouvez cependant créer vous-même une commande de synchronisation en utilisant rsync et un peu de script shell POSIX qui se rapproche déjà beaucoup d'un outil de synchronisation comme décrit ci-dessus. Comme j'avais moi-même besoin d'un tel outil, voici une réponse sur Stackoverflow qui vous guide dans la création d'un tel script.


Linux
  1. Synchroniser des répertoires dans les deux sens avec Rsync ?

  2. Utiliser rsync pour synchroniser les fichiers

  3. Comment trier un fichier sur place

  4. Comment puis-je utiliser rsync avec un système de fichiers FAT ?

  5. Comment synchroniser des fichiers/dossiers à partir d'une date spécifique ?

Comment créer un fichier sous Linux

Comment créer un fichier Tar Gz

Comment décompresser (ouvrir) le fichier Gz

Comment créer un lien symbolique vers un fichier sous Linux

Comment utiliser Rsync pour copier/synchroniser des fichiers entre des serveurs

Comment faire écho dans le fichier