Ubuntu 12.04 „Precise Pangolin“
Ubuntu 10.04 „Lucid Lynx“
Ubuntu 8.04 „Hardy Heron“
Unison 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 (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.
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.
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.
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:
Name des Profils
Quellpfad (Datenquelle)
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)
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
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
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
mit apturl
Paketliste zum Kopieren:
sudo apt-get install zenity
sudo aptitude install zenity
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.
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/
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].
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.
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
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.
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.
Fremdpakete können das System gefährden.
Für 32-Bit-Systeme finden sich diese hier und für 64-Bit-Systeme hier
. 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.
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
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.
rsync - wird intern zur Synchronisation verwendet
Synchronisation mit Unison und Conduit - Artikel Linux-Magazin 01/2008
Unisono-Verkündigung - Artikel Linux-Magazin 08/2007
Mehr als ein Verzeichnis mit Unison abgleichen - Blogbeitrag 05/2009
Unison Hint and Tips - Tipps zu "
ignore = Path
", "ignorenot
" etc.