Duisburger Linux User Group - http://www.dulug.de
Workshop zu rsync
Autor: R. Verweyen

Beschreibung:
#############
"rsync" ist hauptsächlich ein Programm zum Kopieren von Dateien über
Netzwerke. Es beinhaltet die Funktionen die "cp", "rcp" und "scp"
bereitstellen, ist aber um einiges mächtiger und flexibler.

Vorteile gegenüber rcp und scp:
###############################
- So werden bei schon vorhandenen Zieldateien nicht immer die Daten als
Ganzes übertragen, sondern nur die Änderungen.
- Es ist in der Lage so ziemlich jede Datei und deren Berechtigeungen
zu übertragen (also auch Gerätedateien, Links, usw.)
- Man kann durch --exclude (ähnlich tar,cvs) bestimmte Dateien von dem
Vorgang auschließen
- Es benutzt transparente Shell-Zugaänge (rsh/ssh) oder einen
rsync-Daemon auf dem entfernten Rechner, d.h. es ist möglich Dateien
nur für Benutzer, oder aber die Allgemeinheit zugänglich zu machen.

Auf welche Arten kann ich "rsync" nutzen?
#########################################
* kopieren von lokalen Dateien:
rsync DateiA.txt ~/DateiB.txt
Kopiert die Datei DateiA.txt nach DateiB.txt ins /home-Verzeichnis
* kopieren zwischen lokalem Rechner und entferntem Rechner:
(Shell-Zugang erforderlich)
rsync dulug@dulug.de:~/DateiA.txt ~/
Holt die Datei DateiA.txt als Benutzer dulug aus seinem
/home-Verzeichnis
auf dem Rechner dulug.de auf den lokalen Rechner ins /home-Verzeichnis
rsync ~/DateiA.txt dulug@dulug.de:~/
Genau umgekehrt: legt die Datei auf den Rechner dulug.de ab
* kopieren zwischen lokalen Rechner und rsync-Server:
(kein Shell-Zugang erforderlich)
rsync ftp.kernel.org::pub/DateiA.txt ~/
rsync rsync://ftp.kernel.org/pub/DateiA.txt ~/
Holt die Dateiaus /pub von ftp.kernel.org
rsync ~/DateiA.txt ftp.kernel.org::pub/incoming/
rsync ~/DateiA.txt rsync://ftp.kernel.org/pub/incoming/
Genau umgekehrt: Legt die Datei auf dem Rechner ftp.kernel.org nach
/pub/incoming/ ab
(Shell-Zugang erforderlich)
wie oben, zusätzlich muß eine Remote-Shell angeben
--rsh=/usr/bin/ssh
--rsh=/usr/bin/rsh
--rsh=/usr/bin/remsh
* Anzeige des entfernten Verzeichnisses:
rsync ftp.kernel.org::pub/DateiA.txt
rsync rsync://ftp.kernel.org/pub/
Hier wird ein Listing ähnlich dem lokalen Befehl ls angezeigt.
Im ersten Fall ist es genau die Datei, im zweiten das gesamte
Verzeichnis (Den abschließenden / nicht vergessen!)

Beispiele:
##########
rsync *.txt dulug.de:texte/
Würde alle Dateien des lokalen Verzeichnisses mit der Endung .txt auf
den Rechner dulug.de in dessen Verzeichnis texte/ kopieren. Falls dort
schon eine Datei vorhanden ist, wird diese aktualisiert, indem nur die
Differenzen übertragen werden
rsync -avz dulug.de:texte/stammtisch ~/freitag
Kopiert alle Dateien unter Beibehaltung aller Datei-Berechtigungen
(-a) ins Verzeichnis ~/freitag/stammtisch. Hierbei nutzt es die
Kompression (-z) und zeigt zudem den Namen sowie weitere der
Informationen zu den übertragenen Dateien an (-v).
rsync -avz dulug.de:texte/stammtisch/ ~/freitag
Funktioniert genau wie oben, nur das die Dateien jetzt nicht in
~/freitag/stammtisch landen, sondern direkt in ~/freitag.
Der abschließende / sagt soviel wie: Kopiere den Inhalt des
Verzeichnisses
in fehlender / heißt: Kopiere das Verzeichnis

