web-dev-qa-db-fra.com

Comment garder deux dossiers automatiquement synchronisés?

Je voudrais avoir une copie synchronisée d'un dossier avec tout son sous-arbre.

Cela devrait fonctionner automatiquement de cette façon: chaque fois que je crée, modifie ou supprime des éléments du dossier d'origine, ces modifications doivent être automatiquement appliquées au dossier de synchronisation.

Quelle est la meilleure approche pour cette tâche?

BTW: Je suis sur Ubuntu 12.04

L’objectif final est d’avoir une copie de sauvegarde en temps réel séparée, sans utiliser de liens symboliques ni de mount . J’ai utilisé Ubuntu One pour synchroniser les données entre mes ordinateurs. synchronisation.

J'ai donc pensé ajouter une étape supplémentaire pour conserver une copie de sauvegarde de mes données:

  • Je garde mes données stockées dans un "dossier A"
  • J'ai besoin de la réponse de ma question actuelle pour créer une synchronisation unidirectionnelle de "dossier A" à "dossier B" (cron un script avec rsync? Pourrait être?). J'ai besoin que ce soit unidirectionnel seulement de A à B, aucune modification apportée à B ne doit être appliquée à A.
  • Je garde simplement le "dossier B" synchronisé avec Ubuntu One

    De cette manière, tout changement dans A sera appliqué à B, qui sera détecté à partir de U1 et synchronisé sur le nuage. Si quelque chose ne va pas et si U1 efface mes données sur B, je les ai toujours sur A.

Inspirée des commentaires de lanzz, une autre idée pourrait être d’exécuter rsync au démarrage pour sauvegarder le contenu d’un dossier sous Ubuntu One et de ne démarrer Ubuntu One qu’après la fin de la procédure.

Que pensez-vous de cela? Comment savoir quand se termine rsync?

43
Luca Borrione

Vous pouvez utiliser inotifywait (avec les drapeaux modify,create,delete activés) et rsync.

while inotifywait -r -e modify,create,delete /directory; do
    rsync -avz /directory /target
done
45
silgon

Vous avez besoin de quelque chose comme ceci: https://github.com/axkibe/lsyncd C'est un outil qui combine rsync et inotify - l'ancien est un outil qui reflète, avec le jeu d'options correct , un répertoire jusqu'au dernier bit. Ce dernier demande au noyau de notifier à un programme les modifications apportées à un répertoire de fichiers. Ça dit: 

Il agrège et combine les événements pendant quelques secondes, puis génère un (ou plusieurs) processus pour synchroniser les modifications. 

Mais - selon Digital Ocean à l'adresse https://www.digitalocean.com/community/tutorials/how-to-mirror-local-and-remote-directories-on-a-vps-with-lsyncd - it devrait être dans le référentiel Ubuntu!

J'ai des exigences similaires, et cet outil, que je n'ai pas encore testé, semble adapté à cette tâche.

12
Martin

Juste une simple modification de la réponse de @silgon:

while true; do inotifywait -r -e modify,create,delete /directory rsync -avz /directory /target done

(@silgon version plante parfois sous Ubuntu 16 si vous l'exécutez dans cron)

0
Denis Kuzin

Vous pouvez profiter de fschange . C’est une notification de changement de système de fichiers Linux. Le code source est téléchargeable à partir du lien ci-dessus, vous pouvez le compiler vous-même. fschange peut être utilisé pour suivre les modifications de fichier en lisant les données d'un fichier proc (/ proc/fschange). Lorsque des données sont écrites dans un fichier, fschange indique l’intervalle exact qui a été modifié au lieu de simplement indiquer que le fichier a été modifié. Si vous recherchez une solution plus avancée, je vous conseillerais de vérifier Resilio Connect . Il est multi-plateforme, il offre des options étendues d’utilisation et de surveillance. Comme il est basé sur BitTorrent, il est plus rapide que tout autre outil de synchronisation existant. C'était écrit en leur nom. 

0
Victoria