Gibt es ein Tool, das zwei Verzeichnisse verknüpft und synchronisiert, sobald sich etwas ändert?

7

Ich habe riesige Simulationsverzeichnisse auf den beiden Maschinen, serverauf clusterdenen ich synchron bleiben möchte. Die Grundsituation ist, dass sich Dateien selten ändern, aber wenn eine Simulation durchgeführt wird, ändern sich viele große Dateien gleichzeitig, die ich gerne synchronisiert hätte, sobald sie geschlossen werden.

Daher gehe ich davon aus, dass ein Cronjob mit rsync nicht ideal ist, Cronjob, weil er rsync in einem festgelegten Zeitintervall aufruft, das ich wahrscheinlich entweder zu groß oder zu klein wählen würde, rsync, weil er nicht nach Änderungen von Dateien suchen muss, da ich und Nur der Simulationsjob greift darauf zu.

Meine Idee wäre also, inotify (siehe diese Frage ) zu verwenden, um Änderungen im Simulationsverzeichnis in einer Schleife zu erkennen und dann einen rsync für die geänderten Dateien zu erstellen. Ich bin mir jedoch nicht sicher, ob dadurch versehentlich Dateien übersprungen werden könnten, die gerade geschlossen werden, wenn der Fork fertig ist. (und möglicherweise würde ich auch in eine Endlosschleife geraten, weil ich rotync aufrufe, um die gerade synchronisierte Datei erneut zu synchronisieren ...) Bevor ich dort zu viel versuche, wiederhole ich meine Frage:

Gibt es ein Tool, das zwei Verzeichnisse verknüpft und synchronisiert, sobald sich etwas ändert?

(Im Grunde wäre das so etwas wie eine Offline-Dropbox, denke ich)

Tobias Kienzler
quelle

Antworten:

6

Schauen Sie sich lsyncd an .

Lsyncd überwacht eine Ereignisüberwachungsschnittstelle für lokale Verzeichnisbäume (inotify). Es aggregiert und kombiniert Ereignisse für einige Sekunden und erzeugt dann einen (oder mehrere) Prozesse, um die Änderungen zu synchronisieren. Standardmäßig ist dies rsync. Lsyncd ist somit eine leichte Live-Spiegellösung, die vergleichsweise einfach zu installieren ist, keine neuen Dateisysteme oder Blockgeräte erfordert und die Leistung des lokalen Dateisystems nicht beeinträchtigt.

Es ist nicht in beide Richtungen, aber aufgrund Ihrer Frage habe ich verstanden, dass Sie das auch nicht brauchen. Wenn Sie eine bidirektionale Synchronisierung benötigen, ist Unison eine gute Antwort, außer es gibt keine Inotify-Unterstützung. Schauen Sie sich auch diese Frage an .

Die dritte Sache für die bidirektionale Synchronisation ist DRBD , ein Echtzeit-Synchronisationssystem auf Blockebene, das im Hauptkern enthalten ist. Da es fast synchron ist, ist leider eine schnelle Internetverbindung erforderlich.

Olli
quelle
+1 lsyncd klingt gut, ich muss etwas Zeit investieren, um es ohne Root-Berechtigungen zu kompilieren / installieren und lua installiert jedoch :(
Tobias Kienzler
Es scheint, dass Unison nicht mehr aktiv entwickelt wird. cis.upenn.edu/~bcpierce/unison/status.html
sleepyweasel