Rsync: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
K Textersetzung - „== Syntax ==“ durch „== Aufruf ==“ |
||
(40 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
Synchronisation von Verzeichnisbäumen | '''rsync''' - '''r'''emote '''sync''' - dient der unidirektionalen Synchronisation von Verzeichnisbäumen | ||
= | = Beschreibung = | ||
* unidirektional | * unidirektional | ||
* Delta-Transfer-Algorithmus | * Delta-Transfer-Algorithmus | ||
Zeile 8: | Zeile 8: | ||
** Größe und Änderungszeit von Dateien in Quelle und Ziel werden verglichen | ** Größe und Änderungszeit von Dateien in Quelle und Ziel werden verglichen | ||
* Daten können mit SSH verschlüsselt übertragen werden | * Daten können mit SSH verschlüsselt übertragen werden | ||
* Verzeichnisse können auf unterschiedlichen Rechnern liegen. | |||
* wird häufig für die Erstellung von Backups verwendet | |||
= | = Installation = | ||
rsync | # '''apt install rsync''' | ||
= | = Syntax = | ||
$ '''rsync [Optionen] Quelle(n) Ziel''' | |||
== Parameter == | |||
$ rsync -a /home/user'''/''' /data/backup | |||
* | * Erzeugt Verzeichnis /user in /data/backup, also wird in /data/backup/user geschrieben. | ||
* | * Daten aus /home/user/ werden in das Verzeichnis /data/backup geschrieben. | ||
* | * Ohne Slash beim Quellverzeichnis wird im angegebenen Zielverzeichnis zusätzliches Unterverzeichnis erstellt. | ||
== | == Optionen == | ||
{| class="wikitable sortable" | |||
|- | |||
! Option !! !! Beschreibung | |||
|- | |||
| -a || --archive || gleiche Bedeutung wie -rlptgoD | |||
|- | |||
| -r || --recursive || Unterverzeichnisse kopieren | |||
|- | |||
| -l || --links || symbolische Links kopieren | |||
|- | |||
| -p || --perms || Rechte der Quelldatei beibehalten | |||
|- | |||
| -t || --times || Zeiten der Quelldatei beibehalten | |||
|- | |||
| -g || --group || Gruppenrechte der Quelldatei beibehalten | |||
|- | |||
| -o || --owner || Besitzrechte der Quelldatei beibehalten (nur root) | |||
|- | |||
| -D || --devices --specials || Gerätedateien der Quelldatei beibehalten (nur root) | |||
|- | |||
| -v || --verbose || zeigt während der Ausführung an, welche Dateien synchronisiert werden | |||
|- | |||
| || --delete || entfernt Dateien im Zielverzeichnis, die im Quellverzeichnis nicht mehr vorhanden sind | |||
|- | |||
| -n || --dry-run || führt zu einem 'Probelauf' - ohne etwas zu kopieren | |||
|- | |||
| -e || || | |||
|- | |||
|} | |||
= Konfiguration = | |||
= Anwendung = | |||
== Option -a == | |||
Aquivalent zu '''-rlptgoD''' und 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) | |||
=Links= | $ '''rsync -a /home/user /data/backup''' | ||
=== Verzeichnisse Synchronisieren (rsync) === | |||
'''rsync''' ist ein Programm, um Dateien zwischen lokalen oder über das Netzwerk erreichbaren Pfaden abzugleichen. Dabei werden zunächst die Größe und die Erstellungszeit der Dateien in Quelle und Ziel verglichen, so dass nur die Dateien behandelt werden müssen, bei denen es Änderungen gegeben hat. Sind Quelle und Ziel lokale Pfade, werden die betroffenen Dateien normal kopiert. Wenn auf Quelle oder Ziel aber per SSH oder über einen speziellen rsync-daemon zugegriffen wird, nutzt rsync zusätzlichen noch einen speziellen Delta-Transfer-Algorithmus, so dass nur die geänderten Teile der Dateien über das Netzwerk transportiert werden müssen. | |||
Aufgrund dieser Eigenschaften ist rsync sehr gut geeignet, um Sicherungen durchzuführen. Für regelmäßige automatisierte Sicherungen eignen sich Programme wie rsnapshot oder Back In Time, die ihrerseits wieder rsync verwenden. Wenn man allerdings Verzeichnisse zwischen zwei Systemen wie Laptop und Desktop-Rechner synchronisieren möchte, sind Programme wie Unison besser geeignet. | |||
==== Anwendung ==== | |||
Die Syntax des Befehls im Terminal sieht folgendermaßen aus: | |||
rsync [OPTIONEN] QUELLE ZIEL | |||
Anstelle des Platzhalters <tt>QUELLE</tt> gibt man den Ort an aus dem gelesen werden soll und das <tt>ZIEL</tt> 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. | |||
===== Optionen ===== | |||
Es ist empfehlenswert, die Option <tt>-a</tt> immer zu benutzen, um alle Rechte und Eigentümer der Quelldatei auf dem Zielmedium zu übernehmen: | |||
<tt>-a</tt> fasst folgende Optionen zusammen: | |||
<div ><tt>-r</tt> kopiert Unterverzeichnisse </div> | |||
<div ><tt>-l</tt> kopiert symbolische Links </div> | |||
<div ><tt>-p</tt> behält Rechte der Quelldatei bei </div> | |||
<div ><tt>-t</tt> behält Zeiten der Quelldatei bei, </div> | |||
<div ><tt>-g</tt> behält Gruppenrechte der Quelldatei bei </div> | |||
<div ><tt>-o</tt> behält Besitzrechte der Quelldatei bei (nur root) </div> | |||
<div ><tt>-D</tt> behält Gerätedateien der Quelldatei bei (nur root) </div> | |||
{| class="wikitable" \n|- | |||
| colspan="2" | '''Weitere Optionen ''' | |||
|- | |||
| | '''Option ''' | |||
| | '''Wirkung ''' | |||
|- | |||
| | <tt>'''-u '''</tt> | |||
| | überspringt Dateien, die im Ziel neuer sind als in der Quelle | |||
|- | |||
| | <tt>'''-v '''</tt> | |||
| | zeigt während des Synchronisierens alle ausgeführten Schritte an | |||
|- | |||
| | <tt>'''-x '''</tt> | |||
| | berücksichtigt nur Objekte, die sich im gleichen Dateisystem befinden | |||
|- | |||
| | <tt>'''-P '''</tt> | |||
| | aktiviert folgende Optionen: <tt>--progress</tt> Fortschrittsanzeige beim Transfer anzeigen <tt>--partial</tt> Fortsetzung des Transfers bei Abbruch | |||
|- | |||
| | <tt>'''-n '''</tt> | |||
| | simuliert nur was passieren würde ("dry run") | |||
|- | |||
| | <tt>'''--bwlimit '''</tt> | |||
| | z. B. <tt>--bwlimit=30</tt> limitiert die Bandbreite, die genutzt werden soll (Hilfreich, da rsync sonst die komplett verfügbare Bandbreite in Anspruch nimmt und sonstige Anwendungen damit blockiert) | |||
|- | |||
| | <tt>'''-z '''</tt> | |||
| | aktiviert die Komprimierung für die Datenübertragung (diese Option ist sinnvoll, wenn zwischen Quelle und Ziel eine langsame Verbindung besteht) | |||
|- | |||
| | <tt>'''-e '''</tt> | |||
| | damit lässt sich die remote shell auswählen, die meisten werden SSH nutzen also <tt>-e ssh</tt> | |||
|- | |||
| | <tt>'''--exclude=Muster '''</tt> | |||
| | schließt ein bestimmtes Muster von der Sicherung aus | |||
|- | |||
| | <tt>'''--exclude=ORDNER1 --exclude=ORDNER2 '''</tt> | |||
| | schließt ORDNER1 und ORDNER2 von der Sicherung aus (bezieht sich immer auf <tt>QUELLE</tt> und deren Unterordner!) | |||
|- | |||
| | <tt>'''--delete '''</tt> | |||
| | vergleicht Quellverzeichnisse und Zielverzeichnisse und sorgt dafür, dass Dateien, die im Quellverzeichnis nicht (mehr) vorhanden sind, im Zielverzeichnis gelöscht werden. Dies kann dazu führen, das man ungewollt Dateien löscht, die man aber noch in der Sicherung behalten möchte. | |||
|- | |||
| | <tt>'''-b '''</tt> | |||
| | sorgt dafür, dass durch die Option <tt>--delete</tt> gelöschte sowie alle veränderten Objekte gesichert werden (siehe dazu folgende Option <tt>--backup-dir=</tt>) | |||
|- | |||
| | <tt>'''--backup-dir=Verzeichnis '''</tt> | |||
| | kann man ein Verzeichnis für die gelöschten Objekte angeben, siehe Option <tt>-b</tt> | |||
|- | |||
| | <tt>'''-c '''</tt> | |||
| | 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. | |||
|- | |||
| | <tt>'''--iconv '''</tt> | |||
| | 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. | |||
|- | |||
| | <tt>'''--stats '''</tt> | |||
| | zeigt einen ausführlicheren Report am Ende einer Übertragung an. | |||
|- | |||
| | <tt>'''--size-only '''</tt> | |||
| | sorgt dafür, dass Dateien mit gleicher Dateigröße übersprungen werden, unabhängig davon, ob sie sich in anderen Eigenschaften unterscheiden. Hilfreich bei Sicherungen auf Datenträger mit den Dateisystemen FAT oder NTFS, welche die unter Linux für die Verwaltung der Besitz- und Zugriffsrechte verwendete UNIX-FACL nicht unterstützen (weitere Einschränkungen). | |||
|- | |||
|} | |||
====== Experten-Info ====== | |||
Für weitere Optionen und ausführlichere Erklärungen die Manpage oder Hilfe mit <tt>rsync -h</tt> aufrufen. | |||
====== Wichtige Hinweise ====== | |||
====== Achtung ====== | |||
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. <tt>scp</tt> zu kopieren oder man gibt sich durch das vorangestellte <tt>sudo</tt> Root-Rechte. | |||
# 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 <tt>--delete</tt> wirklich delete! Sind in dem Zielverzeichnis andere Daten, werden sie ins Backup-Verzeichnis geschoben oder auch gelöscht! | |||
==== Beispiele ==== | |||
===== Aufruf ===== | |||
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 | |||
angewandt 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 | |||
===== Sicherung innerhalb des Systems ===== | |||
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 bewerkstelligen mit: | |||
# rsync -av --progress --delete /home /media/Backup/ | |||
===== Sicherung von lokalem Rechner auf entfernten Rechner ===== | |||
In diesem Beispiel soll ein lokales Homeverzeichnis ('''/home/benutzer''') auf einen zweiten Rechner mit dem Namen <tt>example.com</tt> gesichert werden, zu dem man per SSH Zugang hat. | |||
Dazu benötigt man die Option <tt>-a</tt>, damit alle Rechte erhalten bleiben. <tt>-v</tt> ist immer gut, damit man sieht, was passiert. Der Parameter <tt>-z</tt> verringert die Datenmenge, die übertragen werden muss, und <tt>-e</tt> wird benötigt, um ssh anzugeben. Also sieht der Befehl so aus: | |||
$ rsync -avze ssh /home/benutzer benutzer@example.com:/backups | |||
Dies würde eine Kopie von '''/home/benutzer''' vom lokalen Rechner zum entfernten Rechner ins Verzeichnis '''/backups''' kopieren. | |||
====== SSH-Port angeben ====== | |||
$ rsync -avz -e "ssh -p PORTNUMMER" user@remoteip:/path/to/files/ /local/path/ | |||
===== Sicherung von entferntem Rechner auf lokalen Rechner ===== | |||
In diesem Beispiel soll das Verzeichnis '''/var/www''' vom Rechner <tt>example.com</tt> 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 <tt>--delete</tt> für das Löschen und <tt>-b</tt> für Backups gelöschter und veränderter Dateien. Diese Backups befinden sich in dem mit <tt>--backup-dir</tt> angegebenen Verzeichnis. | |||
Der Befehl sieht dann so aus: | |||
$ rsync --delete -avzbe ssh benutzer@example.com:/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@example.com:/var/www /home/benutzer/webserver --backup-dir=~/old | |||
Der Pfad zu dem Private-Key File muss dabei absolut sein. Dann den ganzen Befehl mit Cron zeitgesteuert automatisieren und die Angst vor einer defekten Festplatte oder versehentlich gelöschten Daten ist vorbei. | |||
====== Abgleich von Dateien zwischen Rechnern mit unterschiedlichen Zeichensätzen ====== | |||
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 <tt>--iconv</tt> (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@example.com:/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. | |||
===== Verzeichnisse von der Sicherung ausschließen ===== | |||
Mit dem Parameter <tt>--exclude</tt> 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. Das per exclude bezeichnete Verzeichniss ist also kein absoluter Pfad, sonder relativ zum rsync Verzeichniss <Quelle> zu sehen - hier in diesem Beispiel also /home/user/daten/ . | |||
Taucht der auszuschließende Ordner '''temp''' noch an weiteren Punkten der Quellhierarchie auf, so werden diese ebenfalls von der Sicherung ausgeschlossen. | |||
Möchte man außerdem "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. | |||
Mehrere auszuschließende Ordner kann man auch in eine Datei speichern und dann im rsync Aufruf per <tt>--exclude-from=FILE</tt> übergeben. Dazu ein praktisches Beispiel wie ein exclude FILE aussehen kann: | |||
- Downloads | |||
- Ubuntu One | |||
+ .config | |||
+ .gconf | |||
+ .gnome2 | |||
+ .local | |||
- .* | |||
Angenommen, man möchte das ganze Home Verzeichnis sichern, jedoch einige Verzeichnisse ausschliessen und andere einschliessen, dann führt die o.a. Datei zu folgendem Ergebnis: * die Verzeichnisse 'Downloads', 'Ubuntu One' und alle versteckten Verzeichnisse '.*' werden nicht gesichert | |||
* von den versteckten Verzeichnissen sollen aber dennoch '.config', '.gconf', '.gnome2' und '.local' gesichert werden | |||
Achtung: die Reihenfolge der Einträge in der Datei ist wichtig. | |||
==== Grafische Benutzeroberflächen ==== | |||
[[Image:Grafik2.png|top|alt="./grsync1.png"]] | |||
===== Grsync ===== | |||
Zum bequemeren Sichern kann man unter GNOME, Xfce und LXDE eine grafische Benutzeroberfläche installieren: | |||
# apt-get install grsync | |||
Anschließend findet man bei Ubuntu-Varianten mit einem Anwendungsmenü einen Programmstarter unter ''"Systemwerkzeuge -> Grsync"''. | |||
[[Image:Grafik4.png|top|alt="./grsync2.png"]] | |||
Unter ''"Advanced options"'' finden sich weitere Einstellungen. Teilweise erscheinen Erläuterungen (Tooltips) 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 <tt>--exclude=.*</tt>, die den Effekt hat, dass alle Konfigurationsdateien ausgeschlossen werden. Das mag beispielsweise bei einer Neuinstallation sinnvoll sein. | |||
===== Unison ===== | |||
Unison ist ein komfortables Programm, welches das Protokoll von '''rsync''' nutzt. Es bietet eine grafische Oberfläche und erlaubt den Abgleich von Verzeichnissen in beide Richtungen, siehe Unison | |||
==== rsync als Daemon ==== | |||
Rsync kann auch als Dienst (Daemon) betrieben werden, der dann auf Port <tt>873</tt> auf eingehende Verbindungen lauscht. Das Gespann aus rsync-Client und rsync-Daemon ist effektiver, als den entfernten Server per SAMBA oder NFS einzubinden und auf diesen Freigaben gemountete Verzeichnisse mit rsync "lokal" zu arbeiten. Um rsync in diesem Modus zu betreiben, wird eine Datei '''/etc/rsyncd.conf''' benötigt. Beispiel: | |||
use chroot = true | |||
hosts allow = 192.168.0.0/24 | |||
transfer logging = true | |||
log file = /var/log/rsyncd.log | |||
log format = %h %o %f %l %b | |||
[Freigabename] | |||
comment = Public Share | |||
path = /home/share | |||
read only = no | |||
list = yes | |||
uid = nobody | |||
gid = nogroup | |||
Da ein privilegierter Port (< <tt>1025</tt>) genutzt wird, muss der Aufruf des rsync-Daemons als root erfolgen: | |||
# rsync --config=/etc/rsyncd.conf --daemon --no-detach | |||
Testen kann man nun die Erreichbarkeit des Dienstes mit:* <tt>rsync server-ip::</tt> oder | |||
* <tt>rsync server-ip::Freigabename</tt> | |||
In der Ausgabe werden damit die rsync-Freigaben des Daemons aufgelistet. Bei Problemen kann man in das Logfile schauen. Dieses wird in der '''rsyncd.conf''' definiert, z. B. als '''/var/log/rsyncd.log'''. Nach diesem ersten Test kann der rsync-Daemon wie folgt in das System per xinetd eingebunden werden.* Zum Einbinden von rsync in xinetd wird die Datei '''/etc/default/rsync''' benötigt: | |||
RSYNC_ENABLE=inetd | |||
RSYNC_NICE='10' | |||
RSYNC_IONICE='-c3'* xinetd für rsync in '''/etc/xinetd.d/rsync''' konfigurieren | |||
service rsync | |||
{ | |||
disable = no | |||
socket_type = stream | |||
wait = no | |||
user = root | |||
server = /usr/bin/rsync | |||
server_args = --daemon | |||
log_on_failure += USERID | |||
flags = IPv6 | |||
} | |||
* xinetd starten: | |||
sudo service xinetd restart Diese Beispielkonfiguration ist komplett ohne User Authentifizierung, d.h. jeder im angegebenen Netzwerk hat Zugriff. Zu beachten ist, dass die Verbindung zu einem rsync-Dameon eine andere Syntax hat. Auszug aus der Manpage, normaler Aufruf: | |||
$ rsync [OPTION...] [USER@]HOST:SRC... [DEST] | |||
und so zu einem rsync-Daemon: | |||
$ rsync [OPTION...] [USER@]HOST::SRC... [DEST] | |||
$ rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST] | |||
Die beiden "::" machen hier den Unterschied! Besser zu merken ist sicherlich das vorangestellte Netzwerkprotokoll "<tt>rsync://</tt>". | |||
==== Links ==== | |||
* [http://rsync.samba.org/ Projektseite] [[Image:Grafik5.png|top|alt="{en}"]] | |||
* [http://de.wikipedia.org/wiki/Rsync Rsync] | |||
* [http://www.opbyte.it/grsync/ Grsync] [[Image:Grafik6.png|top|alt="{en}"]]- grafische Oberfläche | |||
* [http://www.linux-user.de/ausgabe/2006/04/090-rsync/ Dateien abgleichen mit rsync] [[Image:Grafik7.png|top|alt="{de}"]]- Artikel aus LinuxUser 04/2006 | |||
* [http://wiki.ubuntuusers.de/Skripte/Backup_mit_RSYNC Skripte/Backup mit rsync] - fertiges Skript für die Datensicherung | |||
'''rsync''' ist ein Programm, um Dateien zwischen lokalen oder über das Netzwerk erreichbaren Pfaden abzugleichen. Dabei werden zunächst die Größe und die Erstellungszeit der Dateien in Quelle und Ziel verglichen, so dass nur die Dateien behandelt werden müssen, bei denen es Änderungen gegeben hat. Sind Quelle und Ziel lokale Pfade, werden die betroffenen Dateien normal kopiert. Wenn auf Quelle oder Ziel aber per SSH oder über einen speziellen rsync-daemon zugegriffen wird, nutzt rsync zusätzlichen noch einen speziellen Delta-Transfer-Algorithmus, so dass nur die geänderten Teile der Dateien über das Netzwerk transportiert werden müssen. | |||
Aufgrund dieser Eigenschaften ist rsync sehr gut geeignet, um Sicherungen durchzuführen. Für regelmäßige automatisierte Sicherungen eignen sich Programme wie rsnapshot oder Back In Time, die ihrerseits wieder rsync verwenden. Wenn man allerdings Verzeichnisse zwischen zwei Systemen wie Laptop und Desktop-Rechner synchronisieren möchte, sind Programme wie Unison besser geeignet. | |||
==== Anwendung ==== | |||
Die Syntax des Befehls im Terminal 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. | |||
===== Optionen ===== | |||
Es ist empfehlenswert, die Option -a immer zu benutzen, um alle Rechte und Eigentümer der Quelldatei auf dem Zielmedium zu übernehmen: | |||
-a fasst folgende Optionen zusammen: | |||
<div >-r kopiert Unterverzeichnisse </div> | |||
<div >-l kopiert symbolische Links </div> | |||
<div >-p behält Rechte der Quelldatei bei </div> | |||
<div >-t behält Zeiten der Quelldatei bei, </div> | |||
<div >-g behält Gruppenrechte der Quelldatei bei </div> | |||
<div >-o behält Besitzrechte der Quelldatei bei (nur root) </div> | |||
<div >-D behält Gerätedateien der Quelldatei bei (nur root) </div> | |||
{|class="wikitable sortable" | |||
|- | |||
| colspan="2" | '''Weitere Optionen ''' | |||
|- | |||
| | '''Option ''' | |||
| | '''Wirkung ''' | |||
|- | |||
| | '''-u ''' | |||
| | überspringt Dateien, die im Ziel neuer sind als in der Quelle | |||
|- | |||
| | '''-v ''' | |||
| | zeigt während des Synchronisierens alle ausgeführten Schritte an | |||
|- | |||
| | '''-x ''' | |||
| | berücksichtigt nur Objekte, die sich im gleichen Dateisystem befinden | |||
|- | |||
| | '''-P ''' | |||
| | aktiviert folgende Optionen: --progress Fortschrittsanzeige beim Transfer anzeigen --partial Fortsetzung des Transfers bei Abbruch | |||
|- | |||
| | '''-n ''' | |||
| | simuliert nur was passieren würde ("dry run") | |||
|- | |||
| | '''--bwlimit ''' | |||
| | zum Beispiel | |||
--bwlimit=30 limitiert die Bandbreite, die genutzt werden soll (Hilfreich, da rsync sonst die komplett verfügbare Bandbreite in Anspruch nimmt und sonstige Anwendungen damit blockiert) | |||
|- | |||
| | '''-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 der Sicherung aus (bezieht sich immer auf QUELLE und deren Unterordner!) | |||
|- | |||
| | '''--delete ''' | |||
| | vergleicht Quellverzeichnisse und Zielverzeichnisse und sorgt dafür, dass Dateien, die im Quellverzeichnis nicht (mehr) vorhanden sind, im Zielverzeichnis gelöscht werden. Dies kann dazu führen, das man ungewollt Dateien löscht, die man aber noch in der Sicherung behalten möchte. | |||
|- | |||
| | '''-b ''' | |||
| | sorgt dafür, dass durch die Option --delete gelöschte sowie alle veränderten Objekte gesichert werden (siehe dazu folgende Option --backup-dir=) | |||
|- | |||
| | '''--backup-dir=Verzeichnis ''' | |||
| | kann man ein Verzeichnis für die gelöschten Objekte angeben, siehe Option -b | |||
|- | |||
| | '''-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 zum Beispiel | |||
Umlauten im Namen übertragen werden. | |||
|- | |||
| | '''--stats ''' | |||
| | zeigt einen ausführlicheren Report am Ende einer Übertragung an. | |||
|- | |||
| | '''--size-only ''' | |||
| | sorgt dafür, dass Dateien mit gleicher Dateigröße übersprungen werden, unabhängig davon, ob sie sich in anderen Eigenschaften unterscheiden. Hilfreich bei Sicherungen auf Datenträger mit den Dateisystemen FAT oder NTFS, welche die unter Linux für die Verwaltung der Besitz- und Zugriffsrechte verwendete UNIX-FACL nicht unterstützen (weitere Einschränkungen). | |||
|- | |||
|} | |||
====== Experten-Info ====== | |||
Für weitere Optionen und ausführlichere Erklärungen die Manpage oder Hilfe mit rsync -h aufrufen. | |||
====== Wichtige Hinweise ====== | |||
====== Achtung ====== | |||
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, zum Beispiel | |||
bei | |||
rsync -a /etc ZIEL | |||
kann es zu Problemen kommen. Falls nicht alles kopiert wird, kann man versuchen, von "Hand" die Daten mit cpoder 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! | |||
==== Beispiele ==== | |||
===== Aufruf ===== | |||
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 | |||
angewandt 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 | |||
===== Sicherung innerhalb des Systems ===== | |||
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 bewerkstelligen mit: | |||
sudo rsync -av --progress --delete /home /media/Backup/ | |||
===== Sicherung von lokalem Rechner auf entfernten Rechner ===== | |||
In diesem Beispiel soll ein lokales Homeverzeichnis ('''/home/benutzer''') auf einen zweiten Rechner mit dem Namen example.com 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@example.com:/backups | |||
Dies würde eine Kopie von '''/home/benutzer''' vom lokalen Rechner zum entfernten Rechner ins Verzeichnis '''/backups''' kopieren. | |||
====== SSH-Port angeben ====== | |||
rsync -avz -e "ssh -p PORTNUMMER" user@remoteip:/path/to/files/ /local/path/ | |||
===== Sicherung von entferntem Rechner auf lokalen Rechner ===== | |||
In diesem Beispiel soll das Verzeichnis '''/var/www''' vom Rechner example.com 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@example.com:/var/www /home/benutzer/webserver --backup-dir=~/old | |||
Sollen dem SSH-Befehl weitere Optionen angehängt werden, zum Beispiel | |||
-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@example.com:/var/www /home/benutzer/webserver --backup-dir=~/old | |||
Der Pfad zu dem Private-Key File muss dabei absolut sein. Dann den ganzen Befehl mit Cron zeitgesteuert automatisieren und die Angst vor einer defekten Festplatte oder versehentlich gelöschten Daten ist vorbei. | |||
====== Abgleich von Dateien zwischen Rechnern mit unterschiedlichen Zeichensätzen ====== | |||
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@example.com:/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. | |||
===== Verzeichnisse von der Sicherung ausschließen ===== | |||
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. Das per exclude bezeichnete Verzeichniss ist also kein absoluter Pfad, sonder relativ zum rsync Verzeichniss <Quelle> zu sehen - hier in diesem Beispiel also /home/user/daten/ . | |||
Taucht der auszuschließende Ordner '''temp''' noch an weiteren Punkten der Quellhierarchie auf, so werden diese ebenfalls von der Sicherung ausgeschlossen. | |||
Möchte man außerdem "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. | |||
Mehrere auszuschließende Ordner kann man auch in eine Datei speichern und dann im rsync Aufruf per --exclude-from=FILE übergeben. Dazu ein praktisches Beispiel wie ein exclude FILE aussehen kann: | |||
- Downloads | |||
- Ubuntu One | |||
+ .config | |||
+ .gconf | |||
+ .gnome2 | |||
+ .local | |||
- .* | |||
Angenommen, man möchte das ganze Home Verzeichnis sichern, jedoch einige Verzeichnisse ausschliessen und andere einschliessen, dann führt die o.a. Datei zu folgendem Ergebnis: * die Verzeichnisse 'Downloads', 'Ubuntu One' und alle versteckten Verzeichnisse '.*' werden nicht gesichert | |||
* von den versteckten Verzeichnissen sollen aber dennoch '.config', '.gconf', '.gnome2' und '.local' gesichert werden | |||
Achtung: die Reihenfolge der Einträge in der Datei ist wichtig. | |||
==== Grafische Benutzeroberflächen ==== | |||
===== Grsync ===== | |||
Zum bequemeren Sichern kann man unter GNOME, Xfce und LXDE eine grafische Benutzeroberfläche installieren: | |||
sudo apt-get install grsync | |||
Anschließend findet man bei Ubuntu-Varianten mit einem Anwendungsmenü einen Programmstarter unter ''"Systemwerkzeuge -> Grsync"''. | |||
Unter ''"Advanced options"'' finden sich weitere Einstellungen. Teilweise erscheinen Erläuterungen (Tooltips) 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. | |||
===== Unison ===== | |||
Unison ist ein komfortables Programm, welches das Protokoll von '''rsync''' nutzt. Es bietet eine grafische Oberfläche und erlaubt den Abgleich von Verzeichnissen in beide Richtungen, siehe Unison | |||
==== rsync als Daemon ==== | |||
Rsync kann auch als Dienst (Daemon) betrieben werden, der dann auf Port 873 auf eingehende Verbindungen lauscht. Das Gespann aus rsync-Client und rsync-Daemon ist effektiver, als den entfernten Server per SAMBA oder NFS einzubinden und auf diesen Freigaben gemountete Verzeichnisse mit rsync "lokal" zu arbeiten. Um rsync in diesem Modus zu betreiben, wird eine Datei '''/etc/rsyncd.conf''' benötigt. Beispiel: | |||
use chroot = true | |||
hosts allow = 192.168.0.0/24 | |||
transfer logging = true | |||
log file = /var/log/rsyncd.log | |||
log format = %h %o %f %l %b | |||
[Freigabename] | |||
comment = Public Share | |||
path = /home/share | |||
read only = no | |||
list = yes | |||
uid = nobody | |||
gid = nogroup | |||
Da ein privilegierter Port (< 1025) genutzt wird, muss der Aufruf des rsync-Daemons als root erfolgen: | |||
sudo rsync --config=/etc/rsyncd.conf --daemon --no-detach | |||
Testen kann man nun die Erreichbarkeit des Dienstes mit:* rsync server-ip:: oder | |||
* rsync server-ip::Freigabename | |||
In der Ausgabe werden damit die rsync-Freigaben des Daemons aufgelistet. Bei Problemen kann man in das Logfile schauen. Dieses wird in der '''rsyncd.conf''' definiert, zum Beispiel | |||
als '''/var/log/rsyncd.log'''. Nach diesem ersten Test kann der rsync-Daemon wie folgt in das System per xinetd eingebunden werden.* Zum Einbinden von rsync in xinetd wird die Datei '''/etc/default/rsync''' benötigt: | |||
RSYNC_ENABLE=inetd | |||
RSYNC_NICE='10' | |||
RSYNC_IONICE='-c3'* xinetd für rsync in '''/etc/xinetd.d/rsync''' konfigurieren | |||
service rsync | |||
{ | |||
disable = no | |||
socket_type = stream | |||
wait = no | |||
user = root | |||
server = /usr/bin/rsync | |||
server_args = --daemon | |||
log_on_failure += USERID | |||
flags = IPv6 | |||
}* xinetd starten: | |||
sudo service xinetd restart Diese Beispielkonfiguration ist komplett ohne User Authentifizierung, das heißt jeder im angegebenen Netzwerk hat Zugriff. Zu beachten ist, dass die Verbindung zu einem rsync-Dameon eine andere Syntax hat. Auszug aus der Manpage, normaler Aufruf: | |||
rsync [OPTION...] [USER@]HOST:SRC... [DEST] | |||
und so zu einem rsync-Daemon: | |||
rsync [OPTION...] [USER@]HOST::SRC... [DEST] | |||
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST] | |||
Die beiden "::" machen hier den Unterschied! Besser zu merken ist sicherlich das vorangestellte Netzwerkprotokoll "rsync://". | |||
==== Links ==== | |||
* [http://rsync.samba.org/ Projektseite] | |||
* [http://de.wikipedia.org/wiki/Rsync Rsync] | |||
* [http://www.opbyte.it/grsync/ Grsync]- grafische Oberfläche | |||
* [http://www.linux-user.de/ausgabe/2006/04/090-rsync/ Dateien abgleichen mit rsync]- Artikel aus LinuxUser 04/2006 | |||
* [http://wiki.ubuntuusers.de/Skripte/Backup_mit_RSYNC Skripte/Backup mit rsync] - fertiges Skript für die Datensicherung | |||
= Links = | |||
== Dateien == | |||
== Man-Page == | |||
# man rsync | # man rsync | ||
# | == Intern == | ||
# | |||
# | == Weblinks == | ||
# https://de.wikipedia.org/wiki/Rsync | |||
# https://www.thomas-krenn.com/de/wiki/Daten_mit_rsync_unter_Linux_synchronisieren?xtxsearchselecthit=1 | |||
# https://wiki.ubuntuusers.de/rsync/ | |||
=Kontrollfragen= | |||
<div class="toccolours mw-collapsible mw-collapsed"> | |||
''Testfrage 1'' | |||
<div class="mw-collapsible-content">'''Antwort1'''</div> | |||
</div> | |||
<div class="toccolours mw-collapsible mw-collapsed"> | |||
''Testfrage 2'' | |||
<div class="mw-collapsible-content">'''Antwort2'''</div> | |||
</div> | |||
<div class="toccolours mw-collapsible mw-collapsed"> | |||
''Testfrage 3'' | |||
<div class="mw-collapsible-content">'''Antwort3'''</div> | |||
</div> | |||
<div class="toccolours mw-collapsible mw-collapsed"> | |||
''Testfrage 4'' | |||
<div class="mw-collapsible-content">'''Antwort4'''</div> | |||
</div> | |||
<div class="toccolours mw-collapsible mw-collapsed"> | |||
''Testfrage 5'' | |||
<div class="mw-collapsible-content">'''Antwort5'''</div> | |||
</div> | |||
[[ | [[Kategorie:Linux/Befehl]] | ||
[[ | [[Kategorie:Linux/Backup]] | ||
[[Kategorie:Linux/Datei/Verwaltung]] | |||
[[Kategorie:Netzwerk/Befehl]] |
Aktuelle Version vom 12. November 2024, 18:48 Uhr
rsync - remote sync - dient der unidirektionalen Synchronisation von Verzeichnisbäumen
Beschreibung
- unidirektional
- Delta-Transfer-Algorithmus
- Nur geänderte Teile einer Datei werden übertragen
- Quick-Check-Algorithmus
- Größe und Änderungszeit von Dateien in Quelle und Ziel werden verglichen
- Daten können mit SSH verschlüsselt übertragen werden
- Verzeichnisse können auf unterschiedlichen Rechnern liegen.
- wird häufig für die Erstellung von Backups verwendet
Installation
# apt install rsync
Syntax
$ rsync [Optionen] Quelle(n) Ziel
Parameter
$ rsync -a /home/user/ /data/backup
- Erzeugt Verzeichnis /user in /data/backup, also wird in /data/backup/user geschrieben.
- Daten aus /home/user/ werden in das Verzeichnis /data/backup geschrieben.
- Ohne Slash beim Quellverzeichnis wird im angegebenen Zielverzeichnis zusätzliches Unterverzeichnis erstellt.
Optionen
Option | Beschreibung | |
---|---|---|
-a | --archive | gleiche Bedeutung wie -rlptgoD |
-r | --recursive | Unterverzeichnisse kopieren |
-l | --links | symbolische Links kopieren |
-p | --perms | Rechte der Quelldatei beibehalten |
-t | --times | Zeiten der Quelldatei beibehalten |
-g | --group | Gruppenrechte der Quelldatei beibehalten |
-o | --owner | Besitzrechte der Quelldatei beibehalten (nur root) |
-D | --devices --specials | Gerätedateien der Quelldatei beibehalten (nur root) |
-v | --verbose | zeigt während der Ausführung an, welche Dateien synchronisiert werden |
--delete | entfernt Dateien im Zielverzeichnis, die im Quellverzeichnis nicht mehr vorhanden sind | |
-n | --dry-run | führt zu einem 'Probelauf' - ohne etwas zu kopieren |
-e |
Konfiguration
Anwendung
Option -a
Aquivalent zu -rlptgoD und 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)
$ rsync -a /home/user /data/backup
Verzeichnisse Synchronisieren (rsync)
rsync ist ein Programm, um Dateien zwischen lokalen oder über das Netzwerk erreichbaren Pfaden abzugleichen. Dabei werden zunächst die Größe und die Erstellungszeit der Dateien in Quelle und Ziel verglichen, so dass nur die Dateien behandelt werden müssen, bei denen es Änderungen gegeben hat. Sind Quelle und Ziel lokale Pfade, werden die betroffenen Dateien normal kopiert. Wenn auf Quelle oder Ziel aber per SSH oder über einen speziellen rsync-daemon zugegriffen wird, nutzt rsync zusätzlichen noch einen speziellen Delta-Transfer-Algorithmus, so dass nur die geänderten Teile der Dateien über das Netzwerk transportiert werden müssen.
Aufgrund dieser Eigenschaften ist rsync sehr gut geeignet, um Sicherungen durchzuführen. Für regelmäßige automatisierte Sicherungen eignen sich Programme wie rsnapshot oder Back In Time, die ihrerseits wieder rsync verwenden. Wenn man allerdings Verzeichnisse zwischen zwei Systemen wie Laptop und Desktop-Rechner synchronisieren möchte, sind Programme wie Unison besser geeignet.
Anwendung
Die Syntax des Befehls im Terminal 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.
Optionen
Es ist empfehlenswert, die Option -a immer zu benutzen, um alle Rechte und Eigentümer der Quelldatei auf dem Zielmedium zu übernehmen:
-a fasst folgende Optionen zusammen:
Weitere Optionen | |
Option | Wirkung |
-u | überspringt Dateien, die im Ziel neuer sind als in der Quelle |
-v | zeigt während des Synchronisierens alle ausgeführten Schritte an |
-x | berücksichtigt nur Objekte, die sich im gleichen Dateisystem befinden |
-P | aktiviert folgende Optionen: --progress Fortschrittsanzeige beim Transfer anzeigen --partial Fortsetzung des Transfers bei Abbruch |
-n | simuliert nur was passieren würde ("dry run") |
--bwlimit | z. B. --bwlimit=30 limitiert die Bandbreite, die genutzt werden soll (Hilfreich, da rsync sonst die komplett verfügbare Bandbreite in Anspruch nimmt und sonstige Anwendungen damit blockiert) |
-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 der Sicherung aus (bezieht sich immer auf QUELLE und deren Unterordner!) |
--delete | vergleicht Quellverzeichnisse und Zielverzeichnisse und sorgt dafür, dass Dateien, die im Quellverzeichnis nicht (mehr) vorhanden sind, im Zielverzeichnis gelöscht werden. Dies kann dazu führen, das man ungewollt Dateien löscht, die man aber noch in der Sicherung behalten möchte. |
-b | sorgt dafür, dass durch die Option --delete gelöschte sowie alle veränderten Objekte gesichert werden (siehe dazu folgende Option --backup-dir=) |
--backup-dir=Verzeichnis | kann man ein Verzeichnis für die gelöschten Objekte angeben, siehe Option -b |
-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. |
--size-only | sorgt dafür, dass Dateien mit gleicher Dateigröße übersprungen werden, unabhängig davon, ob sie sich in anderen Eigenschaften unterscheiden. Hilfreich bei Sicherungen auf Datenträger mit den Dateisystemen FAT oder NTFS, welche die unter Linux für die Verwaltung der Besitz- und Zugriffsrechte verwendete UNIX-FACL nicht unterstützen (weitere Einschränkungen).
|
Experten-Info
Für weitere Optionen und ausführlichere Erklärungen die Manpage oder Hilfe mit rsync -h aufrufen.
Wichtige Hinweise
Achtung
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.
# 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!
Beispiele
Aufruf
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
angewandt 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
Sicherung innerhalb des Systems
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 bewerkstelligen mit:
- rsync -av --progress --delete /home /media/Backup/
Sicherung von lokalem Rechner auf entfernten Rechner
In diesem Beispiel soll ein lokales Homeverzeichnis (/home/benutzer) auf einen zweiten Rechner mit dem Namen example.com 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@example.com:/backups
Dies würde eine Kopie von /home/benutzer vom lokalen Rechner zum entfernten Rechner ins Verzeichnis /backups kopieren.
SSH-Port angeben
$ rsync -avz -e "ssh -p PORTNUMMER" user@remoteip:/path/to/files/ /local/path/
Sicherung von entferntem Rechner auf lokalen Rechner
In diesem Beispiel soll das Verzeichnis /var/www vom Rechner example.com 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@example.com:/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@example.com:/var/www /home/benutzer/webserver --backup-dir=~/old
Der Pfad zu dem Private-Key File muss dabei absolut sein. Dann den ganzen Befehl mit Cron zeitgesteuert automatisieren und die Angst vor einer defekten Festplatte oder versehentlich gelöschten Daten ist vorbei.
Abgleich von Dateien zwischen Rechnern mit unterschiedlichen Zeichensätzen
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@example.com:/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.
Verzeichnisse von der Sicherung ausschließen
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. Das per exclude bezeichnete Verzeichniss ist also kein absoluter Pfad, sonder relativ zum rsync Verzeichniss <Quelle> zu sehen - hier in diesem Beispiel also /home/user/daten/ .
Taucht der auszuschließende Ordner temp noch an weiteren Punkten der Quellhierarchie auf, so werden diese ebenfalls von der Sicherung ausgeschlossen.
Möchte man außerdem "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.
Mehrere auszuschließende Ordner kann man auch in eine Datei speichern und dann im rsync Aufruf per --exclude-from=FILE übergeben. Dazu ein praktisches Beispiel wie ein exclude FILE aussehen kann:
- Downloads - Ubuntu One + .config + .gconf + .gnome2 + .local - .*
Angenommen, man möchte das ganze Home Verzeichnis sichern, jedoch einige Verzeichnisse ausschliessen und andere einschliessen, dann führt die o.a. Datei zu folgendem Ergebnis: * die Verzeichnisse 'Downloads', 'Ubuntu One' und alle versteckten Verzeichnisse '.*' werden nicht gesichert
- von den versteckten Verzeichnissen sollen aber dennoch '.config', '.gconf', '.gnome2' und '.local' gesichert werden
Achtung: die Reihenfolge der Einträge in der Datei ist wichtig.
Grafische Benutzeroberflächen
Grsync
Zum bequemeren Sichern kann man unter GNOME, Xfce und LXDE eine grafische Benutzeroberfläche installieren:
# apt-get install grsync
Anschließend findet man bei Ubuntu-Varianten mit einem Anwendungsmenü einen Programmstarter unter "Systemwerkzeuge -> Grsync".
Unter "Advanced options" finden sich weitere Einstellungen. Teilweise erscheinen Erläuterungen (Tooltips) 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.
Unison
Unison ist ein komfortables Programm, welches das Protokoll von rsync nutzt. Es bietet eine grafische Oberfläche und erlaubt den Abgleich von Verzeichnissen in beide Richtungen, siehe Unison
rsync als Daemon
Rsync kann auch als Dienst (Daemon) betrieben werden, der dann auf Port 873 auf eingehende Verbindungen lauscht. Das Gespann aus rsync-Client und rsync-Daemon ist effektiver, als den entfernten Server per SAMBA oder NFS einzubinden und auf diesen Freigaben gemountete Verzeichnisse mit rsync "lokal" zu arbeiten. Um rsync in diesem Modus zu betreiben, wird eine Datei /etc/rsyncd.conf benötigt. Beispiel:
use chroot = true hosts allow = 192.168.0.0/24 transfer logging = true log file = /var/log/rsyncd.log log format = %h %o %f %l %b [Freigabename] comment = Public Share path = /home/share read only = no list = yes uid = nobody gid = nogroup
Da ein privilegierter Port (< 1025) genutzt wird, muss der Aufruf des rsync-Daemons als root erfolgen:
# rsync --config=/etc/rsyncd.conf --daemon --no-detach
Testen kann man nun die Erreichbarkeit des Dienstes mit:* rsync server-ip:: oder
- rsync server-ip::Freigabename
In der Ausgabe werden damit die rsync-Freigaben des Daemons aufgelistet. Bei Problemen kann man in das Logfile schauen. Dieses wird in der rsyncd.conf definiert, z. B. als /var/log/rsyncd.log. Nach diesem ersten Test kann der rsync-Daemon wie folgt in das System per xinetd eingebunden werden.* Zum Einbinden von rsync in xinetd wird die Datei /etc/default/rsync benötigt:
RSYNC_ENABLE=inetd RSYNC_NICE='10' RSYNC_IONICE='-c3'* xinetd für rsync in /etc/xinetd.d/rsync konfigurieren service rsync { disable = no socket_type = stream wait = no user = root server = /usr/bin/rsync server_args = --daemon log_on_failure += USERID flags = IPv6 }
- xinetd starten:
sudo service xinetd restart Diese Beispielkonfiguration ist komplett ohne User Authentifizierung, d.h. jeder im angegebenen Netzwerk hat Zugriff. Zu beachten ist, dass die Verbindung zu einem rsync-Dameon eine andere Syntax hat. Auszug aus der Manpage, normaler Aufruf: $ rsync [OPTION...] [USER@]HOST:SRC... [DEST]
und so zu einem rsync-Daemon:
$ rsync [OPTION...] [USER@]HOST::SRC... [DEST] $ rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Die beiden "::" machen hier den Unterschied! Besser zu merken ist sicherlich das vorangestellte Netzwerkprotokoll "rsync://".
Links
- Projektseite "{en}"
- Rsync
- Grsync "{en}"- grafische Oberfläche
- Dateien abgleichen mit rsync "{de}"- Artikel aus LinuxUser 04/2006
- Skripte/Backup mit rsync - fertiges Skript für die Datensicherung
rsync ist ein Programm, um Dateien zwischen lokalen oder über das Netzwerk erreichbaren Pfaden abzugleichen. Dabei werden zunächst die Größe und die Erstellungszeit der Dateien in Quelle und Ziel verglichen, so dass nur die Dateien behandelt werden müssen, bei denen es Änderungen gegeben hat. Sind Quelle und Ziel lokale Pfade, werden die betroffenen Dateien normal kopiert. Wenn auf Quelle oder Ziel aber per SSH oder über einen speziellen rsync-daemon zugegriffen wird, nutzt rsync zusätzlichen noch einen speziellen Delta-Transfer-Algorithmus, so dass nur die geänderten Teile der Dateien über das Netzwerk transportiert werden müssen.
Aufgrund dieser Eigenschaften ist rsync sehr gut geeignet, um Sicherungen durchzuführen. Für regelmäßige automatisierte Sicherungen eignen sich Programme wie rsnapshot oder Back In Time, die ihrerseits wieder rsync verwenden. Wenn man allerdings Verzeichnisse zwischen zwei Systemen wie Laptop und Desktop-Rechner synchronisieren möchte, sind Programme wie Unison besser geeignet.
Anwendung
Die Syntax des Befehls im Terminal 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.
Optionen
Es ist empfehlenswert, die Option -a immer zu benutzen, um alle Rechte und Eigentümer der Quelldatei auf dem Zielmedium zu übernehmen:
-a fasst folgende Optionen zusammen:
Weitere Optionen | |
Option | Wirkung |
-u | überspringt Dateien, die im Ziel neuer sind als in der Quelle |
-v | zeigt während des Synchronisierens alle ausgeführten Schritte an |
-x | berücksichtigt nur Objekte, die sich im gleichen Dateisystem befinden |
-P | aktiviert folgende Optionen: --progress Fortschrittsanzeige beim Transfer anzeigen --partial Fortsetzung des Transfers bei Abbruch |
-n | simuliert nur was passieren würde ("dry run") |
--bwlimit | zum Beispiel
--bwlimit=30 limitiert die Bandbreite, die genutzt werden soll (Hilfreich, da rsync sonst die komplett verfügbare Bandbreite in Anspruch nimmt und sonstige Anwendungen damit blockiert) |
-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 der Sicherung aus (bezieht sich immer auf QUELLE und deren Unterordner!) |
--delete | vergleicht Quellverzeichnisse und Zielverzeichnisse und sorgt dafür, dass Dateien, die im Quellverzeichnis nicht (mehr) vorhanden sind, im Zielverzeichnis gelöscht werden. Dies kann dazu führen, das man ungewollt Dateien löscht, die man aber noch in der Sicherung behalten möchte. |
-b | sorgt dafür, dass durch die Option --delete gelöschte sowie alle veränderten Objekte gesichert werden (siehe dazu folgende Option --backup-dir=) |
--backup-dir=Verzeichnis | kann man ein Verzeichnis für die gelöschten Objekte angeben, siehe Option -b |
-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 zum Beispiel
Umlauten im Namen übertragen werden. |
--stats | zeigt einen ausführlicheren Report am Ende einer Übertragung an. |
--size-only | sorgt dafür, dass Dateien mit gleicher Dateigröße übersprungen werden, unabhängig davon, ob sie sich in anderen Eigenschaften unterscheiden. Hilfreich bei Sicherungen auf Datenträger mit den Dateisystemen FAT oder NTFS, welche die unter Linux für die Verwaltung der Besitz- und Zugriffsrechte verwendete UNIX-FACL nicht unterstützen (weitere Einschränkungen).
|
Experten-Info
Für weitere Optionen und ausführlichere Erklärungen die Manpage oder Hilfe mit rsync -h aufrufen.
Wichtige Hinweise
Achtung
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, zum Beispiel
bei
rsync -a /etc ZIEL
kann es zu Problemen kommen. Falls nicht alles kopiert wird, kann man versuchen, von "Hand" die Daten mit cpoder 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!
Beispiele
Aufruf
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
angewandt 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
Sicherung innerhalb des Systems
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 bewerkstelligen mit:
sudo rsync -av --progress --delete /home /media/Backup/
Sicherung von lokalem Rechner auf entfernten Rechner
In diesem Beispiel soll ein lokales Homeverzeichnis (/home/benutzer) auf einen zweiten Rechner mit dem Namen example.com 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@example.com:/backups
Dies würde eine Kopie von /home/benutzer vom lokalen Rechner zum entfernten Rechner ins Verzeichnis /backups kopieren.
SSH-Port angeben
rsync -avz -e "ssh -p PORTNUMMER" user@remoteip:/path/to/files/ /local/path/
Sicherung von entferntem Rechner auf lokalen Rechner
In diesem Beispiel soll das Verzeichnis /var/www vom Rechner example.com 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@example.com:/var/www /home/benutzer/webserver --backup-dir=~/old
Sollen dem SSH-Befehl weitere Optionen angehängt werden, zum Beispiel
-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@example.com:/var/www /home/benutzer/webserver --backup-dir=~/old
Der Pfad zu dem Private-Key File muss dabei absolut sein. Dann den ganzen Befehl mit Cron zeitgesteuert automatisieren und die Angst vor einer defekten Festplatte oder versehentlich gelöschten Daten ist vorbei.
Abgleich von Dateien zwischen Rechnern mit unterschiedlichen Zeichensätzen
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@example.com:/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.
Verzeichnisse von der Sicherung ausschließen
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. Das per exclude bezeichnete Verzeichniss ist also kein absoluter Pfad, sonder relativ zum rsync Verzeichniss <Quelle> zu sehen - hier in diesem Beispiel also /home/user/daten/ .
Taucht der auszuschließende Ordner temp noch an weiteren Punkten der Quellhierarchie auf, so werden diese ebenfalls von der Sicherung ausgeschlossen.
Möchte man außerdem "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.
Mehrere auszuschließende Ordner kann man auch in eine Datei speichern und dann im rsync Aufruf per --exclude-from=FILE übergeben. Dazu ein praktisches Beispiel wie ein exclude FILE aussehen kann:
- Downloads - Ubuntu One + .config + .gconf + .gnome2 + .local - .*
Angenommen, man möchte das ganze Home Verzeichnis sichern, jedoch einige Verzeichnisse ausschliessen und andere einschliessen, dann führt die o.a. Datei zu folgendem Ergebnis: * die Verzeichnisse 'Downloads', 'Ubuntu One' und alle versteckten Verzeichnisse '.*' werden nicht gesichert
- von den versteckten Verzeichnissen sollen aber dennoch '.config', '.gconf', '.gnome2' und '.local' gesichert werden
Achtung: die Reihenfolge der Einträge in der Datei ist wichtig.
Grafische Benutzeroberflächen
Grsync
Zum bequemeren Sichern kann man unter GNOME, Xfce und LXDE eine grafische Benutzeroberfläche installieren:
sudo apt-get install grsync
Anschließend findet man bei Ubuntu-Varianten mit einem Anwendungsmenü einen Programmstarter unter "Systemwerkzeuge -> Grsync".
Unter "Advanced options" finden sich weitere Einstellungen. Teilweise erscheinen Erläuterungen (Tooltips) 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.
Unison
Unison ist ein komfortables Programm, welches das Protokoll von rsync nutzt. Es bietet eine grafische Oberfläche und erlaubt den Abgleich von Verzeichnissen in beide Richtungen, siehe Unison
rsync als Daemon
Rsync kann auch als Dienst (Daemon) betrieben werden, der dann auf Port 873 auf eingehende Verbindungen lauscht. Das Gespann aus rsync-Client und rsync-Daemon ist effektiver, als den entfernten Server per SAMBA oder NFS einzubinden und auf diesen Freigaben gemountete Verzeichnisse mit rsync "lokal" zu arbeiten. Um rsync in diesem Modus zu betreiben, wird eine Datei /etc/rsyncd.conf benötigt. Beispiel:
use chroot = true hosts allow = 192.168.0.0/24
transfer logging = true log file = /var/log/rsyncd.log log format = %h %o %f %l %b
[Freigabename] comment = Public Share path = /home/share read only = no list = yes uid = nobody gid = nogroup
Da ein privilegierter Port (< 1025) genutzt wird, muss der Aufruf des rsync-Daemons als root erfolgen:
sudo rsync --config=/etc/rsyncd.conf --daemon --no-detach
Testen kann man nun die Erreichbarkeit des Dienstes mit:* rsync server-ip:: oder
- rsync server-ip::Freigabename
In der Ausgabe werden damit die rsync-Freigaben des Daemons aufgelistet. Bei Problemen kann man in das Logfile schauen. Dieses wird in der rsyncd.conf definiert, zum Beispiel
als /var/log/rsyncd.log. Nach diesem ersten Test kann der rsync-Daemon wie folgt in das System per xinetd eingebunden werden.* Zum Einbinden von rsync in xinetd wird die Datei /etc/default/rsync benötigt:
RSYNC_ENABLE=inetd RSYNC_NICE='10' RSYNC_IONICE='-c3'* xinetd für rsync in /etc/xinetd.d/rsync konfigurieren
service rsync {
disable = no socket_type = stream wait = no user = root server = /usr/bin/rsync server_args = --daemon log_on_failure += USERID flags = IPv6
}* xinetd starten:
sudo service xinetd restart Diese Beispielkonfiguration ist komplett ohne User Authentifizierung, das heißt jeder im angegebenen Netzwerk hat Zugriff. Zu beachten ist, dass die Verbindung zu einem rsync-Dameon eine andere Syntax hat. Auszug aus der Manpage, normaler Aufruf:
rsync [OPTION...] [USER@]HOST:SRC... [DEST]
und so zu einem rsync-Daemon:
rsync [OPTION...] [USER@]HOST::SRC... [DEST] rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Die beiden "::" machen hier den Unterschied! Besser zu merken ist sicherlich das vorangestellte Netzwerkprotokoll "rsync://".
Links
- Projektseite
- Rsync
- Grsync- grafische Oberfläche
- Dateien abgleichen mit rsync- Artikel aus LinuxUser 04/2006
- Skripte/Backup mit rsync - fertiges Skript für die Datensicherung
Links
Dateien
Man-Page
- man rsync
Intern
Weblinks
- https://de.wikipedia.org/wiki/Rsync
- https://www.thomas-krenn.com/de/wiki/Daten_mit_rsync_unter_Linux_synchronisieren?xtxsearchselecthit=1
- https://wiki.ubuntuusers.de/rsync/
Kontrollfragen
Testfrage 1
Testfrage 2
Testfrage 3
Testfrage 4
Testfrage 5