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

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.)

OffeneFragen:

  • 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

rsync (zuletzt geändert am 2010年06月17日 05:40:10 durch dslb-088-068-211-238)

AltStyle によって変換されたページ (->オリジナル) /