aus: http://www.linux-user.de/ausgabe/2006/04/090-rsync/ Erschienen in LinuxUser 04/2006 » Ausgabe bestellen
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.
Heike Jurzik
|
README |
|
Rsync hält Datenbestände synchron -- lokal oder remote. Dazu kontrolliert das Programm zunächst die Unterschiede zwischen Quelle und Ziel und überträgt anschließend lediglich die Änderungen. |
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.
Rsync vergleicht die Daten zweier Rechner miteinander, der
grundsätzliche Aufruf lautet daher: rsync [Optionen]
Quelle Ziel.
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 ordner1/* ordner2/ skipping directory ordner1/ordner1 skipping directory ordner1/ordner2 skipping non-regular file "einl.tex" kap01.tex kap02.tex kap03.tex ...
Die Ausgabe zeigt: Rsync würde normale Dateien übertragen,
Verzeichnisse und symbolische Links
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.
Symbolischer
Link: Ein Symlink (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 Quelle Ziel.
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/Ordner
Ziel ü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))).
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.
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.
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=*~ Quelle Ziel.
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.
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.
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 Quelle
user@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.
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 --partial debian.iso transpluto:/scratch/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.
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.
|
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:
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 Eine Übersicht aller verfügbaren Kommandos erhalten
Sie, wenn Sie [Umschalt-ß] ( 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 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: |
|
Infos |
|
[1] Unison-Homepage: http://www.cis.upenn.edu/~bcpierce/unison/
|
Dieser Online-Artikel kann Links enthalten, die auf nicht mehr vorhandene Seiten verweisen. Wir ändern solche "broken links" nur in wenigen Ausnahmefällen. Der Online-Artikel soll möglichst unverändert der gedruckten Fassung entsprechen.
Druckerfreundliche
Version | Feedback
zu dieser Seite | Datenschutz
| © 2008 Linux
New Media AG | Last modified: 2008-04-22 14:02
[Linux-Magazin]
[EasyLinux]
[Linux-Community]
[Linux Events]
[OpenBytes]
[Linux
Magazine] [Linux
Magazin Romania] [Linux
Magazine Poland] [Linux
Community Poland] [Darmowe
Programy] [Open
Source DVD PL] [Linux
Magazine Brasil] [Linux
Magazine Spain]