Rsync ist ein Programm, um Dateien/Verzeichnisse zu synchronisieren (lokal oder auch remote - daher das "r"). Rsync ist für Linux und Windows verfügbar.
An dieser Stelle möchte ich – um Irrtümern vorzugreifen – darauf hinweisen, dass rsync eigentlich nicht wirklich synchronisiert (sondern nur repliziert) das heißt, es ist möglich, in einem Dateibaum A neue Dateien hinzuzufügen, bzw. Dateien zu ändern und Dateibaum B mit diesen Änderungen aktuell zu halten – jedoch nicht umgekehrt: kurz gesagt es beherrscht nur unidirektionales Synchronisieren (oder auch Replizieren genannt). Wer bidirektionales Synchronisieren benötigt (also etwa Daten gleichzeitig auf Laptop und PC), kann auf unison zurückgreifen.
Homepage: http://rsync.samba.org/
Performance:
- Rsync wendet per Default einen Blockcheck-Algorithmus an. Dabei werden Dateien in Blöcke unterteilt, die anhand einer Prüfsumme verglichen werden; bei Übereinstimmung werden Blöcke nicht kopiert. Dies kann bei Dateien, bei denen immer nur ans Ende geschrieben wird - z.B. Logfiles oder sequentielle Mailboxen - von Vorteil sein. Bei anderen Dateitypen - z.B. Dbase-Files oder Word-Dateien - kann der zur Blockprüfung erforderliche Aufwand die potentielle Einsparung bei weitem übertreffen; dann wird Rsync sehr langsam. In diesen Fällen sollte die Blockprüfung mit der Option '-W' abgeschaltet werden.
- Mit der '-z'-Option oder mit '-e "ssh -C"' kann die Komprimierung eingeschaltet werden.
Sicherheit:
- Rsync gilt als sicheres Programm; es sind allerdings in den Mailinglisten Fälle diskutiert worden, in denen Rsync einzelne (Unter)Verzeichnisse ignoriert haben soll. Es ist auf jeden Fall eine gute Idee, per Skript mit 'find' im Ziel- und Ursprungsverzeichnis Dateilisten zu erzeugen und diese mit 'diff' zu vergleichen.
- Kritische Optionen wie z.B. 'delete' kann man mit der Option '--dry-run' testen. Dann bekommt man eine Auflistung, was Rsync im Ernstfall tun würde.
Beispiele:
rsync -avH --numeric-ids /src/ /dst/ erstellt 1:1 Kopie der Dateien in src nach dst. uid/gid wird dabei numerisch beibehalten (z.B. für Backup)
rsync -avb --delete /raid0 /raid1
- damit wird /raid1 (Ziel) mit /raid0 (Quelle) synchronisiert
dazu wird der archive-Modus verwendet, backups werden erstellt, verbose (gesprächig) ist er auch und es werden Dateien gelöscht, die nicht mehr in der Quelle stehen
rsync -an --update /raid0 /raid1
Mit -n wird --dry-run aktiviert. Es wird also nicht tatsächlich kopiert. Das ist gut zum Testen.
Mit --update werden Dateien übersprungen, die schon im Zielverzeichnis (/raid1) vorhanden und neuer oder genauso alt sind wie im Quellverzeichnis.
rsync -avzb -e ssh www.meinedomain.de:/ /backups/meinedomain/
- ähnlich wie oben, Quelle ist aber ein Rechner im Internet
die Daten werden vor Übertragung komprimiert (z)
- die Übertragung verwendet ssh (findet also verschlüsselt statt)
Tipps:
- Wenn die Quelle als letztes Zeichen einen Slash (/) enthält, kopiert rsync dieses Verzeichnis selbst nicht mit, sondern nur die darin enthaltenen Objekte.
rsync -av /test/mp3/ /mp3
kopiert den Inhalt von /test/mp3 in /mp3. Der Befehl
rsync -av /test/mp3 /mp3
würde das Verzeichnis /mp3/mp3 anlegen und dorthin kopieren.
- "--size-only" beim Spiegeln von öffentlichen Servern verwenden, spart Zeit und Bandbreite
- es reicht, wenn auf dem Server sshd läuft und rsync installiert ist, rsyncd braucht man für die o.g. Beispiele nicht laufen lassen
- wenn die User-IDs nicht synchron auf beiden Systemen sind, dann "--numeric-ids" für Backup-Zwecke verwenden, sonst "verbiegt" es die UIDs.
wenn man ab / synchronisieren will und vermeiden will, dass /proc und andere gemountete DateiSysteme erfasst werden, kann die Option "-x" bzw. "--one-file-system" verwendet werden.
wenn man SSH verwendet kann man den Usernamen einfach mit @ abgetrennt vor den Rechnernamen schreiben, also z. B. root@mein.rechner.de:/tmp/bla
ein Passwort mitzuliefern ist bei SSH nicht möglich. Man wird entweder nach dem Passwort gefragt oder man muss eine Public-Key Authentifizierung einrichten (siehe OpenSSH)
- Wenn man mit der '-e'-option Ssh-Kommandos mitgeben will, ist die Syntax z.B.: -e "ssh -1 -p 2222 -C"
- Rsync kann durch den Blockcheck-Algorithmus bei großen Dateien langsam werden; das kann man durch die '-W'-Option abstellen.
- Wenn man nur bestimmte Dateitypen kopieren will, geht dies, wie folgt:
- Man definiert eine Include-Datei mit z.B. den Zeilen: "*/, *.lyx, *.tex, *.pdf" (Das Komma bedeutet hier eine neue Zeile)
Der Aufruf ist 'rsync -options --include-from=include-datei --exclude=* from to'. (Wichtig ist die Reihenfolge; ohne das */ im Include-File würden nur Dateien aus dem ersten Level von 'from' berücksichtigt- Rsync erzeugt zwar so alle Verzeichnisse und Unterverzeichnisse auf dem Ziel, kopiert aber nur die ausgewählten Dateitypen!)
- WARNUNG: Manche Rsync-Versionen verwenden per Default Rsh; da hilft -e ssh.
- HINWEIS: Mit Cygwin ist Rsync auch für Windows verfügbar. Damit können Backups per Cronjob einfach und effizient durchgeführt werden. Insbesondere müssen Windows-Shares nicht freigegeben und mit Smbmount sichtbar gemacht werden.
Beispielanwendungen
/SnapshotBackups - Artikel über ein rsync-basierendes Backup-Verfahren mit täglichen/stündlichen "Snapshots".
/SynchronisierteServer - wie man einen Hauptserver und einen Backup-Server weitgehend (aber nicht vollst.) synchron hält.
Weiterentwicklung dieser Idee in Form eines Python-Scripts siehe: http://datamining.anu.edu.au/~ole/work/software/backup/
Ein kleines Shellskript zum Synchronisieren von Websites: wuppen
uidgidfix.py - wenn man mal --numeric-ids vergessen hat...
Bugs
Gestern auf dem LugStuttgart-Treffen haben 2 Anwender von rsync gemeint, dass bei Ihnen rsync ab und zu Dateien "vergessen" hat, genauer gesagt, dass:
- Dateien ausgelassen wurden - obwohl sie in der Quelle existierten, waren sie am Ziel nicht aufzufinden
- Dateien nicht upgedatet wurden - obwohl sie in der Quelle neuer waren als am Ziel, wurden sie am Ziel nicht upgedatet
- rsync baut eine interne Fileliste auf, bevor kopiert wird. Wenn eine sehr große Anzahl von Dateien kopiert werden soll, reicht ggf. der RAM Speicher nicht mehr.
Auf die Frage nach der Version war leider keine exakte Auskunft zu bekommen, außer:
- das rsync, das bei SuSE 7.x dabei ist
- die rsync-Versionen, die in Debian sind (Stable v.a.)
- wer hat Ähnliches auch beobachtet? Mit welcher rsync-Version?
- ist der Bug bekannt bei den Entwicklern?
- ist der Bug beseitigt, wenn ja, ab wann?
Gute Frage, aber evtl beser für die rsync Mailingliste/Bugzilla search.
Evtl könnte es was Ähnliches wie hier unter "Windows-related problems" beschrieben sein.
Frage: Wie kann ich Verzeichnisse anlegen lassen? -- ThomasHochstetter 2007-01-29 23:15:03
- Was meinst Du? Sowas:
test@linux:/tmp> mkdir -p src/subdir/more dest test@linux:/tmp> touch src/subdir/more/xxx test@linux:/tmp> touch src/subdir/yyy test@linux:/tmp> touch src/zzz test@linux:/tmp> find src/ src/ src/zzz src/subdir src/subdir/yyy src/subdir/more src/subdir/more/xxx test@linux:/tmp> rsync -av src/ dest/ building file list ... done ./ zzz subdir/ subdir/yyy subdir/more/ subdir/more/xxx sent 295 bytes received 104 bytes 798.00 bytes/sec total size is 0 speedup is 0.00 test@linux:/tmp> find dest dest dest/zzz dest/subdir dest/subdir/yyy dest/subdir/more dest/subdir/more/xxx
-- HenrykGerlach 2007-02-01 21:40:35