Datenbestände abgleichen

Aus LinuxUser 03/2009

Datenbestände abgleichen

© U.S. Air Force

Synchron

Wer gleiche Datenbestände unter Linux und Windows benötigt, ist nicht unbedingt auf einen Fileserver angewiesen. Unison und Cygwin helfen, Verzeichnisse auf beiden Systemen synchron zu halten.

Auf die Frage nach der praktikabelsten Art, Daten in einem Netzwerk mehreren Rechnern zur Verfügung zu stellen, lautet die erste Antwort meist: per Fileserver. In kleinen Umgebungen mit wenigen Rechnern lohnt sich der hohe Verwaltungsaufwand aber oft nicht. Wer jedoch Verzeichnisse zwischen zwei Rechnern synchron halten will, kann das auch plattformübergreifend mit Unison erledigen.

Installation

Die Installation von Unison [1] gestaltet sich unter Linux unkompliziert, da die meisten Distributionen es als Paket im Repository anbieten. Unter Ubuntu genügt ein einfaches sudo apt-get install unison-gtk. Die GTK-Variante enthält neben der grafischen Oberfläche auch die konsolenbasierte Version.

Als Werkzeug zur Synchronisation über das Netz setzt Unison eine bestehende Netzwerkverbindung voraus und bietet verschiedene Methoden für den Abgleich an (siehe Tabelle “Unison-Verbindungstypen”). Wir gehen hier auf die Verbindung via SSH ein. Zwar bringt Windows keinen eigenen SSH-Server mit, es gibt jedoch freie Implementationen auch für dieses Betriebssystem: beispielsweise OpenSSH unter Cygwin [2]. Synchronisieren Sie zwei Linux-Rechner, erübrigt sich dieser Umweg.

Unison-Verbindungstypen

Typ Erläuterung
Lokal Hierbei nehmen Sie einen Abgleich zwischen zwei Verzeichnissen auf dem selben Rechner vor. Beispiel: unison /pfad/dir/a /pfad/dir/b. Einer der beiden Pfade darf auch ein via /etc/fstab eingehängtes Verzeichnis (NFS, SMB) eines entfernten Rechners sein.
SSH Vor dem Abgleich zweier Systeme baut Unison eine verschlüsselte Verbindung via SSH auf. Es muss also mindestens auf einem der beiden Rechner ein SSH-Client, auf dem anderen ein SSH-Server laufen. Beispiel: unison /pfad/dir/a ssh://Benutzer@Rechner/pfad/dir/b.
Socket Eine äußerst unsichere Methode, bei der Sie auf einem der beiden Systeme einen Unison-Socket starten. Über diesen kann ein potenzieller Angreifer auf das Dateisystem zugreifen. Mitunter verlaufen sämtliche Synchronisationen unverschlüsselt. Die SSH-Methode ist deshalb vorzuziehen.

Linux unter Windows

Bei Cygwin handelt es sich um eine Unix-API-Emulation für Windows, die den Betrieb einer Vielzahl von Programmen auf dem fremden System erlaubt. Dazu gehören unter anderem OpenSSH und Unison, sowie ein vollständiger X-Server [3]. Für die hier gestellte Aufgabe genügen allerdings die beiden erstgenannten Pakete. Die Installation ist äußerst simpel und erinnert an Paketverwaltungen (Abbildung 1) verschiedener Linux-Distributionen. Eine kurze Anleitung für die Installation von Cygwin unter Windows finden Sie im Artikel “Datentandem Unison” [4]. Eine Anleitung, wie Sie OpenSSH unter Cygwin installieren und einrichten, finden Sie unter [5].

Abbildung 1: Das Installieren von Software in Cygwin unter Windows ähnelt dem bekannter Paketverwaltungen verschiedener Linux-Distributionen.

Abbildung 1: Das Installieren von Software in Cygwin unter Windows ähnelt dem bekannter Paketverwaltungen verschiedener Linux-Distributionen.

Damit Unison funktioniert, müssen Sie es auf beiden zu synchronisierenden Rechnern installieren, also sowohl unter Linux als auch unter Windows. Auf der Downloadseite stellen die Entwickler eine textbasierte und eine grafische Variante für Windows zur Verfügung. Benutzer der Media-Ausgabe des LinuxUser finden die benötigten Programme auf der Heft-DVD im Verzeichnis /LinuxUser/unison/.

Um die grafische Version zu nutzen, gilt es jedoch zunächst das GTK-Paket (gtk-runtime-Version.exe) zu installieren. Benutzen Sie Cygwin, können Sie sich diese Installation allerdings sparen: Es enthält bereits ein vorkompiliertes Paket, das Sie rasch und ohne große Schwierigkeiten in der aktuellsten Version mit der Cygwin-Paketverwaltung installieren.

