Dateien abgleichen mit Rsync

Aus LinuxUser 04/2006

Dateien abgleichen mit Rsync

© photocase.com

Synchroner Datenstrom

Mit Rsync synchronisieren Sie Daten – auf dem lokalen Rechner oder über ein Netzwerk auf entfernte Maschinen. Dank guter Zusammenarbeit mit SSH überträgt das Tool die Daten verschlüsselt und arbeitet auch dann noch recht flott, wenn es an Bandbreite mangelt.

Zu Befehl

Auch wenn sich viele Dinge bequem über grafische Oberflächen wie KDE oder Gnome regeln lassen – wer sein Linux-System richtig ausreizen möchte, kommt um die Kommandozeile nicht herum. Abgesehen davon gibt es auch sonst viele Situationen, in denen es gut ist, sich im Befehlszeilendschungel ein wenig auszukennen.

Rsync bringt Licht ins Versionschaos und hilft dabei, Datenbestände aktuell zu halten. Das Synchronisierungs-Programm bietet Optionen, um Dateieigenschaften zu erhalten, arbeitet mit SSH zusammen und eignet sich ideal, um auch große Datenmengen schnell zu übertragen, wenn auf der Zielseite schon eine ältere Kopie vorliegt: Es überprüft, welche Unterschiede zwischen Quelle und Ziel existieren, und überträgt nur die geänderten Teile der Daten.

Alles synchron

Rsync vergleicht die Daten zweier Rechner miteinander, der grundsätzliche Aufruf lautet daher: rsync [Optionen]QuelleZiel. Hier ist die Wahl von Quelle und Ziel entscheidend. Überlegen Sie vorher genau, in welche Richtung Sie synchronisieren, um Datenverlust auszuschließen. Der Kasten “Daten unisono” zeigt darüber hinaus einen Ausweg aus der Einbahnstraße mittels der Software Unison, die Abgleiche in beide Richtungen durchführt.

Rsync bietet eine elegante Hilfe zum Prüfen des Datentransfers: Zusammen mit der Option -n startet das Programm lediglich einen Testlauf und verrät, was im Ernstfall passiert:

