rsync ist ein viel­sei­ti­ges Tool, das den Da­tei­trans­fer über Netz­werk­ver­bin­dun­gen ver­ein­facht und die Syn­chro­ni­sie­rung lokaler Ver­zeich­nis­se be­schleu­nigt. Die hohe Fle­xi­bi­li­tät macht das Syn­chro­ni­sie­rungs­tool zu einer aus­ge­zeich­ne­ten Option für eine Vielzahl von Ope­ra­tio­nen auf Da­tei­ebe­ne. [TOC]

Was ist rsync?

rsync, abgekürzt für „remote syn­chro­niza­ti­on“, ist ein flexibles sowie netz­werk­fä­hi­ges Syn­chro­ni­sie­rungs­tool unter Linux. Mit dem Open-Source-Programm können Dateien und Ver­zeich­nis­se zwischen lokalen Systemen oder über Netzwerke hinweg syn­chro­ni­siert werden. Dazu nutzt das Tool eine dif­fe­ren­zi­el­le Da­ten­über­tra­gungs­tech­nik, bei der nur die tat­säch­lich ge­än­der­ten Ab­schnit­te von Daten über­tra­gen werden. Dadurch wird der Da­ten­aus­tausch minimiert und der Syn­chro­ni­sa­ti­ons­pro­zess erheblich be­schleu­nigt. Dank einer Vielzahl von Optionen erlaubt rsync eine genaue Steuerung des Syn­chro­ni­sa­ti­ons­ver­hal­tens. Die flexible Syntax er­mög­licht dabei sowohl einfache lokale Kopien als auch komplexe Netz­werk­syn­chro­ni­sa­tio­nen.

Die Syntax von rsync

Die Be­fehls­syn­tax von rsync ist einfach aufgebaut und ähnelt der von SSH, SCP und CP. Der grund­le­gen­de Aufbau sieht wie folgt aus:

rsync [OPTION] source destination
bash

Bei source wird der Quellpfad ein­ge­tra­gen, aus dem die Daten syn­chro­ni­siert werden sollen, während als destination der Zielpfad angegeben wird. Dazu bietet rsync eine Vielzahl von Optionen, mit denen der Syn­chro­ni­sa­ti­ons­pro­zess an die je­wei­li­gen An­for­de­run­gen angepasst werden kann. Zu den am häu­figs­ten ver­wen­de­ten Optionen gehören:

  • -a (Archive): Behält rekursiv Da­tei­be­rech­ti­gun­gen, Zeit­stem­pel, Gruppen, Besitzer und spezielle Da­tei­ei­gen­schaf­ten bei.
  • -v (Verbose): Zeigt de­tail­lier­te In­for­ma­tio­nen über den Syn­chro­ni­sa­ti­ons­pro­zess an.
  • -r (Recursive): Syn­chro­ni­siert Ver­zeich­nis­se und deren Inhalte rekursiv.
  • -u (Update): Überträgt nur Dateien, die neuer sind als die bereits vor­han­de­nen im Ziel­ver­zeich­nis.
  • -z (Compress): Reduziert den Da­ten­ver­kehr über das Netzwerk.
  • -n –itemize-changes: Zeigt eine Liste der Än­de­run­gen an, die vor­ge­nom­men werden sollen.
  • --delete: Löscht Dateien im Ziel­ver­zeich­nis, die in der Quelle nicht mehr exis­tie­ren.
  • --exclude: Schließt bestimmte Dateien oder Ver­zeich­nis­se von der Syn­chro­ni­sa­ti­on aus.
  • --dry-run: Simuliert den Syn­chro­ni­sa­ti­ons­pro­zess, ohne tat­säch­lich Dateien zu über­tra­gen.
  • --progress: Zeigt den Fort­schritt der Da­tei­über­tra­gung an.
  • --partial: Dateien, die teilweise über­tra­gen wurden, ver­blei­ben im Ziel­ver­zeich­nis, wenn die Über­tra­gung un­ter­bro­chen wird. Bei einer erneuten Über­tra­gung wird die Datei von ihrem letzten Zustand fort­ge­setzt.

rsync-Syntax: Beispiel

Die rsync-Syntax lässt sich leicht an einem prak­ti­schen Beispiel nach­voll­zie­hen. Mit dem folgenden Befehl wird das Ver­zeich­nis dir1 inklusive 100 leerer Test­da­tei­en und ein zweites, leeres Ver­zeich­nis dir2 erstellt:

