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.
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.
rsync kann Dateien auch von einem entfernten Rechner auf den lokalen übertragen. Das folgende Kommando synchronisiert also in die umgekehrte Richtung:
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