Ich möchte eine synchronisierte Kopie eines Ordners mit seinem gesamten Teilbaum haben.
Dies sollte automatisch so funktionieren: Wenn ich Inhalte aus dem ursprünglichen Ordner erstelle, ändere oder lösche, sollten diese Änderungen automatisch auf den Synchronisierungsordner angewendet werden.
Welches ist der beste Ansatz für diese Aufgabe?
Übrigens: Ich bin auf Ubuntu 12.04
Das endgültige Ziel ist eine separate Echtzeit-Sicherungskopie ohne Verwendung von Symlinks oder Mount. Ich habe Ubuntu One verwendet, um Daten zwischen meinen Computern zu synchronisieren. Nach einer Weile ist ein Fehler aufgetreten und alle meine Daten sind während einer Synchronisierung verloren gegangen.
Daher habe ich mir überlegt, einen weiteren Schritt hinzuzufügen, um eine Sicherungskopie meiner Daten zu erhalten:
- Ich speichere meine Daten in einem "Ordner A"
- Ich benötige die Antwort auf meine aktuelle Frage, um eine Einweg-Synchronisierung von "Ordner A" mit "Ordner B" zu erstellen (
cron
ein Skript mitrsync
? Könnte sein?). Ich brauche es nur in eine Richtung von A nach B, Änderungen an B dürfen nicht auf A angewendet werden. - Ich halte einfach "Ordner B" mit Ubuntu One synchronisiert.
Auf diese Weise wird jede Änderung in A auf B übertragen, die von U1 erkannt und mit der Cloud synchronisiert wird. Wenn etwas schief geht und U1 meine Daten auf B löscht, habe ich sie immer auf A.
Inspiriert von den Kommentaren von lanzz könnte eine andere Idee darin bestehen, rsync beim Start auszuführen, um den Inhalt eines Ordners unter Ubuntu One zu sichern, und Ubuntu One erst nach Abschluss von rsync zu starten.
Was denkst du darüber? Woher wissen, wann rsync endet?
quelle
rsync
Via-Cron abraten .Antworten:
Sie können
inotifywait
(mitmodify,create,delete,move
aktivierten Flags) und verwendenrsync
.while inotifywait -r -e modify,create,delete,move /directory; do rsync -avz /directory /target done
Wenn Sie nicht
inotifywait
auf Ihrem System haben, führen Siesudo apt-get install inotify-tools
quelle
-e ssh user@remote:/target
,rsync
wenn Sie SSH als Transportmittel für den Zugriff auf Ihren Remotecomputer verwenden möchten.rsync -avz --delete --exclude-from=.rsyncignore /directory user@server:path
. Ich wollte jedoch eine einfache Antwort schreiben..git
Ordner.modify,create,delete,move
Sie benötigen ungefähr Folgendes : https://github.com/axkibe/lsyncd Es ist ein Tool, das rsync und inotify kombiniert. Ersteres ist ein Tool, das mit den richtigen Optionen ein Verzeichnis bis zum letzten Bit spiegelt. Letzteres weist den Kernel an, ein Programm über Änderungen an einem Verzeichnis der Datei zu informieren. Es sagt:
Aber - laut Digital Ocean unter https://www.digitalocean.com/community/tutorials/how-to-mirror-local-and-remote-directories-on-a-vps-with-lsyncd - sollte es in sein das Ubuntu-Repository!
Ich habe ähnliche Anforderungen, und dieses Tool, das ich noch nicht ausprobiert habe, scheint für diese Aufgabe geeignet zu sein.
quelle
Nur einfache Änderung von @silgon Antwort:
while true; do inotifywait -r -e modify,create,delete /directory rsync -avz /directory /target done
(@ silgon Version stürzt manchmal unter Ubuntu 16 ab, wenn Sie es in cron ausführen)
quelle
Sie können fschange nutzen . Es handelt sich um eine Benachrichtigung über Änderungen am Linux-Dateisystem. Der Quellcode kann über den obigen Link heruntergeladen werden. Sie können ihn selbst kompilieren.
fschange
kann verwendet werden, um Dateiänderungen zu verfolgen, indem Daten aus einer Proc-Datei (/ proc / fschange) gelesen werden. Wenn Daten in eine Datei geschrieben werden, gibt fschange das genaue Intervall an, das geändert wurde, anstatt nur zu sagen, dass die Datei geändert wurde. Wenn Sie nach einer fortschrittlicheren Lösung suchen, würde ich empfehlen, Resilio Connect zu überprüfen . Es ist plattformübergreifend und bietet erweiterte Optionen für die Verwendung und Überwachung. Da es BitTorrent-basiert ist, ist es schneller als jedes andere vorhandene Synchronisierungstool. Es wurde in ihrem Namen geschrieben.quelle
Ich verwende dieses kostenlose Programm, um lokale Dateien und Verzeichnisse zu synchronisieren: https://github.com/Fitus/Zaloha.sh . Das Repository enthält auch eine einfache Demo.
Der gute Punkt: Es ist ein Bash-Shell-Skript (nur eine Datei). Keine Black Box wie andere Programme. Dokumentation ist auch da. Mit einigen technischen Talenten können Sie es auch "biegen" und "integrieren", um die endgültige Lösung zu erstellen, die Sie mögen.
quelle