Haben Sie OpenSSH für Cygwin eingerichtet, verläuft ein erster Verbindungsversuch von Linux zu Windows via SSH wie zwischen zwei Linux-Systemen. Nach erfolgreicher Verbindung folgt die Passwortabfrage, nach dem Login erscheint in der Linux-Konsole der Prompt von Cygwin.

Im Profil

Sie starten die grafische Oberfläche von Unison mit der Eingabe von unison-gtk im Terminal oder dem Schnellstartfenster ([Alt]+[F2]). Alternativ verwenden Sie den Eintrag im Startmenü, den Sie unter OpenSuse beispielsweise unter Dienstprogramme | Synchronisieren | unison finden.

Arbeiten Sie vorzugsweise textbasiert, haben Sie die manuelle Konfiguration schnell erledigt. Dazu legen Sie Verzeichnis ~/.unison sowie die Profildatei ~/.unison/default.prf an (die grafische Unison-Variante erzeugt diese beim ersten Aufruf automatisch). Der Inhalt des Standardprofils default.prf kann wie folgt aussehen; entsprechende Pfade der heimischen Konfiguration müssen Sie anpassen.

root = /home/markus/Dokumente
root = ssh://winhost/c:/dokumente und einstellungen/markus/eigene dateien/

Die erste Zeile gibt das zu synchronisierende Verzeichnis auf dem Linux-Rechner an, die zweite das auf der Windows-Seite. Das führende ssh beschreibt den Verbindungstyp, danach folgen hinter den zwei Slashes der Hostname oder die IP-Adresse des Windows-Rechners. Nach einem weiteren Slash zeigt der Buchstabe samt Doppelpunkt auf das Laufwerk unter Windows, abschließend kommt der Verzeichnisname. Auf Groß- und Kleinschreibung brauchen Sie nicht zu achten, da Windows diese nicht unterscheidet.

Alle diese Einträge lassen sich auch in der grafischen Version von Unison erstellen, in der Sie auch mehrere Profile verwalten und Verbindungstypen auswählen. Da sich die grafische Oberfläche gegenüber den Vorgängerversionen nicht wesentlich geändert hat, hilft hier der Artikel unter [4].

Bei einem einfachen Ausführen von unison auf der Konsole verwendet das Tool zur Synchronisation das Standardprofil default.prf. Legen Sie weitere Profile – sei es grafisch oder via Texteditor – anlegen, können Sie eine profilgesteuerte Synchronisation vornehmen, indem sie den Aufruf von Unison um den jeweiligen Profilnamen ergänzen. So nutzt beispielsweise unison fotos das Profil ~/.unison/fotos.prf.

Erweitertes Profil

Die Einstellungen von Unison erlauben eine Vielzahl zusätzlicher Optionen – genauere Informationen darüber liefert das Unison-Handbuch [6]. So legen Sie beispielsweise fest, wo Unison Backups der synchronisierten Daten ablegt, welche Pfade es ignoriert und mit welchem Befehl es Dateien zusammenführt.

Ändern sich Dateien auf beiden Seiten, müssen die Unterschiede in eine neue Datei einfließen. Für Datenkonsistenz sorgt dabei eine entsprechende Zeile im Profil, die wie folgt aussehen kann:

merge = Name *.txt -> diff3 CURRENT1 CURRENTARCH CURRENT2 -m > NEW

Unison erlaubt den Einsatz beliebiger Merge-Programme, im angeführten Beispiel kommt das Unix-Tool Diff3 zum Einsatz. Das benötigt drei Dateien: die beiden unterschiedlichen Versionen sowie ein Backup im Zustand vor der letzten Synchronisation. Aus diesen bastelt Unison dann eine neue Datei mit den Änderungen von beiden Seiten.

Damit das funktioniert, müssen Sie in der Profildatei noch angeben, wo und wie Unison die Backups speichert. Das Schlüsselwort Backuplocation legt dabei fest, wie das Programm die Sicherungen ablegt: entweder im jeweiligen Verzeichnis der synchronisierten Datei (local) oder zentral in einem Verzeichnis auf beiden Seiten (central). Dabei gilt es zu beachten, dass der Pfad in Backupdir auf beiden Seiten vorhanden ist. Andernfalls kann Unison, je nach Synchronisationsrichtung, auf einem der beiden Systeme kein Backup anlegen. Da Linux und Windows verschiedene Verzeichnisstrukturen verwenden, empfiehlt es sich, bei der plattformübergreifenden Synchronisierung auf das zentrale Lagern von Backups zu verzichten.

