37.4Verzeichnisse synchronisieren (rsync)

Das Kommando rsync synchronisiert Verzeichnisbäume. Sie können damit im ersten Durchlauf alle Dateien von einem Verzeichnis in ein neues Verzeichnis kopieren. Bei den weiteren Durchläufen werden nur noch geänderte Dateien kopiert und (auf Wunsch) auch Löschvorgänge repliziert. rsync eignet sich damit ausgezeichnet, um z.B. täglich oder wöchentlich eine vollständige Kopie eines Verzeichnisses auf einer externen Festplatte zu synchronisieren.

rsync kann auch über Netzwerkverbindungen eingesetzt werden. Standardmäßig erfolgt die Kommunikation via ssh. Damit ist die Datenübertragung auch gleich verschlüsselt. Alternativ können Sie auch ein anderes externes Shell-Programm einsetzen oder konfigurieren auf der Gegenseite einen rsync-Server.

Tabelle 37.2 zeigt die Syntax zur Angabe der Quell- und Zielverzeichnisse. Tabelle Tabelle 37.3 fasst die wichtigsten Optionen zur Steuerung von rsync zusammen.

Schreibweise

Bedeutung

datei1 datei2

lokale Dateien

verzeichnis

lokales Verzeichnis

host:verz

Verzeichnis auf dem Rechner host

user@host:verz

wie oben mit SSH-Login unter dem Namen user

rsync://user@host/verz

Kommunikation mit rsync-Server

rsync://user@host:port/verz

rsync-Server am angegebenen Port

Tabelle 37.2Angabe von Quell- und Zielverzeichnissen in rsync

Option

Wirkung

-a bzw. --archive

kopiert rekursiv und erhält alle Dateiinformationen.

--delete

löscht im Zielverzeichnis Dateien bzw. Verzeichnisse, die im Quellverzeichnis nicht mehr existieren.

-D

berücksichtigt auch Device- und Spezialdateien.

--exclude=muster

überspringt die angegebenen Dateien.

-g bzw. --group

erhält die Gruppenzugehörigkeit.

-l bzw. --links

dupliziert symbolische Links.

-o bzw. --owner

erhält die Besitzerinformationen.

-p bzw. --perms

erhält die Zugriffsrechte.

-r bzw. --recursive

kopiert rekursiv auch alle Unterverzeichnisse.

-t bzw. --times

erhält die Änderungszeit.

-u bzw. --update

ignoriert bereits vorhandene, ältere Dateien.

-v bzw. --verbose

zeigt an, was gerade passiert.

-W bzw. --whole-file

kopiert bei Änderungen die gesamte Datei.

-z

komprimiert die via SSH übertragenen Daten.

Tabelle 37.3rsync-Optionen

Um ein ganzes Verzeichnis inklusive aller Unterverzeichnisse zu synchronisieren, verwenden Sie die Option -a, die als Kurzschreibweise für eine ganze Reihe anderer Optionen gilt (-rlptgoD). Die Option bewirkt eine rekursive Verarbeitung aller Unterverzeichnisse und stellt sicher, dass möglichst alle Dateiinformationen erhalten bleiben, also Besitzer, Gruppenzugehörigkeit, Zeitpunkt der letzten Änderung etc. Falls verz2 noch nicht existiert, wird das Verzeichnis erzeugt. Anders als bei cp werden bereits vorhandene Dateien, die seit dem letzten Kopieren unverändert geblieben sind, nicht neuerlich kopiert.

user$ rsync -a verz1/ verz2/

Standardmäßig kopiert bzw. aktualisiert rsync alle neuen bzw. geänderten Dateien, löscht aber nichts. Wenn Sie möchten, dass aus verz1 gelöschte Dateien oder Verzeichnisse auch in verz2 gelöscht werden, geben Sie zusätzlich die Option --delete an. Es sollte klar sein, dass diese Option gefährlich ist: Wenn Sie versehentlich ein Verzeichnis löschen, wird genau dieses Verzeichnis beim nächsten Backup-Vorgang auch auf der Backup-Festplatte gelöscht!

Bei der Anwendung von rsync zur Synchronisation von Verzeichnissen auf unterschiedlichen Rechnern müssen Sie das Quell- und das Zielverzeichnis in der Schreibweise hostname:verzeichnis bzw. username@hostname:verzeichnis angeben. Im ersten Fall verwendet rsync den aktuellen Benutzernamen.

Durch das folgende Kommando wird das Verzeichnis verz1 des lokalen Benutzers username auf dem Rechner saturn.sol mit dem Verzeichnis verz2 auf dem Rechner mars.sol synchronisiert. Für die Passworteingabe ist ssh verantwortlich. Sie müssen also das Login-Passwort des Benutzers username auf dem Rechner mars.sol eingeben.

username@saturn.sol$ rsync -e ssh -az verz1/ mars.sol:verz2/ username@mars.sol's password: ******

rsync kann Dateien auch von einem entfernten Rechner auf den lokalen übertragen. Das folgende Kommando synchronisiert also in die umgekehrte Richtung:

username@saturn.sol$ rsync -e ssh -az mars.sol:verz2/ verz3/ username@mars.sol's password: ******

Wenn rsync durch ein automatisches Backup-Script aufgerufen werden soll, stört natürlich die interaktive Passworteingabe. Die Lösung besteht darin, auf dem lokalen Rechner eine private Schlüsseldatei einzurichten und auf dem Partnerrechner den dazu passenden öffentlichen Schlüssel (siehe Abschnitt 32.4, »Authentifizierung mit Schlüsseln«). Wenn Sie bei der Erzeugung der Schlüssel auf die sogenannte Passphrase verzichten, ist nun ein SSH-Login ohne Passwort möglich. Aus Sicherheitsgründen sollten Sie für das Backup-Script einen eigenen Account vorsehen.

Neben der hier vorgestellten Anwendung von rsync in Kombination mit SSH besteht auch die Möglichkeit, dass das lokale rsync-Kommando mit einem rsync-Server auf dem entfernten Rechner kommuniziert. Das setzt voraus, dass auf dem Partnerrechner ein rsync-Server eingerichtet wurde. Dessen Konfiguration erfolgt durch die Datei /etc/rsyncd.conf. Die Kommunikation zwischen dem rsync-Client und dem rsync-Server erfolgt dann über den Port 873. Dieser Port darf daher nicht durch eine Firewall blockiert sein.

In der Praxis ist die Konfiguration eines rsync-Servers zumeist nur empfehlenswert, wenn der Server regelmäßig von verschiedenen Clients gespiegelt wird, also als Mirror-Server dient:

http://unix.stackexchange.com/questions/26182
http://serverfault.com/questions/100707