Zwei Datenbestände zu synchronisieren, das bedeutet, sie identisch zu machen: Nach einer solchen Aktion liegen in den Verzeichnissen auf zwei Rechnern exakt die gleichen Dateien. Das ist in einigen Fällen eine leichte Aufgabe, etwa wenn einer der beiden Orte nur das Backup-Archiv ist, an dem es nie zu Änderungen kommt.
Anders sieht die Situation aus, wenn Anwender Dateien an einem Desktop-Rechner und parallel dazu auf einem Notebook bearbeiten, neu erzeugen oder löschen. Dann ist manchmal unklar, was zu tun ist, um einen synchronen Zustand zu erreichen.
In den kniffligeren Situationen geht es oft nicht ohne manuelles Eingreifen. Tools wie Unison (siehe Sysadmin-Einführung sowie [3], [6]) erkennen Problemkonstellationen und lassen die betroffenen Dateien in Ruhe; aus dem Log ergibt sich dann, auf welche Dateien der Anwender oder Administrator noch einen Blick werfen muss.
Ändern sich Daten immer nur an einer Stelle, reicht die einseitige Synchronisation aus. Die erledigt komfortabel ein klassisches, vom Samba-Team entwickeltes Tool namens Rsync [1], das lokal oder über das Netzwerk zwei Verzeichnishierarchien angleicht. Beim Transport übers Netz verwendet Rsync das identisch benannte eigene Netzwerkprotokoll (»rsync://«). Um den Abgleich so effizient wie möglich zu gestalten, zerlegt Rsync Dateien in Blöcke, vergleicht mit Hilfe von Prüfsummen und überträgt nur geänderte Teile.
Datensicherung mit Rsync
Das Backup-Szenario ist wohl die populärste Anwendung von Rsync: Hier gibt es zu einem Verzeichnis an anderer Stelle eine exakte Spiegelung, die ein »rsync«-Aufruf regelmäßig oder nach größeren Änderungen aktualisiert. Modifikationen an den Dateien auf dem Backup-Rechner kommen dabei nicht vor, zur Synchronisation sucht Rsync also nur auf dem Quellrechner nach neuen, veränderten oder gelöschten Dateien.
Die einfachste Möglichkeit, dieses Verhalten zu erreichen, ist ein Befehlsaufruf der folgenden Form:
rsync -av --delete Quelle Ziel
Das Ziel ist dabei häufig ein Verzeichnis auf einem entfernten Rechner, für den Verbindungsaufbau verwendet Rsync standardmäßig eine SSH-Verbindung. (Ältere Versionen erfordern dafür noch die Zusatzoption »--rsh=ssh«.) Dann hat das Ziel die Form »Rechner:Verzeichnis« oder »Benutzer@Rechner:Verzeichnis«. Ein vollständiges Beispiel sieht so aus:
rsync -av --delete /home/xyz/Daten test@backup.linux-magazin.de:/var/backup/xyz/
Die Option »-a« schaltet Rsync in den Archivmodus, sie ist eine Abkürzung für »-rlptgoD«: »-r« (rekursiv); »-lptgo« (symbolische Links, Rechte (permissions), Zugriffszeiten (times), Gruppe (group) und Besitzer (owner) bleiben erhalten; »-D« (Gerätedateien). Mit »-v« gibt sich das Tool nur etwas gesprächiger, »--delete« führt zum Löschen von Dateien im Backup, die es auf dem Quellrechner nicht länger gibt. Abbildung 1 zeigt einen Aufruf, der über die Option »--stats« noch mehr Informationen ausgibt.
Abbildung 1: Höchst ausführlich: »rsync« gibt mit den Optionen »-v« und »--stats« nach den übertragenen Dateien noch statistische Daten aus.
Sicher ist sicher
Die Option »--delete« ist mit Vorsicht zu genießen (siehe Kasten "Rsync-Fallen"). Es bietet sich daher an, mit dem Parameter »-n« einen Testlauf durchzuführen und in der Ausgabe zu überprüfen, welche Dateien Rsync im Ernstfall löscht. Eine andere Möglichkeit zur Sicherung der Daten auf dem Zielrechner ist die Option »-b«, die Löschkandidaten nicht einfach von der Platte fegt, sondern mit einem Backup-Suffix versieht. Standardmäßig nimmt Rsync dafür die Tilde; die Option »--suffix« setzt eine andere Erweiterung:
rsync -avb --suffix=.bak --delete /home/xyz/Daten test@backup.linux-magazin.de:/var/backup/xyz/
Darüber hinaus ist es möglich, die zu löschenden Dateien auf dem Zielrechner stattdessen in ein eigenes Verzeichnis zu sichern. Die Option »--backup-dir« akzeptiert wahlweise entweder einen Ordner relativ zum Homeverzeichnis (»--backup-dir=alt/« schreibt die Sicherungskopien nach »~/alt« auf dem Zielrechner) oder eine absolute Pfadangabe.
Muss sich Rsync oft um den Abgleich zweier Maschinen kümmern, die beide veränderte Dateien enthalten, schützt die Option »-u« (update) vor Datenverlust. Sie verhindert, dass Rsync Dateien überschreibt, die auf dem Zielsystem einen neueren Zeitstempel haben als auf der Quelle. Dieser Mechanismus funktioniert nur korrekt, wenn beide Rechner mit derselben Systemzeit arbeiten, indem sie sich beispielsweise die Zeit von einem NTP-Server (Network Time Protocol) holen.