Passwortloses Login

Wer häufiger eine synchronisiert, stellt schnell fest, dass das Eingeben des Passworts auf die Dauer lästig fällt. Ein zeitgesteuerter Datenabgleich via Cronjob funktioniert mit dieser Methode ebenfalls nicht. Abhilfe schafft das passwortlose Anmelden mit einem SSH-Schlüssel, was angesichts der Tatsache, dass auf beiden Seiten OpenSSH läuft, kein Problem darstellt.

Generieren Sie zunächst auf dem Linux-Rechner mit dem Aufruf ssh-keygen -t rsa den Schlüssel. Die Abfrage nach der Passphrase bestätigen Sie ohne weitere Angaben zwei mal mit [Eingabe]. Der Schlüssel befindet sich danach in ~./.ssh/id_rsa.pub. Kopieren Sie ihn abschließend in das versteckte Verzeichnis .ssh im Cygwin-Home-Verzeichnis des Windows-Benutzers. Die Befehlskette

cat ~/.ssh/id_rsa.pub | ssh Windows-Benutzer@winhost 'cat - >> ~/.ssh/authorized_keys'

erledigt das in einem Arbeitsschritt. Bei der folgenden Aufnahme der SSH-Verbindung zu Windows geben Sie ein letztes Mal das Passwort an; die nächste Anmeldung erfolgt dann ohne Abfrage. Auch Unison will künftig kein Passwort mehr wissen.

Fehler und Probleme

Beim Synchronisieren zwischen zwei Betriebssystemen, die ganz unterschiedlich mit Verzeichnissen und Dateien umgehen, kommt es gelegentlich zu Problemen. Da Linux im Gegensatz zu Windows zwischen Groß- und Kleinschreibung unterscheidet, koexistieren unter Linux beispielsweise Verzeichnis und verzeichnis. Unter Windows allerdings klappt das nicht, was Unison anmäkelt und die Konflikte nicht synchronisiert.

Auch symbolische Links verarbeitet Unison nicht: Alles, was per symbolischem Link ins Dateisystem verzweigt, landet nicht auf der Gegenseite. Allzu exotische Datei- und Verzeichnisnamen machen Unison ebenfalls Probleme: Enthalten diese beispielsweise Doppelpunkte, kann Unison damit nichts anfangen und gibt als Fehlermeldung aus, dass es diese Dateien respektive Verzeichnisse nicht synchronisiert. Sonderzeichen wie Leerzeichen oder Kommas verarbeitet Unison immerhin einwandfrei.

Dafür hat die Applikation allerdings erhebliche Schwierigkeiten beim Verarbeiten von Umlauten in Datei- oder Verzeichnisnamen. Beim Synchronisieren rekodiert es diese, womit sie danach auf der anderen Seite ganz anders aussehen als vorher. Vor dem Synchronisieren empfiehlt es sich deshalb, die Datei- und Verzeichnisnamen entsprechend anzupassen sowie symbolische Links zu entfernen.

Synchronisationsprobleme zeigt Unison in der grafischen Übersicht als erste Einträge und rot markiert an, alle Dateien und Verzeichnisse mit Status “grün” in der Anzeige synchronisiert es. Da Unison zum Abgleich auch den Zeitstempel der Dateien verwendet, muss auf beiden Rechnern die gleiche Zeit eingestellt sein – idealerweise über einen externen NTP-Server. Beim Synchronisieren prüft Unison zudem, ob sich die Größe der Datei verändert hat. Bleibt diese gleich, geht Unison auch bei unterschiedlichen Zeitstempeln davon aus, dass sich nichts geändert hat.

Fazit

Bei Unison handelt es sich um ein absolut stabiles Werkzeug für den wechselseitigen Datenabgleich zwischen zwei Systemen, das die Entwickler zwar nicht mehr ausbauen, aber selbst täglich verwenden und auch weiter pflegen. Sein Schwachpunkt: Ändert sich eine Datei auf beiden Seiten gleichzeitig, muss man für das Zusammenführen einen umständlichen und fehleranfälligen Merge-Prozess auf die Beine stellen. Eine schnelle und einfach zu konfigurierende Lösung gibt es dafür nicht, oft führt hier erst viel Geduld zum Erfolg. Möchten Sie viele sich verändernde Daten von verschiedenen Systemen zusammenführen, greifen Sie besser zu Versionskontrollsysteme wie Subversion [7], Bazaar [8] oder Git [9].

LinuxUser 03/2009 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben