Inhaltsverzeichnis

rsync: Anwendung und Beispiele

rsync1) ist sowohl ein Netzwerkprotokoll (TCP Port 873) als auch ein unter der GPL stehendes Programm zur Synchronisation von Daten, meistens über ein Netzwerk. Die Synchronisation läuft bei rsync nur unidirektional, also von einem Quellverzeichnis zu einem Zielverzeichnis, ab. Wenn beide Verzeichnisse geändert wurden, werden die Änderungen nicht zusammengeführt (merge), sondern die Änderungen im Zielverzeichnis gehen verloren. Bei der Datenübertragung werden Teile einer Quelldatei (die zu übertragende Datei), die sich bereits in der Zieldatei befinden, nicht übertragen, wodurch viel Transfervolumen gespart werden kann (Delta-Kodierung)2)3).

rsync kann zB immer dann verwendet werden, wenn ein Fileserver auf neue Hardware umzieht. Im Gegensatz zu normalen Kopiervorgängen, wo uU bei einem Fehler der komplette Kopiervorgang abgebrochen wird, kann rsync diese Fehler ignorieren bzw. übergehen und ggf die Fehler in ein Log-File schreiben. Gerade bei Fileservern kann es uU auch wichtig sein, den original Zeitstempel der Dateien und Verzeichnisse zu erhalten; normale Kopiervorgänge zB ändern das Änderungsdatum auf das aktuelle zum Zeitpunkt des Kopierens. rsync wird durch seine Eigenschaft, nicht den gesamten Verzeichnisbaum zu kopieren, sondern nur geänderte Daten und davon auch nur Teile, auch in verschiedenen Backup-Szenarien Anwendung finden.

Syntax

Syntax

Local:
rsync [OPTION…] SRC… [DEST]

Access via remote shell:
Pull: rsync [OPTION…] [USER@]HOST:SRC… [DEST]
Push: rsync [OPTION…] SRC… [USER@]HOST:DEST

Access via rsync daemon:
Pull:
rsync [OPTION…] [USER@]HOST::SRC… [DEST]
rsync [OPTION…] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push:
rsync [OPTION…] SRC… [USER@]HOST::DEST
rsync [OPTION…] SRC… rsync://[USER@]HOST[:PORT]/DEST

rsync 3.0.7
Option (lang) (kurz) Bedeutung
--help -h Hilfe anzeigen
--archive -a Archiv-Modus = -Dgloptr (-Do benötigen root-Rechte!)
device group links owner permission times recursive
-D Geräte + Spezialdateien transferieren (nur root!)
--group -g Besitzer-Gruppe transferieren
--links -l Symbolische Links transferieren
--owner -o Besitzer transferieren (nur root!)
--perms -p Zugriffsrechte transferieren
--times -t Datum transferieren
--recursive -r Ganze Verzeichnis-Bäume replizieren
--rsh=CMD -e Zu benutzende "Remote Shell" (z.B. ssh)
--compress -z Komprimierung der Datenübertragung (remote sinnvoll)
--quiet -q Ablaufmeldungen unterdrücken (nur Fehlermeldungen)
--verbose -v Meldung pro transferierter Datei
2x --verbose -vv Meldung mit übersprungenen Dateien
3x --verbose -vvv Meldung mit Debuginfo (sehr viel!)
--delete Dateien löschen, die auf dem Sender fehlen
--delete-during Dateien WÄHREND Transfer löschen [--del]
--delete-before Dateien VOR Transfer löschen
--delete-after Dateien NACH Transfer löschen
--dry-run -n Aktionen nur anzeigen, NICHT ausführen
--update -u Neuere Dateien NICHT überschreiben
--hard-links -H Harte Links erhalten (aufwendig!)
--sparse -S Sparse Dateien erhalten (lange 0-Byte Sequenzen)
--acls -A ACLs transferieren (enthält --perms)
--ignore-errors Löschen auch bei aufgetretenen I/O Errors
--ignore='[Pattern]' Dateien die dem angegebenen Pattern entsprechen ausschließen
--extended-attributes -X »Nur Mac OSX« Extended Attributes transferieren
--filter="[+/-] [Pattern]" -f Elemente auf die das angegebene Suchpattern zutrifft kopieren (+) bzw. weg lassen (-)

Beispiele

Lokal das Verzeichnis »~/Desktop/Bilder« nach »/tmp/archiv« kopieren:

$ rsync ~/Desktop/Bilder/ /tmp/archiv/

Dadurch werden nur Dateien aus dem Bilder Ordner synchronisiert, evtl. vorhandene Unterverzeichnisse werden nicht berücksichtigt. Ebenfalls wird den Dateien im Zielverzeichnis das zum Zeitpunkt der Synchronisation aktuelle Datum als Änderungsdatum vergeben. Um nun evtl. vorhandene Unterverzeichnisse mit zu synchronisieren und den Dateien ihren eigentlichen Zeitstempel bzgl. des Änderungsdatums zu erhalten, verwenden Sie die Optionen -r (rekursiv) und -t (time):

$ rsync -rt ~/Desktop/Bilder/ /tmp/archiv/

