Unison: Desktop und Laptop synchronisieren
Wer zwei Systeme parallel betreibt kennt vielleicht das Problem: Unterschiedliche Datenbestände. Wie kann man bei zwei Systemen seine Daten synchron halten, ohne viel Handarbeit zu leisten? Unter Linux denkt man hier zuerst an rsync, nur ist dieses Programm nicht das Mittel der Wahl. Es ist dafür gedacht die Daten in eine Richtung abzugleichen. Was aber, wenn man Desktop und Notebook gleichzeitig nutzt und Änderungen auf beiden Systemen zusammenführen möchte? Hier kommt Unison ins Spiel.
Unison ist sowohl auf Linux als auch auf Windows und Mac OS zu Hause und kann Datenbestände betriebssystemübergreifend synchronisieren. Ähnlich wie bei rsync werden beim Datenabgleich zweier Systeme nur die Daten übertragen, die sich wirklich geändert haben. So werden beispielsweise bei einer Logdatei, an deren Ende fortlaufend neue Einträge geschrieben werden, nur die neu angehängten Daten übertragen, anstatt die komplette Datei neu zu transferieren. Dies spart Zeit und Bandbreite, insbesondere beim Abgleich über das Internet.
Als Übertragungsprotokoll kann neben einer sicheren SSH-Verbindung auch eine unverschlüsselte Socket-Verbindung genutzt werden. Die Socket-Verbindung macht im eigenen LAN bei großen Dateien aufgrund der besseren Performance Sinn, über das Internet sollte man jedoch eine SSH-Verbindung bevorzugen.
Unison kann Verzeichnisse und Dateien direkt per Kommandozeilenaufruf oder mit voreingestellten Profilen synchronisieren. Im folgenden Beispiel mache ich Gebrauch von den Profilen, durch welche die tägliche Arbeit mit Unison deutlich vereinfacht wird. Profile legt Unison unter ~/.unison mit der Dateiendung *.prf ab. Ein einfaches Profil namens default.prf könnte wie folgt aussehen:
[sourcecode language="css"]# System A
root = /home/matthias
# System B
root = ssh://192.168.0.50//home/matthias
path = home
path = work[/sourcecode]
Zuerst definiert man das lokale Wurzelverzeichnis sowie das entfernte Pendant auf dem Zielsystem. Im obrigen Fall also (m)einen Heimatordner. Mit der Variable path werden diejenigen Verzeichnisse unterhalb des root-Verzeichnisses angegeben, die letztendlich auf den Systemen abgeglichen werden sollen.
Der Aufruf von Unison mittels
[sourcecode language="css"]unison default[/sourcecode]
startet nun den Synchronisierungsprozess. Dabei muss auf dem Zielsystem ebenfalls eine Version von Unison installiert sein. Es wird auf beiden Systemen eine Unison Archivdatei erstellt, die Hashwerte von den vorhandenen Dateien enthält. Daraufhin beginnt der Abgleichprozess. Sollte es sich um den ersten Lauf von Unison handeln, werden alle vorhandenen Dateien zwischen System A System B kopiert, so dass auf beiden Systemen alle Dateien verfügbar sind.
Werden nun sowohl auf A als auch auf B Dateien geändert, hinzugefügt oder entfernt kann man einen erneuten Aufruf von Unison starten. Das Programm erkennt die Änderungen auf beiden Systemen und schlägt die Standardaktionen (erstellen, löschen, ändern) vor. Startet man Unison mit dem Parameter -auto werden Standardaktionen immer durchgeführt. Nur bei Konflikten wird der Eingriff des Benutzers verlangt. Ein Konflikt besteht, wenn dieselbe Datei auf beiden Systemen verändert wurde. Ist dies eine einfache Textdatei, so erlaubt Unison jedoch das interaktive Mergen der Datei.
Unison bietet viele weitere Parameter, die sich im offiziellen Handbuch nachlesen lassen.
Links:
Unison Homepage



Stevie
Danke für den Tip… ist gleich auf der Liste für “Programme die ich nach der nächsten Neuinstallation mal einrichten werde” gelandet.
Alexander Muthmann
Auch von mir ein dickes Danke, dass klingt ideal. Was noch vll wichtig wäre: Unison läuft auf allen Unix Systemen, also wohl auch (Open)Solaris!
Claus
Mein Problem mit UNISON damals war, dass es nicht merkt, wenn man Dateien verschiebt/umbenennt (ok, wie auch…) und man dann Duplikate bekommt. Das fand ich sehr störend und hat mich dann wieder davon abgebracht.
matthias
@Alexander
Genau, das hab ich jetzt nicht explizit erwähnt. Aber was unter Linux läuft, gibt es auch fast immer für alle anderen UNIX Derivate.
@Claus
Duplikate habe ich bisher keine. Wenn ich auf System A eine Datei umbenenne, wird diese beim Abgleich auf System B gelöscht und die umbenannte Datei neu übertragen. Unison merkt nicht, dass es ich um dieselbe Datei handelt, arbeitet aber trotzdem korrekt.
Stefan
Unison MUSS merken, dass es die selbe Datei ist, sonst würde sie ja nicht gelöscht und neu angelegt, sondern nur die umbenannte Datei dazukopiert und du hättest den selben Effekt, als wenn du rsync ohne “delete”-Option ausführst.
matthias
Hmm, Unison würde eine Konflikt melden, wenn sich die Dateien auf beiden Systemen geändert hätten. Also auf System A umbenannt und auf System B noch vorhanden mit anderen bzw. geänderten Daten. Hier müsste man dann manuell ins Geschehen eingreifen.
Insofern merkt Unison, dass sich auf System B keine Daten geändert haben, sondern nur eine Änderung auf System A stattgefunden hat. Also andersherum gesagt, merkt Unison, dass die Datei dieselbe Datei bleibt.
Ich meinte eigentlich, dass Unison nicht so intelligent arbeitet, dass es die Datei auf System B einfach nur verschiebt, sondern komplett neu überträgt. Ist wohl etwas missverständlich ausgedrückt
Craig
Na gut, das will ich dir mal durchgehen lassen
schneida
Unison ist zwar recht nützlich, wenn man kleine Datenmengen synchron halten will. Bei meinen persönlichen Daten (75 GB) dauert aber allein das Vergleichen auf neue Dateien schon mehrere Stunden. Außerdem gibt es Probleme bei verschiedenen Zeichensätzen. Sichert man zum Beispiel Daten von Linux nach Windows oder umgekehrt, dann werden von allen Dateien mit Deutschen Umlauten Kopien mit falscher Codierung erstellt.
Leider hab ich aber bisher auch noch keine bessere Alternative gefunden