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:
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.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?
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
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.
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)
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.