Dieser Beitrag ist erschienen in freiesMagazin 10/2008 / Lizenz: GNU Free Documentation License (GNU FDL) / Autor: Torsten Maus. Wenn Sie diesen Artikel weiterverwenden möchten, beachten Sie bitte die Lizenzbedingungen. Vielen Dank.
Datensicherung mit rdiff-backup
von Torsten Mausrdiff-backup (Link) ist eine Software, welche auf rsync basiert. Dieses Netzwerkprotokoll ermöglicht das Übertragen von Daten auf sicheren SSH-Verbindungen durch das Netzwerk. rdiff-backup ergänzt rsync dabei um die Funktion, dass es mehrere Versionen speichern kann. Das bedeutet, dass auf einem Backup alle Dateien auf dem aktuellen Stand sind, allerdings mit Hilfe der rdiff-tools auch ältere Versionen ebenfalls zur Verfügung stehen.
Installation
Mit Hilfe des Paketmanagers der verwendeten Distribution kann man das Paket rdiff-backup ganz einfach installieren. Es ist nicht mehr zu tun, als das Paket und deren Abhängigkeiten einzuspielen.Konfiguration von rdiff-backup
Da es für rdiff-backup keine Konfigurationsdatei gibt, sollte man sich ein Skript basteln, da das Eintippen des Befehls bei jedem Backup sehr mühselig ist. Im folgenden wird ein Szenario gezeigt, in dem verschiedene Optionen des Programms mit dem Ziel verwendet werden, ein komplettes System zu sichern. Zunächst werden aber einmal kurz die Parameteroptionen erklärt.Parameteroptionen
Es gibt einige wichtige Parameteroptionen von rdiff-backup:- --archive/-a - Archivierungsmodus. Dieser sorgt dafür, dass die Ordnerstruktur eins zu eins übernommen wird.
- --update/-u - Update, damit bei einem Backup auch wirklich nur die geänderten Daten übertragen werden und nicht immer alle Daten das Netzwerk durchlaufen. Diese Option ist standardmäßig bei rdiff-backup gesetzt.
- --exclude - Dies nimmt Dateien oder komplette Ordner vom Backup aus, weil diese entweder zu groß sind oder, wie sich später noch zeigt, dynamisch aufgebaut werden und deswegen von einem Backup abgeraten wird.
Sichern eines Systems
Es folgt zuerst das Skript und danach die Erklärung der Zeilen. Das \\ entspricht dabei einem verhinderten Zeilenumbruch, sodass ein Befehl über mehrere Zeilen geschrieben werden kann. #!/bin/sh rdiff-backup -v0 \\ --exclude /home \\ --exclude /proc \\ --exclude /mnt \\ --exclude /tmp \\--exclude /dev \\ --exclude /sys \\ --exclude /var/tmp \\ root@<Server>::/ \\ /mnt/backup/<SERVER> retval=$((retval - $? )) rdiff-backup -v0 --force \\ --remove-older-than 4W \\ /mnt/backup/<SERVER> retval=$((retval - $? )) if [ $retval -eq 0 ]; then echo "Backup successfull: `date`" else echo "Backup failed!" fi
In dem oben stehenden Beispiel wird zunächst rdiff-backup mitgeteilt, welche Verzeichnisse ausgenommen werden. Dies geschieht mit der Option --exclude. Dies sind zum einen Verzeichnisse, welche dynamisch erstellt werden, zum anderen sind es temporäre Verzeichnisse, welche oft sehr groß sind und deswegen nur unnötig Zeit bei einem Backup in Anspruch nehmen würden. Das -v0 am Anfang underdrückt im übrigen die Ausgabe im Terminal.
Über die Zeile root@<SERVER>::/ meldet man sich als Root am fremden Server, dessen Daten man sicher will. <SERVER> muss man dabei natürlich noch angeben, ebenso wie in der Zeile darunter, welche das Zielverzeichnis angibt, in dem die Daten gesichert werden sollen. Das Verzeichnis /mnt/backup/<SERVER> muss dabei vorher von Hand angelegt werden, wenn es nicht existiert.
Das retval danach ist die Zuweisung eines Arrays, welches am Ende des Skripts wieder gebraucht wird. Damit das redundante Backup nicht mit vier Jahre alten Daten blockiert wird, muss man es noch säubern. Dies geschieht in der vorletzten Zeile. Dabei prüft das Skript, welche Dateien älter als vier Wochen sind (--remove-older-than 4W) und nimmt diese vom Backup aus. Damit ist gewährleistet, dass das Backup immer aktuell aus den Daten der letzten vier Wochen besteht.
SSH-Keygen
Damit sich rdiff-backup und eben auch rsync passwortlos auf dem Server des Systems anmelden können, müssen noch die Passwörter verschlüsselt übergeben werden, denn kein Administrator steht in der Nacht um 3 Uhr auf, um das Passwort einzugeben, weil dort das Backup startet. Dazu meldet man sich am Backup-Server an und gibt als Root folgende Befehle ein (wie üblich ist der Parameter <SERVER> der Zielrechner, welcher gesichert werden soll): # ssh-keygen # ssh-copy-id -i /root/.ssh/id_rsa.pub root@<SERVER>Der Backupserver erstellt nun einen sicheren Schlüssel mit ssh-keygen. Der Nutzer muss nur noch alle weiteren Eingaben mit Enter bestätigen, da sonst ein passwortloser Login nicht möglich ist. Hat er den Schlüssel erstellt, wird dieser im Verzeichnis /root/.ssh abgelegt. Danach kann man den Schlüssel ganz einfach mit dem Kommando ssh-copy-id zum entsprechenden Server schicken. Jetzt kann man sich passwortlos auf dem angegeben Server einloggen. Entsprechend kann rdiff-backup passwortlos die Daten dort jede Nacht sichern.
Backup mit Cron
Es gibt auch keinen Administrator, der nachts um 3 Uhr aufsteht, um das Backup zu starten, weil zu dieser Zeit weniger Netzwerklast besteht. Es ist sowieso einfacher diese Arbeit von Cron erledigen zu lassen. Zuerst sollte man natürlich das obige Skript als backup.sh speichern, dann ausführbar machen und an die richtige Stelle schieben: # mv backup.sh /usr/local/bin/ # chmod u+x /usr/local/bin/backup.shIn /etc/cron.d/ erstellt man mit Root-Rechten eine Datei, beispielsweise mit dem Namen backup. In diese schreibt man dann 0 1 * * * root /usr/local/bin/backup.sh
Damit wird jeden Tag, immer um 1 Uhr nachts, das Skript gestartet. Gratulation! Das Backup sollte somit automatisch klappen.
Wiederherstellen eines Backups
Szenario: Man ,,verbastelt'' sich das System oder durch ein Update entsteht ein Schaden, welcher erst bei einem späteren Neustart auffällt. In dieser Zeit führt Cron natürlich weiterhin das Backup-Skript aus. Damit man nun auf das inkrementelle Backup zugreifen kann, muss man sich zunächst darüber klar werden, welche Datei man benötigt. Als Beispiel soll dies an der Konfigurationsdatei smb.conf des Dienstes Samba getestet werden. Man wechselt auf den Backup-Server und führt folgendes Kommando aus: # rdiff-backup -l /mnt/backup/<SERVER>/etc/samba/smb.confDies Ausgabe könnte dann wie folgt aussehen: Found 3 increments: smb.conf.2008-06-01T01:21:08+02:00.diff.gz Sun Jun 1 01:21:08 2008 smb.conf.2008-06-03T01:14:50+02:00.diff.gz Tue Jun 3 01:14:50 2008 smb.conf.2008-06-04T01:14:26+02:00.diff.gz Wed Jun 4 01:14:26 2008 Current mirror: Sun Jun 8 01:18:35
Wie man sieht, gibt es mehrere Versionen, welche sich rdiff-backup ,,gemerkt'' hat. Will man nun die Sicherung vom 3. Juni wiederherstellen, weil man weiß, dass die Datei im Laufe dieses Tages zerstört wurde, braucht man folgenden Befehl: # rdiff-backup -r 2008-06-03T01:14:50+02:00 ->
/mnt/backup/<SERVER>/etc/samba/smb.conf /root/smb.conf
Hinter der Option -r muss man den Zeitpfad, welcher oben hinter der Datei steht, angeben. Die Datei smb.conf wurde dann aus dem Backup-Verzeichnis ins /root-Verzeichnis kopiert und kann von dort aus weiter verwendet werden.
Tipps und Tricks
Noch ein paar Tipps:- Eine SATA-Festplatte eignet sich sehr gut zum Sichern der Daten, da diese schnellere Zugriffzeiten haben als ihre IDE-Kollegen.
- Ein Backup sollte immer in der Nacht laufen, wenn die Last des Systems niedrig ist.
- Das Backup kann unter Umständen nicht funktionieren, wenn das Root-Passwort geändert wurde. Dazu müssen neue SSH-Keys erstellt werden.
http://www.nongnu.org/rdiff-backup/
| Autoreninformation |
| Thorsten Maus ist zurzeit Student an der CBS in Köln und arbeitet neben seinem Studium als Systemadministrator auch mithilfe von rdiff-backup. |
| < Zurück | Weiter > |
|---|





