Synchronisieren Sie mehrere Hosts mit Unison

3351
highsciguy

Ich versuche, drei Maschinen miteinander zu synchronisieren, auf denen ich die anderen beiden synchron laufen lasse. Diese "Star" -Architektur wird im unisono-Handbuch angegeben:

Verwenden von Unison zum Synchronisieren von mehr als zwei Maschinen

Unison ist für das Synchronisieren von Replikatenpaaren konzipiert. Es ist jedoch möglich, größere Gruppen von Maschinen durch mehrere paarweise Synchronisationen synchron zu halten.

Wenn Sie dies tun müssen, besteht die zuverlässigste Methode zum Einrichten der Maschinen darin, die Maschinen in einer „Stern-Topologie“ zu organisieren, wobei eine Maschine als „Hub“ und der Rest als „Speichen“ bezeichnet wird und die Synchronisation aller Speichen-Maschinen erfolgt nur mit der Nabe. Der große Vorteil der Sterntopologie besteht darin, dass die Möglichkeit der Verwirrung von "Nebenkonflikten" vermieden wird, die dadurch entstehen, dass für jedes zu synchronisierende Hostpaar ein separates Archiv von Unison verwaltet wird.

Aber nach der ersten Synchronisierung mit

unison -fat -batch "$HOME/dir" ssh://"$myhost1//dir" unison -fat -batch "$HOME/dir" ssh://"$myhost2//dir" 

Für beide Hosts erhalte ich immer einen Fehler:

Schwerwiegender Fehler: Interner Fehler: Festplattenarchive sind nicht identisch.

Dies kann passieren, wenn beide Maschinen denselben Hostnamen haben.

Wenn dies nicht der Fall ist und Sie diese Meldung wiederholt erhalten, gehen Sie bitte wie folgt vor: a) Senden Sie einen Fehlerbericht an unison-users@yahoogroups.com (möglicherweise müssen Sie der Gruppe beitreten, bevor Sie Beiträge verfassen dürfen). b) Verschieben Sie die Archivdateien auf jedem Rechner in ein anderes Verzeichnis (falls dies für das Debugging nützlich sein kann). Die Archivdateien auf diesem System befinden sich im Verzeichnis /home/andreas/.unison und haben die Namen der Form arXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX, wobei die X eine Hexadezimalzahl sind. c) Führen Sie unisono erneut aus, um die Synchronisierung von Grund auf durchzuführen.

Wenn ich den Anweisungen b) folge oder wenn ich renne

unison -ignorearchives -fat "$HOME/dir" ssh://"$myhost1//dir" 

Ich synchronisiere dieses erfolgreich. Aber das Snycing des anderen wird den gleichen Fehler oben ergeben. Es scheint, dass, wenn ich einen davon synchronisiere, der andere in einem inkonsistenten Zustand sein wird. Wie kann ich das beheben, außer immer hinzuzufügen -ignorearchives? Unison-Version ist 2.40.102 von Ubuntu-Paketen und Android-Unison-App.

3
Initiieren Sie beide Synchronisierungen vom "Hub" (Zentrum) des Sterns aus? Das mache ich nicht; Die Synchronisierungen starte ich aus den "Tipps" des Sterns, wobei der Hub ein Headless-Server ist (irgendwo in der Schweiz ;-)). Bleiben Ihre Probleme bestehen, wenn Sie die Synchronisierungen von $ myhost1 und $ myhost2 initiieren (vorausgesetzt, diese unterscheiden sich vom Hub)? Edward vor 10 Jahren 0
Ich dachte darüber nach, die Richtung umzukehren, und jetzt werde ich es definitiv tun. Es wäre jedoch sehr unpraktisch für mich, dies dauerhaft zu tun, da die beiden "Tipps" kleine Android-Geräte sind. Mein Sicherungsskript auf dem 'Hub' enthält eine Logik, um diese Geräte im lokalen Netzwerk zu erkennen und automatisch eine Verbindung herzustellen. Dann müsste ich auch die Unterschiede auf den Androiden betrachten. Gibt es vielleicht eine Befehlszeilenoption, die die Sync-Richtung umkehrt, wenn eine Abhängigkeit davon besteht? highsciguy vor 10 Jahren 0
Ich kann das hinzufügen, wenn ich das Offensichtliche versuche - die Verzeichnisse im Befehl umzukehren, dh `unison -fat ssh: //" $ myhost1 // dir "" $ HOME / dir "` usw. dasselbe Problem. highsciguy vor 10 Jahren 0
Beim Versuch, von einem der Android-Geräte zu synchronisieren, stellte ich fest, dass es wiederholt fehlgeschlagen ist mit: Uncatch Unix-Fehler: Lesen fehlgeschlagen: Versuchen Sie es noch einmal, also scheint dies auch keine Option für mich zu sein. highsciguy vor 10 Jahren 1

1 Antwort auf die Frage

6
highsciguy

Es stellt sich heraus, dass die Meldung "schwerwiegender Fehler" geeigneter ist als ich dachte. Der Ursprung des Problems (das in einem Zwei-Computer-Setup auftreten würde, wenn ein Host seinen Namen ändert) ist, dass die beiden Android-Geräte, die mit Hostnamen synchronisiert werden sollen, beide bestimmt wurden localhost, obwohl sie sich unterscheiden und durch unterschiedliche IP-Adressen festgelegt sind. Adressen.

Gemäß dem unisono-Handbuch kann der Hostname manuell durch Exportieren der UNISONLOCALHOSTNAMEUmgebungsvariablen angegeben werden. Da unison keine Login-Shell erstellt, kann sie jedoch nicht in die .profileDatei auf den Sync-Geräten exportiert werden. Es stellte sich heraus, dass auch die ./ssh/environmentDatei meiner SSH-Server (in beiden Fällen SshDroid) nicht gelesen wurde. Schließlich wird auch der Android-Hostname (der mit festgelegt werden kann setprop net.hostname [hostname]) von unison nicht gelesen. Stattdessen scheint es Standard zu sein localhost.

Daher kam ich zu folgender Problemumgehung:

unison -servercmd "export UNISONLOCALHOSTNAME=host1; unison" ssh://"$myhost1//dir" "$HOME/dir"  unison -servercmd "export UNISONLOCALHOSTNAME=host2; unison" ssh://"$myhost2//dir" "$HOME/dir"  

Hier -servercmdlegt die Option fest, welcher Befehl auf den entfernten Geräten ausgeführt werden soll, um unisono zu starten. In meiner Version UNISONLOCALHOSTNAMEwerden zuerst die zwei verschiedenen Werte exportiert .

Dann werden die Hosts als unterschiedlich erkannt und es ist möglich, mehrere "Tipps" von einem zentralen "Hub" aus in einem "Stern" -Status zu synchronisieren.

+1 für Ihre Forschung; Ich wusste eigentlich nicht, dass es möglich ist, Unisono mit Android zu machen. muss das mal anschauen ;-) Edward vor 10 Jahren 0
Es ist neu. Suchen Sie nach unison in Google PlayStore. Ich bin davon ausgegangen, dass Sie einen SSH-Server und eine busybox haben. Dann genügt die kostenlose Basis-App. Sie müssen auch einen symbolischen Link zur Binärdatei in Ihrem Pfad erstellen. highsciguy vor 10 Jahren 0