Ein weiteres Tools, um Backups zu erstellen ist rsync. Die Verwendung ist wieder relativ einfach. Ich zeige hier zwei Szenarien: Lokales Backup und remote Backup. Wie rdiff-backup arbeitet auch rsync auf Dateiebene und sichert bitweise. Das bedeutet, dass nur das übertragen wird, was sich wirklich verändert hat.
Die wichtigsten Optionen
-e
Erlaubt die Verwendung einer Remote-Shell wie SSH. So lassen sich Sicherungen auch über SSH-Tunnel problemlos erreichen.--delete
Löscht auf dem Ziel Dateien, die auf der Quelle nicht mehr existieren. So sind am Ende Quelle und Ziel absolut gleich.-z, --compress
Schaltet die Kompression während der Übertragung ein, was ein Geschwindigkeitsvorteil in den meisten Fällen ist. Bei Tests zeigte sich, wenn ich -z hinzufüge, bricht die Übertragung von 70 Mb/s auf nicht mal 20 Mb/s runter. Ich schlage vor das auszuprobieren statt in gutem Glauben das einfach einzuschalten.-a, --archive
Ist das Equivalent zu -rlptgoD
. Es werden Verzeichnisse übertragen, Dateirechte beibehalten, Sybolic-Links bleiben erhalten uws.-P
Statusanzeige während der Übertragung.
Lokales Backup
Die Daten werden innerhalb des Servers in ein anderes Verzeichnis synchronisiert. Sinnvollerweise sollte in das Verzeichnis dann eine physikalisch andere Festplatte sein, um einen Ausfall der Festplatte, die kopiert wird, abzufedern.
rsync -av --delete /das/ist/die/quelle/ /das/ist/das/ziel/
Der Schalter -a
steht für "archiv" und ersetzt alle diese Schalter: -rlptgoD
. Der Schalter -v
steht für "verbose" und zeigt an welche Dateien transferiert werden. Der Schalter --delete
löscht alle Dateien auf dem Ziel, die in der Quelle nicht mehr vorhanden sind. Wenn man die Lösung nicht möchte, so lässt man --delete
einfach weg.
Remote Backup
Beim Remote Backup ist die Quelle ein Computer, aber das Ziel ist ein anderer Server im Netzwerk worauf synchronisiert werden soll. Die Schalter sind die gleichen wie bei dem lokalen Backup. Allerdings sollte man rsync anweisen die Daten über einen SSH-Tunnel schicken, wenn die Server nicht in einem gesicherten heimischen Netzwerk transferiert werden.
Ohne SSH:rsync -av --delete root@10.10.10.100:/Quelle/ /Zielverzeichnis
Mit SSH:rsync -av --delete -e "ssh -i /home/user/.ssh/sshkey" root@10.10.10.100:/Quelle/ /Zielverzeichnis
Muss man den Zielport noch angeben, so ist innherhalb -e "ssh ..."
die Portangabe mit -p 2222
zu machen.
Wenn man SSH nutzen und das Backup automatisieren will, dann muss der Login ohne Passwortabfrage erfolgen.
Verzeichnisse und Dateien excludieren
Es kann durchaus mal sein, dass bestimmte Verzeichnisse oder Dateien von der Sicherung ausgenommen werden müssen. Das erreicht man mit dem Schalter --exclude bzw. --exclude-from. Dateien und Verzeichnisse funktionieren gleich. Hier mal zwei Beispiele:
rsync -av --exclude 'dir_ausnahme/' quelle/ ziel/
oder
rsync -av --exclude 'datei.txt' quelle/ ziel/
Dabei ist zu beachten, dass das ausgenommene Verzeichnis oder Datei relativ zur Quelle ist. Es lassen sich auch mehrere Dateien oder Verzeichnisse aufzählen. Dazu ist eine etwas andere Schreibweise notwendig, die auf zwei Arten erfolgen kann. Hier ein paar Beispiele:
rsync -av --exclude 'datei1' --exclude 'datei2' quelle/ ziel/
oder
rsync -av --exclude={'datei1','datei2'} quelle/ ziel/
Möchte man, dass das excludierte Verzeichnis zwar mitgesichert wird, allerdings ohne Inhalt, dann kann man das wie folgt tun:
rsync -av --exclude 'datei1/*' quelle/ ziel/
Nun könnte es sein, dass die Ausnahmen von einem Programm oder Script erzeugt werden und es wäre geradezu exzellent, wenn das in eine Datei geschrieben werden könnte, die rsync dann auslesen kann. Und ja, es geht.
Die eigentliche rsync-Zeile schaut dann wie folgt aus:
rsync -av --exclude-from='excluded-files.txt' quelle/ ziel/
Dazu benötigt man dann die Textdatei "excluded-files.txt", die folgenden Inhalt hat:
Datei1.txt
Datei2.txt
Datei.png
Directory1/
Directory2/*
Mehr Informationen dazu findet man hier.
Loggen - Format und Speicherort
Natürlich möchte man auch ein Logfile in dem man später prüfen kann, ob alles glatt gelaufen ist. Darüberhinaus möchte man, dass die Einträge im Log so sind, dass sie günstig zu lesen sind. Alle relevanten Informationen so wie man sie braucht.
Rsync Statusanzeige
Damit man sehen kann wie weit rsync mit seiner Arbeit ist, kann man den Schalter --progress
verwenden.
Rsync Exit-Codes:
EXIT VALUES 0 Success 1 Syntax or usage error 2 Protocol incompatibility 3 Errors selecting input/output files, dirs 4 Requested action not supported: an attempt was made to manipu‐ late 64-bit files on a platform that cannot support them; or an option was specified that is supported by the client and not by the server. 5 Error starting client-server protocol 6 Daemon unable to append to log-file 10 Error in socket I/O 11 Error in file I/O 12 Error in rsync protocol data stream 13 Errors with program diagnostics 14 Error in IPC code 20 Received SIGUSR1 or SIGINT 21 Some error returned by waitpid() 22 Error allocating core memory buffers 23 Partial transfer due to error 24 Partial transfer due to vanished source files 25 The --max-delete limit stopped deletions 30 Timeout in data send/receive 35 Timeout waiting for daemon connection
Rsync-Statuscodes
>f.st......
> - the item is received
f - it is a regular file
s - the file size is different
t - the time stamp is different
.d..t......
. - the item is not being updated (though it might have attributes
that are being modified)
d - it is a directory
t - the time stamp is different
>f+++++++++
> - the item is received
f - a regular file
+++++++++ - this is a newly created item