Synchronisieren Sie einen Ordner zwischen zwei Computern mit einem Dateisystem-Watcher, damit eine Datei bei jeder Änderung sofort repliziert wird

20

Ich habe:

  • Ein Linux-Server, den ich über SSH über IP 203.0.113.0 Port 1234 verbinde

  • ein Heimcomputer (hinter einem Router), öffentliche IP 198.51.100.17, entweder Debian oder Windows + Cygwin

Was ist am einfachsten, wenn ein Ordner /home/inprogress/ synchronisiert wird (in beide Richtungen), rsyncallerdings mit einem Dateisystem-Watcher , sodass eine Datei bei jeder Änderung sofort auf der anderen Seite repliziert wird? (dh kein manuelles Aufrufen eines Synchronisierungsprogramms erforderlich)

Ich suche nach einer Kommandozeilen- / No-GUI-Lösung, da der Server kopflos ist.

Gibt es eine integrierte Linux / Debian-Lösung?

Basj
quelle
7
Sie beschreiben syncthing.
Kusalananda
Es gibt lsync, aber ich weiß nicht, ob es für die bidirektionale Synchronisierung nützlich ist.
Ulrich Schwarz
lsync, csync2, inotify + rsync, aber ich würde es vorziehen, sie in einer lokalen Netzwerkeinstellung zu verwenden.
Rui F Ribeiro
2
Auf Dateisystemebene klingt dies wie OCFS2 oder sogar RAID 1 über NBD
roaima
3
One-Way-Synchronisation ist einfach. Bidirektionale Synchronisierung impliziert Konfliktlösung (ja, das wird irgendwann passieren), was wiederum eine Art Benutzeroberfläche bedeutet (obwohl keine GUI erforderlich ist).
Jcaron

Antworten:

23

Nach @ Kusalanandas Kommentar habe ich endlich ein paar Stunden damit verbracht, Syncthing für diesen Anwendungsfall zu testen, und es funktioniert großartig. Es erkennt automatisch Änderungen auf beiden Seiten und die Replikation ist sehr schnell.

Beispiel: Stellen Sie sich vor, Sie arbeiten lokal server.pyin Ihrer bevorzugten Notepad-Software und drücken STRG + S (Speichern). Einige Sekunden später wird es automatisch auf dem entfernten Server repliziert (ohne Popup-Dialog).

Eine großartige Sache, die mir aufgefallen ist, ist, dass Sie mit Syncthing nicht über die IP des Heimcomputers und des Servers nachdenken müssen: Jedes "Gerät" (Computer, Server, Telefon usw.) verfügt über eine eindeutige Geräte-ID, die Sie gemeinsam nutzen Wenn Sie die ID mit einem anderen Gerät vergleichen, wird automatisch ermittelt, wie die Geräte miteinander verbunden werden sollen.

Machen:

  • Heimcomputerseite (Windows oder Linux):

    Verwenden Sie das normale Konfigurationstool für die Synchronisierung im Browser

  • VPS Seite:

    Verbinden Sie zuerst den VPS mit einer Portweiterleitung:

    ssh <user>@<VPS_IP> -L 8385:localhost:8384
    

    Die letztere Option leitet das Webkonfigurationstool Syncthing des VPS, das Port 8384 überwacht, auf den Port 8385 des Heimcomputers um.

    Dann starte dies auf VPS:

    wget https://github.com/syncthing/syncthing/releases/download/v0.14.52/syncthing-linux-amd64-v0.14.52.tar.gz 
    tar xvfz syncthing-linux-amd64-v0.14.52.tar.gz
    nohup syncthing-linux-amd64-v0.14.52/syncthing &
    

    Öffnen Sie dann im Browser des Heimcomputers http: // localhost: 8385 : Dies ist die Synchronisierungskonfiguration des VPS!


Andere Lösung, die ich versucht habe:


Weitere Vorteile von Syncthing, die mir gerade aufgefallen sind:

  • Sie können fsWatcherDelaySdie Zeit config.xmlvon 10auf 2Sekunden reduzieren , damit sie nach STRG + S 2 Sekunden später (+ die Zeit zum Hochladen, dh weniger als 1 Sekunde für eine kleine Textdatei) auf dem anderen Computer ist

  • Wenn Sie zwei Computer synchronisieren, die sich im selben lokalen Netzwerk befinden (indem Sie sich nur die Geräte-ID geben, ohne auf lokale IP-Adressen achten zu müssen), wird automatisch festgestellt, dass keine Übertragung über das Internet erforderlich ist, dies jedoch möglich ist vor Ort handeln. Dies ist großartig und ermöglicht eine sehr schnelle Übertragungsgeschwindigkeit (4 MB / s!) Für phone <--> computerbeide, die über WLAN mit demselben Heimrouter verbunden sind ... ... während sie bei ADSL mit Dropbox-Synchronisierung bei 100 KB / s stecken bleiben würde ! (mein ADSL ist beim Upload auf 100 KB / s begrenzt)

Basj
quelle
@sudodus Ein Freund hat es mir bereits vor einigen Wochen empfohlen, und ich hatte es für die <-> Telefonsynchronisation mit dem Computer ausprobiert, aber ich hätte nicht gedacht, dass es auch für einen Entwicklungsserver so gut funktionieren würde! Bearbeiten Sie Ihren Code, drücken Sie Speichern, 1 2 3 es ist auf dem anderen Computer!
Basj
1
+1. Ich hatte eine ganze Weile das gleiche Problem, habe jahrelang rsync + einige Skripte verwendet und schließlich vor zwei Monaten Sync, csync, unisono und ein paar andere ausprobiert. Funktioniert hervorragend mit einer beliebigen Anzahl von Computern und selbst wenn einige von ihnen keine permanente Netzwerkverbindung haben. Kann 100% empfehlen.
Guntram Blohm unterstützt Monica
1
Schön, dass Sie all diese unterschiedlichen Lösungen @GuntramBlohm getestet haben! Wenn Sie ein paar Minuten Zeit haben, eine Antwort zu schreiben, um Ihr Feedback / Ihren Vergleich zwischen Synchronisierung, Rsync, Csync, Unisono usw. und den jeweiligen Vor- / Nachteilen abzugeben, ist dies für zukünftige Referenzzwecke sehr interessant!
Basj
16

Klingt wie Unison sollte den Job machen.

Unison ist ein Dateisynchronisationstool für OSX, Unix und Windows. Damit können zwei Replikate einer Sammlung von Dateien und Verzeichnissen auf unterschiedlichen Hosts (oder unterschiedlichen Festplatten auf demselben Host) gespeichert, separat geändert und dann aktualisiert werden, indem die Änderungen in jedem Replikat auf den anderen übertragen werden.

Es verfügt über eine optionale Benutzeroberfläche, die das Lösen von Konflikten etwas vereinfacht, aber alles kann auch über eine textbasierte Benutzeroberfläche erfolgen. Sie können auch festlegen, wie Konflikte für einen vollständig unbeaufsichtigten Betrieb gelöst werden sollen.

Es gibt eine Dateiüberwachungskomponente (fsmonitor), die bei Bedarf eine Synchronisierung auslöst. Suchen Sie im Handbuch nach "Repeat Watch", um Einzelheiten zu erfahren.

Sieht aus wie Debian hat die richtige Version (2.48+) der Box verpackt aus .

TooTea
quelle
Vielen Dank! Ist der File Watcher Fsmonitor bei Unison bereits im Lieferumfang enthalten, oder müssen wir dieses Tool installieren und manuell mit Unison verbinden?
Basj
1
@Basj Es ist in den neuesten Versionen enthalten und sehr einfach einzurichten. Ich habe einen Link zum Handbuch hinzugefügt.
TooTea
Ich habe es in der Vergangenheit auf einem alten Mac verwendet. Es funktioniert nur mit minimalem Aufwand. Keine Ahnung, ob es für Serverszenarien geeignet ist.
Rui F Ribeiro