Unison Logo

Linux-Tage-Weihnachtskalender: 18. Türchen

Maik Hentsche, 18.12.2008

Dateiabgleich zwischen mehreren Rechnern mit Unison

Rsync ist ein häufig benutztes Werkzeug, wenn man einfache Backups erstellen möchte. Man spiegelt das eigene Homeverzeichnis (oder jedes andere Verzeichnis, das man sichern will) auf einen anderen Rechner. In regelmäßigen Abständen gleicht man diese Kopie mit den Änderungen im Ursprungsverzeichnis ab. Wenn man aber keine Backups erstellen will, sondern mehrere gleichzeitig genutzte Homeverzeichnisse synchron halten möchte, funktioniert rsync nicht, da dieses Programm immer nur in eine Richtung kopiert.

Zum ersten Mal ist das für mich zum Problem geworden, als ich anfing, mit meinem Laptop zu Vorlesungen zu gehen. Ich wollte zwar hauptsächlich auf der Workstation arbeiten, andererseits auch auf dem Laptop Dateien ändern können. Beide Systeme sollten identische Homeverzeichnisse haben, möglichst automatisch abgeglichen, sobald der Laptop am heimatlichen Netzwerk angesteckt wird. Das war mit rsync natürlich nicht machbar. Ich brauchte ein Synchronisationswerkzeug, das feststellt, welcher Rechner die aktuellste Version einer Datei hat und diese auf den jeweils anderen Rechner kopiert. Nach einigen vergeblichen Experimenten fand ich Unison, das genau das bietet. Unison existiert in Varianten für Linux, Windows und MacOS und kann Dateiabgleich selbst bei unterschiedlichen Betriebssystemen bieten. Es bietet zwei verschiedene Benutzerschnittstellen an, eine kommandozeilenbasierte und eine grafische. Im folgenden werde ich die grafische Variante als Beispiel nutzen.

Vorschau: unison fragt nach Quellverzeichnis
Abb. 1: Unison fragt nach Quellverzeichnis.

Wenn wir Unison zum ersten Mal starten, versucht es eine neue Konfiguration zu erstellen. Dazu fragt es nach dem zu benutzenden Quellverzeichnis, wie in Abbildung 1 zu sehen. Wir benutzen unser Homeverzeichnis, /home/user.

Vorschau: unison fragt nach Zielverzeichnis
Abb. 2: Unison fragt nach Zielverzeichnis.

Die nächste Frage des Programms bezieht sich auf das entfernte Verzeichnis, mit dem wir abgleichen wollen. Dies ist in Abbildung 2 zu sehen. Hierzu bietet es vier verschiedene Zugriffsprotokolle an. Local wird benutzt, wenn das zu synchronisierende Verzeichnis auf dem selben Rechner liegt wie das Original. Rsh und Socket sind zwei unverschlüsselte Protokolle, die deshalb möglichst vermieden werden sollten. Für die meisten Nutzer ist das Protokoll SSH die beste Lösung. Wir stellen also das Protokoll SSH, den entfernten Rechner und das Homeverzeichnis /home/user auf diesem Rechner ein. Zur Authentifizierung auf dem entfernten System fragt Unison nun nach dem Passwort des eingestellten Benutzers. Alternativ kann man auch die von SSH angebotenen Lösungen der passwortlosen Authentifizierung (z.B. via RSA/DSA public key) nutzen. Details dazu finden sich in der SSH-Dokumentation.

Vorschau: unison zeigt Dateiunterschiede
Abb. 3: Unison zeigt Dateiunterschiede.

Nun startet Unison seine eigentliche Arbeit. Es vergleicht das lokale und entfernte Verzeichnis, stellt Unterschiede fest. Je nachdem, wie groß die beiden Verzeichnisse sind, kann das eine Weile dauern. Schließlich zeigt Unison an, welche Unterschiede es gefunden hat, wie in Abbbildung 3 zu sehen. Pfeile bedeuten, welche Seite an die andere angepasst wird, sobald der Update-Prozess startet. Ein Fragezeichen bedeutet, dass Unison nicht weiß, welche der beiden Varianten der angezeigten Datei der Benutzer als die richtige betrachten möchte. Man kann mit den in der Statusleiste angezeigten Pfeilen eine Richtung vorgeben oder man belässt das Fragezeichen. In diesem Fall bleiben beide Dateien unverändert. Das Bild zeigt, dass im lokalen Verzeichnis 4 Dateien und ein Verzeichnis neu hinzugekommen sind, ein Verzeichnis wurde gelöscht. Hinzu kommt die Umwandlung von Dateien, die Unison nicht aufzulösen vermag, in Links. Mit einem Klick auf Go werden die angegebenen Änderungen durchgeführt. Der gewünschte Abgleich ist erfolgreich.

Wie bereits eingangs erwähnt, besitzt Unison neben dem grafischen Nutzerinterface noch ein kommandozeilenbasiertes. Dieses ist hilfreich, wenn man den Abgleich automatisieren will. Dazu muss man unison mit der Option -batch aufrufen, um zu verhindern, dass bei unklarer Lage (entspricht den Fragezeichen in der GUI) nachgefragt wird, welche Datei benutzt werden soll. Damit ist es beispielsweise möglich, die Synchronisation automatisch starten zu lassen, sobald der Laptop mit dem heimischen Netzwerk verbunden wird.

Probleme

Leider wird die Begeisterung für Unison als nützliches Werkzeug getrübt durch einige Nachteile, die ich nicht verschweigen möchte. Die Entwicklung des Programms begann als Forschungsprojekt. Leider hat sich die Projektgruppe inzwischen anderen Aufgaben zugewandt. Deshalb ist die Weiterentwicklung von Unison beeinträchtigt. Darüber hinaus ist ein großes Problem von Unison die mangelnde Unicode-Unterstützung. Diese ist zwar vorhanden, funktioniert aber nicht immer reibungslos. Insbesondere beim Abgleich zwischen MacOS und Linux berichten Nutzer regelmäßig davon, dass Dateinamen mit Umlauten nicht als identisch erkannt werden, da beide Systeme unterschiedliche Codierung für das selbe Zeichen benutzen. Schließlich ist für manche deutsche Benutzer die fehlende Übersetzung der grafischen Nutzerschnittstelle sicher auch ein gravierender Nachteil. Alles in allem glaube ich aber, dass die Nützlichkeit von Unison all diese Probleme aufwiegt.

Link: Projekthomepage

Maik Hentsche ist seit 2004 Mitglied im CLT-Team und in diesem Jahr für die Sponsorenbetreuung zuständig.

zuletzt bearbeitet am 17.12.2008 von Maik Hentsche