$ cd ~
$ mkdir dir1
$ mkdir dir2
$ touch dir1/file{1..100}
bash

Der Inhalt von dir1 lässt auf demselben System mit dir2 mit der Option -r syn­chro­ni­sie­ren:

$ rsync -r dir1/ dir2
bash

Al­ter­na­tiv kann dazu die Option -a verwendet werden, die rekursiv syn­chro­ni­siert und sym­bo­li­sche Links, spezielle Ge­rä­te­da­tei­en, Mo­di­fi­zie­rungs­zei­ten, Gruppen, Ei­gen­tü­mer und Be­rech­ti­gun­gen enthält:

$ rsync -a dir1/ dir2
bash

Hinweis: Der Schräg­strich (/) am Ende des Quell­ver­zeich­nis­ses in einem rsync-Befehl ist wichtig, da er angibt, dass der Inhalt des Ver­zeich­nis­ses syn­chro­ni­siert werden soll, nicht das Ver­zeich­nis selbst.

$ rsync -a dir1/ dir2
Output
sending incremental file list
./
file1
file10
file100
file11
file12
file13
file14
file15
file16
file17
file18
. . .
bash

Ohne den ab­schlie­ßen­den Schräg­strich am Quell­ver­zeich­nis wird der Inhalt des Ver­zeich­nis­ses „Quell­ver­zeich­nis“ in das „Ziel­ver­zeich­nis“ kopiert:

$ rsync -a dir1/ dir2
Output
sending incremental file list
dir1/
dir1/file1
dir1/file10
dir1/file100
dir1/file11
dir1/file12
dir1/file13
dir1/file14
dir1/file15
dir1/file16
dir1/file17
dir1/file18
. . .
bash

In der Praxis ist es daher sinnvoll, den Schräg­strich am Ende des Quell­ver­zeich­nis­ses zu verwenden, um si­cher­zu­stel­len, dass der Syn­chro­ni­sa­ti­ons­pro­zess wie erwartet abläuft und der Inhalt des Quell­ver­zeich­nis­ses korrekt im Ziel­ver­zeich­nis landet.

rsync: Syn­chro­ni­sa­ti­on mit einem Remote-System

Die Syn­chro­ni­sa­ti­on eines Remote-Systems mit rsync ist im All­ge­mei­nen nicht schwer, Vor­aus­set­zung dafür ist, dass Sie SSH-Zugriff auf den Remote-Rechner haben und die not­wen­di­gen Au­then­ti­fi­zie­rungs­in­for­ma­tio­nen kennen. rsync verwendet häufig SSH (Secure Shell) für die sichere Kom­mu­ni­ka­ti­on mit Remote-Systemen. Zudem muss das Tool auf beiden Seiten in­stal­liert sein.

Ist der SSH-Zugriff zwischen beiden Rechnern ve­ri­fi­ziert, kann der Ordner dir1 auf einem Remote-Computer syn­chro­ni­siert werden. In diesem Fall soll das ei­gent­li­che Ver­zeich­nis über­tra­gen werden, daher fällt der nach­ge­stell­te Schräg­strich im folgenden Befehl weg:

$ rsync -a ~/dir1 username@remote_host:destination_directory
bash

Wird ein Ver­zeich­nis von einem lokalen System auf ein Remote-System ver­scho­ben, wird dies als „push“-Operation be­zeich­net. Im Gegensatz dazu sprich man von einer „pull“-Operation, wenn ein Remote-Ver­zeich­nis mit einem lokalen System syn­chro­ni­siert wird. Die Syntax dazu sieht wie folgt aus:

$ rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine
bash
vServer / VPS
VPS un­schlag­bar günstig auf Dell En­ter­pri­se Servern
  • 1 Gbit/s, un­be­grenzt Traffic & mehr Cores
  • Min­des­tens 99,99% Ver­füg­bar­keit & ISO-zer­ti­fi­zier­te Re­chen­zen­tren
  • Aus­ge­zeich­ne­ter 24/7 Premium-Support mit per­sön­li­chem Berater

Ver­wen­dung weiterer Optionen in rsync

Mit den bereits weiter oben vor­ge­stell­ten Optionen lässt sich das Stan­dard­ver­hal­ten von rsync weiter anpassen.

Über­tra­gung nicht kom­pri­mier­ter Dateien mit rsync

Die Netz­werk­be­las­tung bei der Über­tra­gung von nicht kom­pri­mier­ten Dateien lässt sich mit der Option -z wie folgt re­du­zie­ren:

$ rsync -az source destination
bash

Fort­schritt anzeigen und un­ter­bro­che­ne Über­tra­gun­gen wie­der­auf­neh­men

Mit -P lassen sich die Optionen --progress und --partial mit­ein­an­der kom­bi­nie­ren. Damit erhalten Sie eine Übersicht über den Fort­schritt der Über­tra­gun­gen und können gleich­zei­tig un­ter­bro­che­ne Über­tra­gun­gen wie­der­auf­neh­men:

$ rsync -azP source destination
Output
sending incremental file list
./
file1
    0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=99/101)
file10
    0 100%    0.00kB/s    0:00:00 (xfer#2, to-check=98/101)
file100
    0 100%    0.00kB/s    0:00:00 (xfer#3, to-check=97/101)
file11
    0 100%    0.00kB/s    0:00:00 (xfer#4, to-check=96/101)
. . .
bash

Führen Sie den Befehl erneut aus, um eine kürzere Ausgabe zu erhalten. Dadurch lässt sich mit rsync anhand von Än­de­rungs­zei­ten ermitteln, ob Än­de­run­gen vor­ge­nom­men wurden.

$ rsync -azP source destination
Output
sending incremental file list
sent 818 bytes received 12 bytes 1660.00 bytes/sec
total size is 0 speedup is 0.00
bash

Ver­zeich­nis­se mit rsync synchron halten

Um si­cher­zu­stel­len, dass zwei Ver­zeich­nis­se tat­säch­lich synchron gehalten werden, ist es er­for­der­lich, im Ziel­ver­zeich­nis Dateien zu löschen, die aus der Quelle entfernt wurden. Stan­dard­mä­ßig entfernt rsync jedoch keine Dateien aus dem Ziel­ver­zeich­nis. Dieses Verhalten kann mit der Option --delete mo­di­fi­ziert werden. Al­ler­dings ist es ratsam, diese Option mit Vorsicht zu verwenden, da diese Dateien im Ziel­ver­zeich­nis löscht, die in der Quelle nicht mehr vorhanden sind.

Bevor Sie die Option anwenden, sollten Sie die Option --dry-run verwenden. Diese er­mög­licht es Ihnen, eine Si­mu­la­ti­on des Syn­chro­ni­sa­ti­ons­pro­zes­ses durch­zu­füh­ren, ohne tat­säch­li­che Dateien zu löschen. So können Sie si­cher­stel­len, dass nur die ge­wünsch­ten Än­de­run­gen vor­ge­nom­men werden, ohne ver­se­hent­lich wichtige Daten zu verlieren:

$ rsync -a --delete source destination
bash

Dateien und Ver­zeich­nis­se von der Syn­chro­ni­sa­ti­on mit rsync aus­schlie­ßen

In rsync können Sie mit der Option --exclude bestimmte Dateien und Ver­zeich­nis­se von der Syn­chro­ni­sa­ti­on aus­schlie­ßen. Dies ist nützlich, wenn z. B. temporäre Dateien, Log­da­tei­en oder andere Inhalte nicht syn­chro­ni­siert werden sollen.

$ rsync -a --exclude=pattern_to_exclude source destination
bash

Haben Sie ein Muster zum Aus­schlie­ßen von Dateien angegeben, können Sie diesen Aus­schluss für Dateien, die einem anderen Muster ent­spre­chen, mit der Option --include= über­schrei­ben.

$ rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destination
bash

Backups mit rsync speichern

Die Option --backup bietet Ihnen die Mög­lich­keit, Backups von wichtigen Dateien zu speichern. Sie wird in Ver­bin­dung mit der Option --backup-dirverwendet. Diese gibt das Ver­zeich­nis an, in dem die Backup-Dateien ge­spei­chert werden sollen:

$ rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destination
bash

Einen genauen Überblick über die ver­schie­de­nen Backup-Szenarien erhalten Sie in unserem wei­ter­füh­ren­den Artikel Server-Backups mit rsync.

Zum Hauptmenü