ubuntuusers.de

Hinweis: Dies ist ein statischer Snapshot unseres Wikis vom 25. März 2013 und kann daher nicht bearbeitet werden. Der aktuelle Artikel ist unter wiki.ubuntuusers.de zu finden.

Unison

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

./briefcase.png

Unison {en} ist ein Programm für Linux, Windows und Mac zur Synchronisation von Dateien und Verzeichnissen auf verschiedenen Rechnern bzw. Festplatten/Datenträgern. Beim Abgleich werden nur Änderungen an den Daten synchronisiert, so dass ein erneuter Abgleich sehr schnell durchgeführt werden kann. Die größten Vorteile von Unison sind:

  • das Programm ist plattformunabhängig. So lassen sich Daten über Betriebssysteme hinweg synchronisieren.

  • die Synchronisation funktioniert auch dann, wenn auf beiden Rechnern Dateien geändert wurden

  • Unison verwendet ein eigenes Übertragungsprotokoll und hat eine (optionale) grafische Oberfläche

  • eine schnelle Synchronisation über Netzwerke und das Internet ist möglich

Unison befindet sich nicht mehr in aktiver Entwicklung - diese konzentriert sich seit einer Weile auf Boomerang {en} (ehemals Harmony), welches weniger als grafisches Werkzeug, sondern eher als eine Art "Synchronisations-Programmiersprache" verstanden werden möchte. Das soll aber niemanden von der Unison-Nutzung abhalten - die Funktionen des Programms sind solide und ausgereift.

Installation von Unison

Die folgenden Pakete müssen installiert [1] werden:

  • unison (universe, [2]) - auf dem Server

  • unison-gtk (universe) - auf dem Client oder Einzelplatzrechner, grafische Version

Sollen Daten zwischen unterschiedlichen Computern synchronisiert werden, empfiehlt es sich, auf beiden Rechnern Unison und einen SSH-Server zu installieren. In diesem Falle wird Unison auf dem anderen Rechner automatisch gestartet, wodurch der Vergleich der Daten sehr viel schneller abläuft. Außerdem müssen keine Laufwerke eingehängt werden. Bedingung dafür ist, dass sowohl auf dem Server als auch auf dem Client die gleiche unison-Version installiert ist, sonst wird mit einer Fehlermeldung abgebrochen.

Für die Synchronsation zwischen internen und externen Datenträgern eines Einzelplatzrechners wird nur das Paket unison-gtk benötigt.

Hinweis:

Sollten sich die zu synchronisierenden Daten bereits auf beiden Computern befinden, ist es empfehlenswert, die Verzeichnisse einmal manuell abzugleichen, da Unison sonst beim ersten Lauf viele Fragen stellt. Bei späteren Durchläufen "merkt" das Programm dann, welche Dateien verändert oder gelöscht wurden.

Unison starten

Die grafische Version von Unison kann über "Anwendungen --> Zubehör", die Shell-Version über die Konsole mit "unison" gestartet werden. Es öffnet sich ein Fenster, in dem gespeicherte Profile angezeigt werden. Zum Erstellen eines neuen Profils werden drei Angaben benötigt:

  1. Name des Profils

  2. Quellpfad (Datenquelle)

  3. Zielpfad (Datenziel)

Dabei kann jeder der beiden einzugebenden Pfade zu einer der folgenden Kategorien gehören:

Methode Pfad Beschreibung Sicherheit
ssh* ssh://benutzer@rechner//pfad/fuer/sync schneller wg. Unison-Serverstart auf entferntem Rechner - zusätzliche Rechenzeit für ssh; kompliziert, wenn entfernter Rechner Windows-basiert sicherer als FTP, je nach SSH-Key-Qualität
fstab /pfad/fuer/sync für interne und externe Datenträger, langsam bei Netzwerkpfaden je nachdem
Socket socket://servername:NNNN/pfad/fuer/sync schnell, Umgehung von Firewalls unsicher

* wird in unison-gtk über Ausfüllen einzelner Felder komfortabel angeboten, macht für den ersten Pfad i.d.R. keinen Sinn

Ein Profil kann ganz einfach über die Pfeiltasten und "OK" gestartet werden. Der Rest des Programms ist selbsterklärend.

Sollte keine grafische Oberfläche vorhanden sein, oder die grafische Version im Zusammenhang mit ssh nicht funktionieren, kann die Konsolenversion von Unison wie folgt aufgerufen werden:

unison-gtk -ui text PROFILNAME 

Allerdings müssen neue Profile in diesem Fall von Hand im Verzeichnis ~/.unison erstellt werden. Wird PROFILNAME nicht angegeben, nimmt unison automatisch das Profil default.

Alternativ kann man auch eine Erstsynchronisation so anfangen (die erste Zeile sicherheitshalber):

mv ~/.unison/default.prf ~/.unison/default.old.prf
unison /pfad/fuer/quelle /pfad/fuer/ziel 

und nach abgeschlossener Synchronisation findet man eine neue Datei, die man beliebig benennen kann. Beispiel für eine Profildatei (.prf):

root = /pfad/fuer/quelle
root = /pfad/fuer/ziel

Diese Profildatei kann ggf. mit weiteren Einstellungen ("Preferences") in der Form "Wert = Ausdruck" befüllt oder nach Wunsch umbenannt werden:

mv ~/.unison/default.prf ~/.unison/aktenkoffer.prf 

Danach reicht ein

unison aktenkoffer 

Achtung: hat man sich vertippt usw., sollte man Unison einfach die default.prf wegnehmen (wie oben geschehen)

Beispiel einer .prf Datei für Unison

Im folgenden Beispiel werden Verzeichnisse in /home/NUTZER eines Desktop-PCs mit dem Laptop synchronisiert. Mit dabei ist auch das Mailverzeichnis von Thunderbird und die Bookmarks und Einstellungen des Firefox. Damit nichts verloren geht, werden ältere Dateien vor dem synchronisieren im Unterordner alt des jeweiligen Verzeichnisses in dieser Einstellung mit bis zu drei Versionen gesichert. Bei Platznot kann dieser Faktor natürlich auch reduziert werden. Die Datei ist natürlich an die eigenen Verhältnisse anzupassen.

# Roots of the synchronization
root = /home/NUTZER
root = ssh://laptop.local//home/NUTZER	# ssh und avahi ist installiert 

path = daten		# Pfade in home zu sync
path = Job
path = .mozilla
path = .thunderbird

ignore = Path {Telefon}	# ausgenommen diesem hier
ignore = Path {Cache}	#
ignore = Path {.mozilla/firefox/jazl3ho9.default/Cache}   # liegt Cache hinter .Verzeichnissen, ist der gesamte relative Pfad anzugeben

ignore = Name *_	# Sicherungsdateien werden auch nicht mehr gesichert
ignore = Name temp.*
ignore = Name *.o
ignore = Name *.tmp

# ignoriert Sicherungen 
ignore = Path {alt}
ignore = Name *~
ignore = Name .*~

# macht bis zu 3 Sicherungen im jeweiligen Unterordner alt
backuplocation = local
backup = Name *
backupprefix = alt/
maxbackups = 3
backupsuffix = .$VERSION

Automatisierung mit sucsynct

Hinweis!

Fremdsoftware kann das System gefährden.

Das sucsynct-Skript erleichtert die Verwaltung von Unison-Profilen und ermöglicht die automatische Synchronisation (sobald Dateien verändert werden).

Damit sich das Programm zu einem kleinen Status-Icon in der Systemleiste minimieren kann, wird Zenity in einer Version kleiner 3 oder yad benötigt. Die neueren GNOME 3 Zenity-Versionen unterstützen keine Icons in der Systemleiste mehr.

Für die automatische Synchronisation muss auf allen zu synchronisiernden Rechnern zusätzlich zu unison-gtk noch inotify-tools installiert sein (beide universe) und openssh-client bzw. ssh auf den Server-Rechnern. [1] Auf den ausführenen Client-Rechnern wird zudem bzr-gtk (universe) installiert, und das sucsynct Skript wie folgt heruntergeladen:

mkdir ~/bin
cd ~/bin
bzr branch lp:sucsynct 

Starten kann man sucsynct dann per

~/bin/sucsynct/sucsynct 

Updates erhält man per

bzr pull lp:sucsynct 

Alternatives Vorgehen

Hier wird ein älteres Skript vorgestellt, bei dem der Vergleich der Dateien allerdings vergleichsweise langsam vonstatten geht. Dazu muss das folgende Paket installiert werden [1]:

  • zenity

Wiki/Vorlagen/Installbutton/button.png mit apturl

Paketliste zum Kopieren:

sudo apt-get install zenity 

sudo aptitude install zenity 

Die Freigabe vorbereiten

Mit der Hilfe eines kleinen Skriptes kann ein System zum Synchronisieren von Daten zwischen zwei über NFS verbundenen Computern (z.B. Laptop und Desktop-Rechner) aufgebaut werden.

Für die folgende Anleitung wird davon ausgegangen, dass die NFS-Freigabe Dokumente eines Rechners A, z.B. eines Laptops, mit einem lokalen Ordner Ablage eines anderen Rechners B synchronisiert werden soll.

Der Ordner Dokumente auf Rechner A ist über NFS freigegeben. Um das Einhängen der Freigabe auf Rechner B zu erleichtern, legt man einen leeren Ordner Aktenkoffer als Einhängepunkt an und ergänzt die Datei /etc/fstab. Diese muss dazu in einem Editor mit Root-Rechten geöffnet werden [3]. Anschließend wird eine Zeile entsprechend der folgenden eingetragen:

192.168.1.5:/home/benutzer/Dokumente  /home/benutzer/Aktenkoffer  nfs noauto,user 0 0 

Die IP-Adresse des Rechners A muss gegebenenfalls angepasst werden, ebenso wie der Pfad zur Freigabe und zum Einhängepunkt.

Unison einrichten

Die Konfigurationsdateien für Unison liegen (nachdem man als Benutzer Unison einmal gestartet hat) im versteckten Verzeichnis ~/.unison, welches im Home-Verzeichnis liegt. Dort legt man eine Datei Aktenkoffer.prf an [3], die folgende Zeilen enthält:

root = /home/benutzer/Ablage/ 
root = /home/benutzer/Aktenkoffer/

Das Skript anlegen

Mit einem Skript erleichtert man sich die Arbeit ein wenig. Es hängt die Freigabe erst ein, führt dann die Synchronisation aus, und hängt dann die Freigabe wieder aus. Außerdem kann man auch nur den lokalen Ordner öffnen ohne zu synchronisieren, um z.B. Dateien hinzuzufügen.

Folgender Text ist in einer Datei Aktenkoffer.sh zu speichern [3]:

#!/bin/bash
# Dieses Script vergleicht die Aktenkoffer lokal und auf dem Laptop
tmpfile=/tmp/zen.$$
mounten () {
 mount ~/Aktenkoffer/
  if [ $? = "32" ] ; then
   zenity --error --text="Kann Laptop nicht mounten!"
   exit 2
  fi
}
unmounten () {
 umount ~/Aktenkoffer/
}
# Auswahl der gewünschten Aktion.
zenity --list \
        --title="Aktion wählen" \
        --text="Bitte die gewünschte Aktion wählen:" \
        --column="Aktion" \
        "lokalen Aktenkoffer öffnen" \
        "Aktenkoffer synchronisieren" \
        >> $tmpfile
if [ $? == "1" ] ; then
 rm -f $tmpfile
 exit 1
fi
aktion=`cat $tmpfile`
case $aktion in
# Lokalen Aktenkoffer öffnen
 "lokalen Aktenkoffer öffnen") nautilus --no-desktop /home/benutzer/Ablage;;
# Verzeichnis mounten und synchronisieren
 "Aktenkoffer synchronisieren") mounten
  unison-gtk Aktenkoffer.prf
  unmounten;;
 *) zenity --info --text="Keine Aktion gewählt!";;
esac
rm -f $tmpfile
exit 0

Auch hier müssen wiederum die Pfade entsprechend angepasst werden.

Das Skript muss nun noch ausführbar gemacht werden [4].

Einen Starter anlegen

Um die Verwendung zu erleichtern, legt man sich noch einen Starter entweder auf dem Desktop oder im Panel an. Dies geht über Rechtsklick -> "Starter anlegen..." bzw. Rechtsklick -> "Zum Panel hinzufügen... -> Benutzerdefinierter Anwendungsstarter". Dort macht man folgende Angaben:

Name: Aktenkoffer
Kommentar: Synchronisiert den Aktenkoffer zwischen Desktop und Laptop
Befehl: /Pfad/zum/Aktenkoffer.sh
Typ: Anwendung

Als Symbol kann beispielsweise das obige Logo als SVG-Datei verwendet werden.

Probleme und Lösungen

Unterschiedliche Dateisysteme

Wer einen externen Datenträger nutzt, steht evtl. vor dem Problem, dass die Dateisysteme von Quelle und Ziel der Sicherung abweichen. Dies wird insbesondere dann zum Problem, wenn das Dateisystem des Ziels mit FAT32 formatiert ist und daher die Dateirechte von Linux nicht unterstützt. Für den häufigen Fall einer Quelle mit ext3 und einem Ziel mit FAT32 dann in die jeweilige .prf folgende Zeile einfügen [3]:

perms = 0

Ubuntu 11.04

Falls man bei der Synchronisation über SSH keine Passwortabfrage angezeigt bekommt (siehe 696706), muss entweder Unison auf eine funktionierende Version aktualisiert werden oder die SSH Authentifizierung mit Public Keys ohne Passwort durchgeführt werden.

Ubuntu 10.04 mit neueren Ubuntus synchronisieren

Da auf Grund der Update-Politik von Ubuntu Unison in Ubuntu 10.04 Lucid Lynx nur in Version 2.27 vorliegt in den darauf folgenden Distributionen aber 2.32 verwendet wird, lassen sich Daten auf verschiedenen Systemen nicht direkt mit Unison synchronisieren.

Um dieses Problem zu umgehen, wird unter Ubuntu 10.04 Lucid Lynx ebenfalls die Unison-Version 2.32 installiert. Dazu können die beiden von den Entwicklern erstellten Backport-Pakete auf Launchpad verwendet werden.

Hinweis!

Fremdpakete können das System gefährden.

Für 32-Bit-Systeme finden sich diese hier {dl} und für 64-Bit-Systeme hier {dl}. Die Warnungen, dass eine ältere Version über die normalen Quellen angeboten wird, können ignoriert werden.

Sollte vor dem Synchronisieren eine Fehlermeldung auf fehlende oder zu löschende Archiv-Dateien verweisen, dann sind sie der Ausgabe entsprechend zu entfernen. Sie befinden sich im Ordner ~/.unison.

SSH-Server läuft auf anderem Port als 22

Wenn man den SSH-Server auf einem anderen Port als 22 laufen hat, muss man in seinem Profil den Pfad anpassen. Dazu öffnet man mit dem Editor [3] das entsprechende Profil und ändert den SSH-Pfad folgendermaßen:

ssh://benutzer@rechner:Port//pfad/fuer/sync

Mehrere Ordner

In der Grundeinstellung synchronisiert Unison den angegebenen Ordner rekursiv. Das kann man ändern. Dazu folgendes Beispiel einer .pref-Datei:

root = /home/<benutzername>
root = /pfad/fuer/ziel

path = Bilder
path = Dokumente
path = Musik

Nun werden ausschließlich die via "path = ..." definierten Ordner von "<benutzername>" berücksichtigt. Bei Bedarf kann man auch "ignore = Path ..." nutzen, um bestimmte Ordner bewusst auszuschließen.

ubuntuusers.local › WikiUnison