$ rsync -n dir1/* dir2/
skipping directory dir1/dir1
skipping directory dir1/dir2
skipping non-regular file "einl.?
tex"
kap01.tex
kap02.tex
kap03.tex
…

Die Ausgabe zeigt: Rsync würde normale Dateien übertragen, Verzeichnisse und Symlinks aber ausklammern. Letztere bezeichnet das Tool als non-regular files. Um Unterverzeichnisse rekursiv bis in den letzten Winkel zu übertragen, setzen Sie die Option -r ein, und Verweise auf andere Dateien erwischen Sie, wenn Sie zusätzlich -l angeben; eine Kombination der Optionen ist möglich:

$ rsync -rl ordner1/* ordner2/
building file list … done
einl.tex -> einl_neu.tex
kap01.tex
…

Für den Umgang mit symbolischen Links bringt Rsync eine alternative Option mit: Ersetzen Sie -l durch -L, löst das Programm die Verknüpfung, und die ehemaligen Symlinks finden Sie anschließend als normale Dateien im Zielverzeichnis wieder.

Kampf mit dem Schrägstrich

Anders als bei Programmen, wie Scp oder Cp, gibt bei Rsync der an einen Verzeichnisnamen angehängte Schrägstrich Ausschlag über die Wirkungsweise des Werkzeugs. Lautet der Aufruf beispielsweise rsync -a Quelle/OrdnerZiel überträgt Rsync das Verzeichnis Ordner mitsamt seinem Inhalt ins Zielverzeichnis.

Hängen Sie hingegen einen Schrägstrich an das Quellverzeichnis, wandert nur der Inhalt von Ordner ans Ziel – und zwar direkt ins Zielverzeichnis hinein (Abbildung 1).

Abbildung 1: Der Schrägstrich entscheidet: Kopiert Rsync nur den Inhalt oder das Verzeichnis selbst?

Abbildung 1: Der Schrägstrich entscheidet: Kopiert Rsync nur den Inhalt oder das Verzeichnis selbst?

Alles bleibt wie es ist

Setzen Sie Rsync zum Erstellen von Backups ein, bietet es sich an, sämtliche Dateieigenschaften beizubehalten. Dazu gehören nicht nur die Dateirechte, wie Lese-Erlaubnis, Schreibrechte und die Erlaubnis, die Datei auszuführen, sondern zusätzlich die sogenannten Timestamps (deutsch: Zeitstempel), dass heißt, Informationen zum letzten Dateizugriff (atime), zum letzten Ändern des Status (ctime) und der letzten Inhaltsmodifikation (mtime).

Weiterhin nützen dem Admin Parameter, welche den Besitzer sowie die Gruppenzugehörigkeit von Dateien sichern, und die Möglichkeit, Device-Dateien einzuschließen. Für den Erhalt der richtigen Rechte sorgt die Option -p, der Parameter -t kümmert sich um den Erhalt der Timestamps, und -g sorgt für den Erhalt der Gruppenmitgliedschaft.

Während diese drei Parameter jedem normalen Benutzer verwenden darf, stehen die Optionen -o (Erhalt des Dateieigentümers) und -D (Device-Eigenschaften) lediglich dem Systemverwalter zur Verfügung. Den kompletten Aufruf mit allen Optionen lautet rsync -rlptgoD home/huhn/* backup/. Es geht aber auch kürzer: Rsync bringt für diesen Fall eine eigene Option mit, die alle diese Parameter zusammenfasst. Anstelle von -rlptgoD schreiben Sie einfach -a.

Ausgeschlossen

Rsync bringt eine praktische Option mit, welche gezielt Dateien vom Synchronisieren ausklammert. Geben Sie dazu hinter --exclude= ein Suchmuster an und definieren die Ausschlusskandidaten. Dazu setzen Sie beispielsweise Wildcards einsetzen: rsync -a --exclude=*.bak ~/artikel/* backup/

Auf diese Weise schließen Sie alle Dateien, die auf .bak enden, vom Abgleich aus. Wollen Sie weiterhin Dateien ausklammern, welche mit einer Tilde enden, hängen Sie einfach einen weiteren --exclude-Aufruf an: rsync -a --exclude=*.bak --exclude=*~ QuelleZiel.

Sie sparen Tipparbeit, wenn Sie alle Ausnahmen in eine Textdatei schreiben. Jedes Suchmuster landet dabei in einer eigenen Zeile. Anschließend übergeben Sie eine solche Datei über den Parameter --exclude-from=Exclude-Datei.

Zusammenarbeit

Rsync arbeitet nicht nur auf dem lokalen Rechner, sondern synchronisiert auch Daten übers Netzwerk. Dazu übergeben Sie im Programmaufruf -e ssh, und die Dateien wandern verschlüsselt über das SSH-Protokoll hin und her. Ersetzen Sie weiterhin Quelle oder Ziel durch Namen oder IP-Adresse des entfernten Rechners. Verwenden Sie dort einen anderen Benutzernamen als auf der eigenen Maschine, stellen Sie den Usernamen voran gefolgt vom Zeichen @: rsync -e ssh Quelleuser@zielrechner:ziel/.

Nach dem Doppelpunkt geben Sie entweder einen relativen Pfad zum eigenen Home-Verzeichnis oder einen absoluten Pfad im Dateisystem des entfernten Rechners an. Ein Umgebungsvariable erspart Ihnen die Eingabe des Parameter zum SSH-Verschlüsseln bei jedem Aufruf. Für die Bash lautet der Aufruf:export RSYNC_RSH=ssh

Da dieses jeweils nur für die aktuelle Shell gilt, machen Sie das Verhalten dauerhaft, indem Sie diese Zeile in die Bash-Konfigurationsdatei ~/.bashrc schreiben und diese mit dem folgenden Befehl source ~/.bashrc neu einlesen.

Datenschaufel

Rsync eignet sich ideal zum Übertragen großer Datenmengen. Setzen Sie den Parameter --partial ein und der Transfer bricht ab, setzen Sie das Übertragen der Daten zu einem späteren Zeitpunkt fortsetzen an der gleichen Stelle fort. Verwenden Sie zusätzlich die Option --progress, um den Fortschritt beim Übertragen immer im Blick zu haben:

$ rsync --progress --pa?rtial debian.iso transpluto:/scr?atch/debian/
Password:
debian.iso
    22543992   3%    5.15MB/s   ?
0:02:14

Auf der Gegenseite sehen Sie die partielle Datei zunächst versteckt im Zielverzeichnis. Rufen Sie dort den Befehl ls -a auf, sehen Sie eine Datei nach dem Muster .debian.iso.wtKNr7. Der Punkt am Namensanfang sorgt dasfür, dass Sie normalerweise nicht sichtbar ist, und die willkürliche Endung verhindert ein versehentliches Überschreiben einer ähnlich benannten Datei.

Nach dem Transfer oder bei einem Abbruch, trägt die Datei wieder den Originalnamen. Bei einem eventuellen Abbruch starten Sie den Transfer einfach mit der Option --partial neu. Rsync schaut zunächst nach, wieviele Bytes schon vorliegen und überträgt nur den fehlenden Rest.

Einen Nachteil hat die Option --partial dennoch: Verwenden Sie Rsync, um eine bereits vorhandene Datei zu aktualisieren und der Transfer bricht ab, verschwindet die Datei auf dem Zielrechner und wird durch den übertragenen Teil ersetzt. Sie umgehen dieses Problem, indem Sie zunächst von dem Original einen Hardlink anlegen: ln debian.iso debian_orig.iso. Bricht nun der Transfer ab, verschwindet nicht etwa das ISO-Image. Lediglich die partielle Datei bekommt einen neuen Namen, und das Original ist noch da.

Daten unisono

Ein weiterer Synchronisierungs-Künstler kommt in Form von Unison [1] – ein Tool, dass nicht nur in beide Richtungen abgleicht, sondern darüber hinaus über den Tellerrand des eigenen Betriebssystems hinwegschaut: Das Programm gibt es nicht nur für Linux, sondern auch für Windows-Systeme, Mac OS X und Irix wie ein Blick in den Download-Bereich der Website verrät.

Wie der Artikel unter [2] zeigt, gibt es neben der grafischen Variante auch die Möglichkeit, Unison auf der Kommandozeile einzusetzen. Um zwei Verzeichnisse auf einem lokalen Rechner abzugleichen, tippen Sie beispielsweise: unison -ui text ordner1 ordner2.

Unterscheidet sich der Inhalt der beiden Ordner, weist Unison darauf hin, und zeigt an, in welche Richtung der Abgleich stattfinden wird und ob es sich um eine neue oder geänderte Datei handelt:

ordner1        ordner2
new file —->            kap01.?
tex  [f]
<—-  changed            kap02.?
tex  [f]

Um den Vorschlag anzunehmen, drücken Sie einfach [F]. Gibt es einen unlösbaren Konflikt, etwa weil sich beide Versionen seit dem letzten Programmaufruf verändert haben, zeigt Unison über <-?-> an, dass es von Ihnen eine Entscheidung erwartet. Geben Sie dazu beispielsweise < oder > ein; alternativ überspringen Sie den Schritt dieses eine Mal über Eingabe von [Umschalt-7] (/) oder auch in zukünftigen Sitzungen über [Umschalt-I].

Eine Übersicht aller verfügbaren Kommandos erhalten Sie, wenn Sie [Umschalt-ß] (?) tippen. Ganz zum Schluss fragt das Programm zur Sicherheit noch einmal nach, ob Sie die Änderungen wirklich durchführen wollen; geben Sie [Y] ein, um die Synchronisierung anzustoßen.

Proceed with propagating updates? [] y
Propagating updates
UNISON started propagating changes at 20:20:34 on 28 Feb 2006
[BGN] Copying einl.tex
  from /home/huhnix/ordner1
  to /home/huhnix/ordner2
…
Saving synchronizer state
Synchronization complete

Ebenso einfach gestaltet sich die Kontaktaufnahme zu einem entfernten Rechner. Stellen Sie zunächst sicher, dass auf beiden Maschinen dieselbe Unison-Version installiert ist und tippen dann unison -ui text ordner1 ssh://user@zielrechner/ordner1.

Die Syntax sieht etwas anders als bei Rsync aus: Anstelle des Doppelpunkts steht hier ein Schrägstrich – um einen absoluten Pfad anzusprechen, geben Sie einen weiteren Schrägstrich ein: unison -ui text ordner1 ssh://user@zielrechner//scratch/ordner1.

Glossar

Symlinks

Ein Symbolischer Llink (oder Softlink) zeigt als Verweis auf eine andere Datei. Anwendungsprogramme behandeln diesen genau wie die Datei selbst. Löschen Sie die Datei, auf die ein Symlink verweist, zeigt der Link ins Leere. Symlinks erzeugt das Kommando ln -s QuelleZiel.

Device-Dateien

Der Zugriff auf Geräte findet unter Linux durch entsprechende Dateien statt, die typischerweise im Verzeichnis /dev liegen. Hier finden sich Character und Block Devices: Auf Character Devices (wie zum Beispiel Terminals oder die serielle Schnittstelle) greifen Sie sequentiell, also Zeichen für Zeichen, zu. Von den Block Devices (Festplatten, Disketten oder DVD-Laufwerke) liest das System die Daten immer in Gruppen.

Wildcards

Wildcards ersetzen Teile von Zeichenketten. Ein Fragezeichen ? in einer Zeichenkette lässt nur einen Buchstaben dieser Zeichenkette unbestimmt. Beispiel: h?llo. Auf dieses Muster passen hallo, hGllo oder h7llo. Ein Sternchen * steht für keins oder beliebig viele verschiedene Zeichen. Beispiel: G*ss. Auf dieses Muster passt Guss, Genuss oder Gss.

Hardlink

Im Gegensatz zu einem symbolischen Link handelt es sich um einen Verweis auf den I-Node einer Datei, also einfach einen weiteren Eintrag in einem Dateiverzeichnis. Linux ordnet dem Verweis nur einen Namen zu und legt nicht etwa physikalisch eine neue Datei an. Alle Hardlinks sind übrigens gleichberechtigt für den Zugriff auf die Datei – der Inhalt verschwindet erst, wenn alle Hardlinks gelöscht sind.

Infos

[1] Unison-Homepage: http://www.cis.upenn.edu/~bcpierce/unison/

[2] Unison-Artikel: Daniel Rohark, “Datentandem – Daten synchronisieren mit Unison”, LinuxUser 02/2004, S. 60 ff., http://www.linux-user.de/ausgabe/2004/02/060-unison/

LinuxUser 04/2006 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