Optionen zu rsync:
##################
Es sind nur ein paar ausgewählte, mehr findet ihr in der Manpage
-h --help Kurze Hilfe
-v --verbose Zeige mehr Informationen über das was du gerade tust
-q --quiet Zeige weniger Informationen
-c --checksum mache vorher eine md4-Checksume für alle Dateien auf
der Sender-Seite und übertrage nur Dateien, wo die
Größe und md4-Summe nicht gleich sind.
(Achtung: Sehr langsam! Und wird normalerweise nicht
benötigt)
-a --archive Kopiere alle Links, Verzeichnisse, Berechtigungen,
Benutzer und Gruppen (Gut für Backup-Zwecke)
-r --recursive Kopiere alle darunterliegenden Verzeichnisse rekursiv
(sonst werden nur Dateien kopiert)
-b --backup überschreibe vorhandene Dateien nicht, sondern
verschiebe sie und lege sie neu an
--backup-dir= gibt an, wohin die Dateien verschoben werden.
--suffix= Welche Endung sollen die verschobenen Dateien erhalten?
Normalerweise "~", doch wenn --backup-dir genutzt wird
bleiben die Namen erhalten
-u --update Überspringe Ziel-Dateien, die neuer sind
-l --links Wenn Links kopiert werden sollen, lege sie im Ziel als
Links neu an
-L --copy-Links kopiere nicht den Link, sondern kopiere die Datei
-p --perms kopiere die Berechtigungen mit
-A --acls kopiere die ACLS mit (nicht überall vorhanden!)
-o --owner kopiere die Besitzer-ID
-g --group kopiere die Gruppen-ID
-D --devices kopiere Gerätedateien
-t --times kopiere Modifikations- und Zugriffszeiten
--delete lösche Dateien, die auf der Sender-Seite nicht (mehr)
existieren
-e --rsh= nutze die angegebene Remote-Shell anstatt ssh
--exclude= Kopiere Dateien, deren Name auf folgende Muster paßt
nicht mit
--include= Kopiere Dateien, deren Namen auf die Muster paßt
-z --compress Nutze Komprimierung
--numeric-ids Kopiere die Besitzer- und Gruppen-IDs als Nummern
anstatt sie auf dem Zielsystem anhand vorhandener
Accounts anzupassen
--daemon starte rsync-Server (/etc/rsyncd.conf)
--partial lösche halb übertragene Dateien nicht (sinnvoll bei
großen Dateien)
--progress zeige den Fortschritt
-P fasse --partial und --progress zusammen
--bwlimit= Maxmimal von rsync genutzte Bandbreite

Muster für --include und --exclude:
###################################
* Muster beginnt mit / : Suche am Anfang "/dulug" paßt auf dulug
im obersten Level der übertragenen Dateisystemhierarchie "dulug"
paßt auf jede Datei/Verzeichnis dulug
* Muster endet mit /: Nur Verzeichnisse, keine (Geräte)-Dateien,
Links passen hierauf
* Muster enthält *?[]: Wildcard wie auf der Shell
* Muster enthält "**": Wildcard paßt auch auf in der "/" in der
Hierarchie
* Muster mit "**" oder "/": Es wird der gesamte Pfad genutzt, nicht nur
der eigentliche Dateiname
* Muster mit "+ ": Muster ist immer ein INCLUDE auch wenn in
--exclude definiert. "+ " wird vor der Suche entfernt
* Muster mit "- ": Muster ist immer ein EXCLUDE auch wenn in
--include definiert. "- " wird vor der Suche entfernt
* Muster enthält !: Alle vorher definierten Muster verlieren ihre
Gültigkeit

Beispiel für /etc/rsyncd.conf
#############################
#/etc/rsyncd.conf
uid = dulug
gid = users
max connections = 5
syslog facility = daemon
pid file = /var/run/rsyncd.pid
[share]
path = /share
comment = Whole share area
read only = false
[dulug]
path = /home/dulug
comment = Dulugs home
read only = true

Gibt die Verzeichnisse mit den Benutzerrechten von "dulug" und den
Gruppenrechten von "users" frei. Läßt maximal 5 Verbindungen
gleichzeitig zu, loggt mit dem syslog-hinweis "daemon" und schreibt
seine PID nach "/var/run/rsyncd.pid". Nun zu den einzelnen Freigaben
(rsync nennt sie Module):
Modul share kann gelesen und beschrieben werden und beinhaltet die
Verzeichnisstruktur, die sich unter /share befindet. Ein Zugriff auf
diese Freigabe kann mit "rsync dulug::share/" erfolgen.
Modul dulug ist nur lesbar und beinhaltet die Struktur, die sich auf
der Festplatte unter /home/dulug befindet. Der Zugriff erfolgt auch hier
mittels "rsync dulug::dulug/"

man rsyncd.conf hilft bei allen weiteren Fragen