Jetzt werden auch die Unterverzeichnisse von »~/Desktop/Bilder« übertragen und der originale Zeitstempel wird beibehalten. Wenn jetzt im Quellverzeichnis Dateien liegen, die unterschiedlichen Benutzern gehören, würde bei og Kommando im Zielverzeichnis jede Datei dem User gehören, der den rsync Befehl ausführt. Um die Owner Informationen zu erhalten, verwenden Sie den Schalter -o für den Eigentümer und -g für die Gruppe Note: Diese Option darf nur root verwenden, daher müssen Sie bei dieser Option das rsync-Kommando mit sudo ausführen:

$ sudo rsync -rtog ~/Desktop/Bilder/ /tmp/archiv/

Jetzt haben wir bereits den Inhalt des Quellverzeichnissen mit samt seinen Unterverzeichnissen (-r) übertragen, wir haben den Zeitstempel (-t), Besitzer (-o) und Gruppe (-g) erhalten, jetzt bräuchten wir noch die Zugriffsrechte an sich. Um die ACLs zu erhalten, verwendet man den Schalter -p andernfalls würden die Verzeichnisse und Dateien die Standardberechtigungen, welche in der umask vorgegeben sind, erhalten:

$ sudo rsync -rtogp ~/Desktop/Bilder/ /tmp/archiv/

Mittlerweile haben wir schon ein recht brauchbares Ergebnis.

Note: Der abschließende Slash »/« beim SRC Verzeichnis bewirkt, dass nur der Inhalt von SRC übertragen wird. Lassen Sie diesen Slash weg, wird das Verzeichnis SCR ebenfalls mit kopiert! Das ganze rutscht dann um eine Verzeichnisstufe höher.

Remote Login: Jetzt können wir mal damit beginnen, ein Verzeichnis auf einen anderen Rechner zu synchronisieren. Dafür müssen die Zugangsdaten eines berechtigten Benutzers auf der Zielmaschine bekannt sein und auch den kompletten (absolute) Pfad zum Zielverzeichnis muss man angeben. Um nun das og Testverzeichnis ~/Desktop/Bilder mit dem letzten Parametersatz (-rtogp) auf einen anderen Rechner (192.168.111.159) mit dem Benutzer dtp als Logininformation in das Verzeichnis /tmp/archiv zu kopieren verwenden Sie folgendes Kommando:

$ sudo rsync -rtogp ~/Desktop/Bilder/ dtp@192.168.111.159:/tmp/archiv/

In diesem Fall werden Sie zweimal aufgefordert ein Passwort einzugeben. Das erste mal für das sudo Kommando → Das ist das Passwort eines administrativen Benutzers (root) auf der lokalen Maschine) und das zweite Mal für die Login Daten des Remote Servers.

Einsatz von Filtern: Um nur die Verzeichnisstruktur, jedoch keine Dateien zu kopieren, können entsprechende Filter gesetzt werden. Der Filter »-f"+ */"« includiert (+) alle Verzeichnisse (*/) und der Filter »-f"- *"« schließt alle Dateien aus:

$ rsync -a -f"+ */" -f"- *" /Quelle /Ziel

Um nur die Verzeichnisstruktur und PDF Dateien zu kopieren und alle anderen Dateien wegzulassen, erweiteren Sie die vorrangegangenen Filter um den Filter »-f"+ *.pdf"«:

$ rsync -a -f"+ */" -f"+ *.pdf" -f"- *" /Quelle /Ziel

Note: Wenn auf der Quellmaschine Dateien dem User root gehören, werden diese Ownerships auf der Zielmaschine nicht berücksichtigt. Man müsste sich entweder gleich mit dem User root verbinden oder aber wenn dieser wie zB auf Mac OS nicht aktiviert ist über einen SSH Key für root verbinden. Dann kann man auch den User root für die SSH Session verwenden, obwohl dieser auf der Zielmaschine nicht aktiviert ist!

rsync unter Mac OSX

Die rsync Implementierung unter Mac OSX hält noch eine Besonderheit bereit, es kann mit den »Extended Attributes« von Apple umgehen. Wir wollten damit über den Umweg einer Mac OSX Workstation einen Third Party AFP Server (Helios) auf einen anderen (ExtremeZ-IP) migrieren. Dabei wurden auf der Workstation beide Server gemountet und im Terminal ein rsync mit dem Parametersatz »rsync -vvrltuX --ignore-errors --delete --force --exclude='Network Trash Folder' $SRC $DST« angeworfen. Dabei sorgt dann im Prinzip das AFP Protokoll für die Weitergabe der EAs und jeder AFP Server für sich dann für das korrekte Abspeichern der EAs in seinem Filesystem.

In diesem speziellen Setup war jedoch eine gepatchte rsync Version von Nöten. Bei der Default rsync Version 3.0.7 werden die erweiterten Attribute auf dem Quellserver nicht korrekt ausgelesen, was beim Transport einen Fehler erzeugt. Mike Bombich hat eine gepatchte Version in seinem Blog bereit gestellt, welche den korrekten Transport der EAs gewährleisten soll4). Aber auch diese Version hatte einen Bug, welcher vor Allem bei hohen Datenmengen und großen Verzeichnistiefen wieder für Probleme bei den erweiterten Attributen sorgte aber dieser Bug wurde im März 2011 dann von Mike gefixt und ab da konnten wir auch erfolgreich unseren Fileserver migrieren. Einen herzlichen Dank an Mike an dieser Stelle für den Bugfix. Leider ist es Stand 05/2013 nun so, dass Mike diese Version von seiner Webseite entfernt hat.



pronto 2011/01/28 10:10