Installation von Programmen (optional)
Bearbeiten von Paketquellen (optional)
rsync ist ein Programm, welches angegebene Dateien bzw. Verzeichnisse auf einem Quell- und einem Zielmedium miteinander vergleicht. Dabei werden sowohl die Größe, als auch die Erstellungszeit beachtet. Wenn sich nun zwei Dateien voneinander unterscheiden, verwendet rsync einen speziellen Algorithmus, der nur den Unterschied zwischen den zwei Dateien überträgt. Somit wird die Synchronisationgeschwindigkeit enorm gesteigert. Stimmen z.B. von einer 1 MB-Datei 200 kB nicht mit der anderen Datei überein, werden nur die 200 kB übertragen. Ausgeschlossen sind logischerweise Dateien, die noch nicht auf dem Zielmedium existieren. Beim ersten Abgleich werden somit alle Dateien komplett übertragen.
Aufgrund dieser Eigenschaften ist rsync sehr gut geeignet, um Sicherungen durchzuführen. Wenn man allerdings Verzeichnisse zwischen zwei Systemen wie Laptop und Desktop-Rechner synchronisieren möchte, sind Programme wie Unison besser geeignet.
Die Syntax des Befehls im Terminal [3] sieht folgendermaßen aus:
rsync [OPTIONEN] <Quelle> <Ziel>
Anstelle des Platzhalters Quelle gibt man den Ort an aus dem gelesen werden soll und das Ziel bestimmt den Ort in den rsync zu kopieren hat. Gibt man nur einen Parameter an, so wird dieser als Ziel interpretiert und es gilt das aktuelle Verzeichnis als Quelle.
-a fasst folgende Optionen zusammen:
-r kopiert Unterverzeichnisse
-l kopiert symbolische Links
-p behält Rechte der Quelldatei bei
-t behält Zeiten der Quelldatei bei,
-g behält Gruppenrechte der Quelldatei bei
-o behält Besitzrechte der Quelldatei bei (nur root)
-D behält Gerätedateien der Quelldatei bei (nur root)
Es ist empfehlenswert, die Option -a zu benutzen, um die Rechte und Eigentümer der Quelldatei auf dem Zielmedium zu übernehmen.
-v zeigt während des Synchronisierens alle Schritte die ausgeführt werden an
-P aktiviert folgende Optionen:
--progress Fortschrittsanzeige beim Transfer Anzeigen
--partial Fortsetzung des Transfers bei Abbruch
-n simuliert nur was passieren würde ("dry run")
-z aktiviert die Komprimierung für die Datenübertragung (diese Option ist sinnvoll, wenn zwischen Quelle und Ziel eine langsame Verbindung besteht)
-e damit lässt sich die remote shell auswählen, die meisten werden SSH nutzen also -e ssh
--exclude=Muster schließt ein bestimmtes Muster von der Sicherung aus
--exclude=ordner1 --exclude=ordner2 schließt ordner1 und ordner2 von von der Sicherung aus (bezieht sich immer auf <Quelle>!)
--delete sorgt dafür, dass Dateien, die im Quellverzeichnis gelöscht wurden, auch im Ziel gelöscht werden
-b sorgt dafür, dass durch die Option --delete gelöschte sowie alle veränderten Objekte gesichert werden
mit --backup-dir=Verzeichnis kann man ein Verzeichnis dafür angeben
-c sorgt dafür, dass zum Vergleich der Dateien Checksummen gebildet werden und nicht nur die Größe und der Timestamp verglichen werden. Diese Methode kann etwas länger dauern.
--iconv sorgt für eine Konvertierung der Dateinamen zwischen Systemen mit verschiedenen Codepages. Dieser Parameter kann erforderlich werden, wenn Dateien mit z.B. Umlauten im Namen übertragen werden.
--stats zeigt einen ausführlicheren Report am ende einer Übertragung an.
Für weitere Optionen und ausführlichere Erklärungen die Manpage oder Hilfe mit rsync -h aufrufen.
Vor dem Ausführen von rsync muss man sicher sein, die korrekten Parameter und Verzeichnisse angegeben zu haben. Fahrlässige Handhabung kann zu Datenverlust führen.
Kopiert man das gesamte Homeverzeichnis, so werden auch private Daten, wie die privaten Schlüssel von SSH und GnuPG kopiert.
rsync kann nur das kopieren, wozu der Nutzer auch Rechte hat, z.B. bei
rsync -a /etc ziel
kann es zu Problemen kommen. Falls nicht alles kopiert wird, kann man versuchen, von "Hand" die Daten mit cp bzw. scp zu kopieren oder man gibt sich durch das vorangestellte "sudo" root-Rechte.
sudo rsync -a /etc ziel
Vorsicht ist geboten, wenn man versucht, Konten wechselseitig zu sichern. Man sollte darauf achten, dass man nicht das Backup von A auf B wieder auf A kopiert.
Nicht zuletzt bedeutet die Option --delete wirklich delete! Sind in dem Zielverzeichnis andere Daten, werden sie ins Backup-Verzeichnis geschoben oder auch gelöscht!
Bei allen Angaben zur Quelle und/oder des Ziels ist zu beachten die slashes richtig zu setzen. Folgendes Beispiel soll dies verdeutlichen:
rsync -a /boot/grub /data/backup
erzeugt einen Unterordner /grub in /data/backup weil kein slash hinter /boot/grub steht. Das heißt, dass die Daten nicht in /data/backup gespeichert werden sondern in /data/backup/grub. Wird der Befehl so
rsync -a /boot/grub/ /data/backup
angewendet wird kein Unterordner beim Ziel erzeugt, da nun ein slash hinter /boot/grub/ steht. Das heißt, dass alle Daten von /boot/grub/ tatsächlich in das Verzeichnis /data/backup geschrieben werden. Folgende zwei Befehle sollen dies nochmals unterstreichen da beide exakt das gleiche abgleichen und kopieren:
rsync -a /boot/grub /data/backup rsync -a /boot/grub/ /data/backup/grub
In diesem Beispiel soll ein lokales Homeverzeichnis (/home/benutzer) auf einen zweiten Rechner mit dem Namen rechner.de gesichert werden, zu dem man per SSH Zugang hat.
Dazu benötigt man die Option -a, damit alle Rechte erhalten bleiben. -v ist immer gut, damit man sieht, was passiert. Der Parameter-z verringert die Datenmenge, die übertragen werden muss, und -e wird benötigt, um ssh anzugeben. Also sieht der Befehl so aus:
rsync -avze ssh /home/benutzer benutzer@rechner.de:/backups
Dies würde eine Kopie von /home/benutzer vom lokalen Rechner zum entfernten Rechner ins Verzeichnis /backups kopieren.
In diesem Beispiel soll das Verzeichnis /var/www vom Rechner rechner.de auf den lokalen Rechner gesichert werden. Außerdem sollen alle Dateien, die in /var/www gelöscht wurden, nachdem die letzte Sicherung erstellt wurde, lokal ebenfalls gelöscht werden, nachdem man sie noch ein letztes Mal sichert.
Es werden wieder die selben Optionen wie vorher genommen, sowie --delete für das Löschen und -b für Backups gelöschter und veränderter Dateien. Diese Backups befinden sich in dem mit --backup-dir angegebenen Verzeichnis.
Der Befehl sieht dann so aus:
rsync --delete -avzbe ssh benutzer@rechner.de:/var/www /home/benutzer/webserver --backup-dir=~/old
Sollen dem SSH-Befehl weitere Optionen angehängt werden, z.B. -i um einen abweichenden Private-Key bei der Anmeldung zu übergeben, muss der SSH-Befehl in einfache Anführungszeichen gesetzt werden, etwa so:
rsync --delete -avzbe 'ssh -i /pfad/zur/id_rsa' benutzer@rechner.de:/var/www /home/benutzer/webserver --backup-dir=~/old
Dann den ganzen Befehl mit Cron zeitgesteuert automatisieren und Angst vor einer defekten Festplatte oder versehentlich gelöschten Daten ist vorbei.
Werden Daten zwischen Systemen mit verschiedenen Zeichensätzen übertragen, werden Dateien mit Sonderzeichen im Dateinamen im Zielverzeichnis möglicherweise falsch benannt. Abhilfe schafft hier der Parameter --iconv (seit rsync 3.0.0), mit dem die Sonderzeichen zwischen den unterschiedlichen Zeichensätzen konvertiert werden können. Der Parameter erwartet als Werte die Codepages des lokalen und des Remote-Systems. Sollen beispielsweise Dateien mit Sonderzeichen im Dateinamen von einem System mit Codepage 1252 auf den lokalen Rechner (UTF-8) übertragen werden, lautet der Befehl:
rsync --iconv=UTF-8,CP1252 -avze ssh benutzer@rechner.de:/var/www /home/benutzer/webserver
Hierbei werden die Dateinamen aus /var/www vom Rechner rechner.de beim Übertragen auf den lokalen Rechner in das Verzeichnis /home/benutzer/webserver von Codepage 1252 nach UTF-8 umgewandelt.
Man kann neben dem Transfer über das Netzwerk rsync natürlich auch nutzen, um ein Backup auf eine andere interne oder externe (dies ist zu bevorzugen) Festplatte zu tätigen. Möchte man zum Beispiel alle Benutzerverzeichnisse sichern, so kann man dies mit
sudo rsync -av --progress --delete /home /media/Backup/
bewerkstelligen.
Mit dem Parameter --exclude können Verzeichnisse von der Bearbeitung ausgeschlossen werden. Dabei ist zu beachten, dass die Quelle immer als Bezugspunkt interpretiert wird.
Wenn also Daten vom Verzeichnis /home/user/daten/ nach /home/user/backup/ gesichert werden sollen und dabei das Verzeichnis /home/user/daten/temp/ nicht berücksichtigt werden soll, muss der Befehl so
rsync [OPTIONEN] --exclude=temp/ /home/user/daten/ /home/user/backup/
aussehen.
Möchte man ausserdem incremental backups von sbackup von der Sicherung ausnehmen, so müsste der Befehl so
rsync [OPTIONEN] --exclude=temp/ --exclude=*.inc /home/user/daten/ /home/user/backup/
aussehen.
Zum bequemeren Sichern kann man die grafische Benutzeroberfläche
grsync (universe, [2])
installieren [1]. Anschließend findet man im GNOME-Menü einen Anwendungsstarter unter "Anwendungen -> Systemwerkzeuge -> Grsync".
Unter "Advanced options" finden sich weitere Einstellungen. Teilweise erscheinen Erläuterungen zu den Optionen, wenn man den Mauszeiger darüber hält. Außerdem lassen sich individuelle Optionen eingeben, die rsync unterstützt. Im Bild zu sehen ist die Eingabe --exclude=.* die den Effekt hat, dass alle Konfigurationsdateien ausgeschlossen werden. Das mag beispielsweise bei einer Neuinstallation sinnvoll sein.
Rsync
- Wikipedia
Dateien abgleichen mit rsync
- Artikel aus LinuxUser 04/2006
Skripte/Backup mit rsync - fertiges Skript für die Datensicherung
Diese Revision wurde am 7. Februar 2010 um 17:23 Uhr
von the king4 erstellt.
Dieser Seite wurden folgende Begriffe zugeordnet:
Sicherheit, Shell
2004 – 2010 ubuntuusers.de • Einige Rechte vorbehalten