Wie erstelle ich Backups mit rdiff-backup?rdiff-backup ist ein Tool, um ein Backup Deiner Dateien zu erstellen. Man kann es unter einigen *nix Ports benutzen, aber für dieses How-To gehen wir von einem debianbasierten Linux aus. Hinweis: Führe alle Befehle im How-To als Root aus, wenn nicht anders beschrieben.
rdiff-backup:
- um verpfuschte dist-upgrades wiederherzustellen, kernel upgrades u.s.w. (und auch zur wiederherstellung eigener Dateien).
- sichert nur veränderte Daten, wie es auch rsync macht(also dauern Backups nicht lange).
- führt eine Liste veränderter Daten (was bedeutet, Du kannst auch Daten wiederherstellen, die Du vor 3 Wochen gelöscht hast!).
- macht sichere Backups auch übers Netz (per ssh).
- macht Backups von eingehängten Partitionen (so das Du tägliche Backups einfach automatisieren kannst... kein Aushängen nötig).
- kann alles wiederherstellen, falls Deine Festplatte den Geist aufgibt und Du eine neue kaufen musst.
- lässt sich erweitern, um grosse Netzwerke zu sichern (Linux ist kein Problem, Windows etwas schwieriger) und wird in Firmen verwendet.
- ist ein konsolengestewuertes Tool, eignet sich also bestens für die unter uns,die gern schnell z.B. automatisierte Backups erstellen wollen (z.B. via Bash-SCript, aufgerufen durch cron).
- kann mit Rechten umgehen und diese erhalten, und kann mit symbolischen Links (und all diesen netten Sachen) umgehen, so dass nach einer Wiederherstellung alles so ist wie vorher.
Was wird benötigt
rdiff-backup erstellt und speichert eine vollständige (unkomprimierte) Kopie deiner Daten, und zusätzlich eine History (inkrementelle Backups), was bedeutet, dass der freie Platz grösser sein muss als die Daten Deiner Backups. Wenn Du ein Backup von 100GB machst, brauchst Du vielleicht 120 GB Platz (am Besten auf einer separaten Festplatte!).
Wie richte ich es ein?
Wir gehen davon aus, das Dein PC folgendermassen ausschaut:
- eine 100 GB Festplatte (hda) mit der Root-Partition auf hda1, Musik und andere Daten auf hda5, und hda6 als swap.
- eine 200 GB Festplatte (hdb) die nicht genutzt wird, mit hd1 als einziger Partition, die wir für unsere Backups benutzen.
- IP Adresse 192.168.0.1
Das erste, was wir tun müssen, ist rdiff-backup installieren:
# apt-get install rdiff-backup
Obwohl wir auch einzelne Dateien oder Ordner sichern können, gehen wir gleich einen Schritt weiter und sichern gleich ganze Partitionen ...wir machen ein Backup von hda1 und hda5 (hda6 lassen wir aussen vor),also legen wir erst mal einige Verzeichnisse an, um die zu sichernden Daten aufzunehmen :
# mkdir /media/hdb1/rdiff-backups/192.168.0.1/root
# mkdir /media/hdb1/rdiff-backups/192.168.0.1/hda5
(oder /mnt für KANOTIX-Versionen vor 2005-04, überprüfen kannst Du das in /etc/fstab)
Die IP-Adresse werden wir später nutzen, um einen Rechner über das Netzwerk zu sichern.
Backup
rdiff-backup benutzt die Syntax "
rdiff-backup " ... beachte bitte, das wir überlall Verzeichnisnamen verwenden,keine Dateinamen.
Für ein Backup von hda5 benutzen wir:
# rdiff-backup /media/hda5 /media/hdb1/rdiff-backups/192.168.0.1/hda5
Und für die Root-Partition:
# rdiff-backup --exclude '/tmp/*' --exclude '/proc/*' --exclude '/sys/*' \
> --exclude '/media/*/*' / /media/hdb1/rdiff-backups/192.168.0.1/root
"AF_UNIX path too long"-Fehlermeldungen können wir unbeachtet lassen. Dies kann nun eine Weile dauern, da es das erste Backup dieser Partition ist; also mussrdiff-backup die ganze Partition sichern, und nicht nur die Unterschiede seit der letzten Sicherung. Beachtet, das wir /tmp nicht sichern, da es sich ständig ändert, genauso wie /proc oder /sys da diese keine realen Daten enthalten, ausserdem sichern wir keine Mountpoints in /media oder /mnt. Wenn wir Mountpoints mitsichern würden, dann würden wir auch hdb1 mitsichrn, und würden Gefahr laufen, in eine Endlosschleife zu geraten! Ein Ausweg wäre hier, das man die Mountpoints hinterher separat sichert. Der Grund, warum wir '/proc/*' anstelle von '/proc' ist, das wir so schlauerweise den Verzeichnisnamen /proc sichern,aber nicht den Inhalt. Das gleiche gilt für /tmp, /sys, und, noch besser, sogar die Namen aller Mountpoints. Dadurch werden, wenn wir unsere Root-Partition zerstören, und eine volle Wiederherstellung machen,/tmp, /proc, /sys und die Namen der Mountpoints wiederhergestellt so wie es sein soll. Wenn z.B. /tmp nicht existiert, wenn der X-Server startetgibt es eine Fehlermeldung. (etwas, was ich auf die harte Tour lernen musste ... weitere harte Lektionen kommen noch). Schaut Euch die Manpage an für Weiteres über --exclude und --include.
Verzeichnisse wiederherstellen von Backups
rdiff-backup verwendet hier folgende Syntax:
rdiff-backup -r
Falls wir versehentlich das Verzeichnis /media/hda7/photos gelöscht haben, so können wir es wiederherstellen durch:
# rdiff-backup -r now /media/hdb1/rdiff-backups/192.168.0.1/hda5/photos\
> /media/hda5/photos
Die "-r now" -Option bedeutet, das aus dem letzten Backup wiederhergestellt wird. Wenn wir periodisch alles gesichert haben, (via crontab z.B.),und wir das Verschwinden des Photoverzeichnisses erst ein paar Tage später bemerken, müssen wir aus dem Backup von vor ein paar Tagen zurücksichern (und nicht mit "now", weil das Backup sagen würde, dass das Photo-Verzeichnis nicht existiert). Es kann auch sein, das Du absichtlich eine ältere Version von etwas wiederherstellen willst.
Wenn wir etwas von vor 3 Tagen zurückspielen wollen, benutzen wir "-r 3D" ... aber, wie uns die Manpage erklärt:
"3D" bezieht sich auf 72 Stunden vor Jetztzeit, und wenn da kein Backup gemacht wurde, stellt rdiff-backup das nächstältere Backup wieder her. Als Beispiel, wenn "3D" benutzt wird und es gibt nur 2 und 4 Tage alte Backups, wird das Verzeichnis erstellt, wie es vor 4 Tagen war (darüber musst Du Dir also vor der Zurücksicherung Gedanken machen).
Mit folgendem Befehl erhälst Du die Daten und Zeitpunkte der Backups von hda5:
# rdiff-backup -l /media/hdb1/rdiff-backups/192.168.0.1/hda5
Partitionen wiederherstellen
Du kannst auch gesamte Partitionen (Mountpoints) wiederherstellen ,(im Endeffekt sind Mountpoints ja auch nur Verzeichnisse).
WARNUNG: Auf keinen Fall die Root-Partition wiederherstellen, während sie eingehängt ist!
Obwohl es logisch erscheint, obige Warnung nicht zu ignorieren, konnte ich einem Experiment nicht widerstehen... Ich habe es getestet, weil ich wissen wollte, ob ich die Root-Partition wiederherstellen könnte, während das System auf der gleichen Root-Partition lief ... aber mit einem Befehl verlor ich alle Daten auf allen Partitionen einschliesslich aller Backups auf einer separaten Festplatte!! rdiff-backup tat genau, was ich ihm sagte ... das Backup der Root-Partition hatte leere Mountpoints, und daher wurde aller Inhalt unterhalb der Mountpoints gelöscht,damit die Rücksicherung dem Backup entsprach. Noch eine harte Lektion, aber es war nicht die Schuld von rdiff-backup, es zeigt nur wieder einmal die Power von Linux.
Um hda5 aus dem letzten Backup zurückzusichern, tun wir folgendes:
# rdiff-backup -r now /media/hdb1/rdiff-backups/192.168.0.1/hda5 /media/hda5
Root-Partition wiederherstellen
Die Root-Partition wiederherzustellen ist nicht ganz so einfach. Versuch nicht, die Root-Partition wiederherzustellen, während sie eingehängt ist (siehe obige Warnung). Es ist sehr nützlich, in der Lage zu sein, die Root-Partition wiederherzustellen, denn dann kann man, wenn bei einem Upgrade oder einem neuen Kernel etwas daneben geht, den vorherigen Zustand wiederherstellen, und es dauert nur 20 Minuten
Ein Weg, um die Root-Partition zurückzuspielen ist, eine separate Linux-Partition auf der Festplatte zu booten (falls vorhanden). So kannst Du die Partition wiederherstellen, die Du möchtest, da sie nicht als Root eingehängt ist. Nach Wiederherstellung der Partition kannst Du sie booten, und sie wird exakt so sein wie zum Zeitpunkt des Backups. Das ist bei weitem der einfachste Weg.
Ein weiterer Weg, die Root-Partition rückzusichern ist, eine LIVE-CD zu booten (z.B. "KANOTIX" http://kanotix.com/) und die Wiederherstellung von dort zu machen. Die meisten LIVE-CD's haben rdiff-backup nicht installiert (ich hab jedenfalls keine gefunden), aber KANOTIX ist eine gute Wahl weil Du in Grub (
Bootoptionen, (Cheatcodes)) den Cheatcode "unionfs" eingeben kannst, und dann die Möglichkeit hast, mit der LIVE-CD Dinge installieren kannst!! Boote einfach die LIVE-CD und führe folgendes aus:
$ sudo su
# wget -O/etc/apt/sources.list http://kanotix.com/files/fix/sources.list
# apt-get update
# apt-get install rdiff-backup
# mount /dev/hda1 /media/hda1
# mount /dev/hdb1 /media/hdb1
# rdiff-backup -r now /media/hdb1/rdiff-backups/192.168.0.1/root /media/hda1
Ich empfehle jedem, der seine Root-Partition sichert, (um sie bei Bedarf wiederherstellen zu können) den Wiederherstellungsprozess einmal übungsweise durchzuführen. Es gibt nichts schlimmeres, als sich in Sicherheit zu wähnen, um dann im Notfall festzustellen, dass es unerwartete Probleme gibt..
Notiz:
Wenn Du keine KANOTIX CD hast, deine LIVE-CD aber
klik unterstützt, kannst Du
rdiff-backup durch Klik benutzen mit folgendem Befehl:
$ sudo ~/.zAppRun ~/Desktop/rdiff-backup_0.13.4-5.cmg rdiff-backup \
> -r now /media/hdb1/rdiff-backups/192.168.0.1/root /media/hda1
Backup von Remote-PC
Du kannst Backups von anderen PC's machen, solange Du sie per ssh erreichen kannst (und Du natürlich genug freien Platz auf der Festplatte hast). Der ssh-Server (sshd) muss auf dem entfernten PC laufen. Der entfernte PC muss nicht in Deinem LAN sein, er könnte irgendwo auf der Welt stehen.
Wir gehen mal von folgendem Remote-PC aus:
Eine 100 GB Festplatte (hda) mit folgenden Mountpoints: hda1 mit der Root-Partition, hda5,wo wir zeitlich begrenzte Daten speichern, die wir aber nicht ins Backup übernehmen wollen, und hda6 als swap
Die IP-Adresse lautet 192.168.0.2
Man sollte sich darüber im Klaren sein, das man mit rdiff-backup normalerweise nicht beide 100 GB Festplatten auf eine 200 GB Festplatte sichern können(weil dann kein Platz bleibt für inkrementelle Backups), aber da wir in diesem Fall hda5 vom entfernten Rechner nicht sichern wollen (und da Festplatten normalerweise nicht zu 100 % belegt sind) gehen wir davon aus, das es in diesem Fall ausreicht. Jedes Mal, wenn rdiff-backup ein weiteres Backup macht, kommen mehr inkrementelle Daten dazu, und das braucht mehr und mehr Platz. Wir können rdiff-backup anweisen, maximal Backups eines Monats zu behalten (dazu später mehr), was natürlich weniger Platz braucht, als wenn wir Backups eines Jahres behalten. Und wenn wir ein Jahr Backups haben wollen, brauchen wir natürlich mehr Platz für die inkrementellen Daten.
Als erstes müssen wir rdiff-backup auch auf dem entfernten PC installieren (alle Rechner, die Du sichern willst, inclusive des Backup-Servers müssen rdiff-backup installiert haben).
Um den entfernten Rechner auf den lokalen Rechner zu sichern (hier: 192.168.0.1):
# mkdir /media/hdb1/rdiff-backups/192.168.0.2/root
# rdiff-backup --exclude '/tmp/*' --exclude '/proc/*' --exclude '/sys/*'\
> --exclude '/media/*/*' 192.168.0.2::/ /media/hdb1/rdiff-backups/192.168.0.2/root
(beachte die doppelten Gedankenstriche).
Wenn wir nun ein Verzeichnis auf dem Remote-PC zurücksichern wollen, können wir das sowohl auf dem lokalen PC als auch auf dem Remote-Pc anstossen.
So würden wir das Verzeichnis /usr/local/games auf dem Remote-Pc wiederherstellen, angestossen vom Remote-PC aus:
# rdiff-backup -r now 192.168.0.1::/media/hdb1/rdiff-backups/192.168.0.1/root/usr/local/games\
> /usr/local/games
Und so sichern wir /usr/local/games zurück auf dem Remote-PC, angestossen vom lokalen PC:
# rdiff-backup -r now /media/hdb1/rdiff-backups/192.168.0.1/root/usr/local/games\
> 192.168.0.2::/usr/local/games
Wir benutzen die gleiche Syntax, um die Root-Partition von einer Live-CD rückzusichern (wobei der Remote-PC von der LIVE-CD gebootet wird....siehe oben).
Automatisierte Backups:
Wenn wir Backups von entfernten Rechnern auf unserem PC machen, sorgen wir als erstes für passwortlosen ssh-Zugang durch ssh keys. Wir sprechen hier von passwortlosem Root-Zugang für ssh. Das kann man festlegen, so dass nur die rdiff-backup-Befehle ausgeführt werden müssen, doch das würde dieses How-To sprengen. (siehe dazu die Links am Ende dieses How-TO, oder google nach How-To's zu diesem Thema). Wir gehen jetzt mal von voller Vertrauenswürdigkeit aus und richten die einfachste Möglichkeit für passwortlosen ssh-Zugang ein.
Vom lokalen PC aus tun wir folgendes:
# [ -f /root/.ssh/id_rsa ] || ssh-keygen -t rsa -f /root/.ssh/id_rsa
und dann 2x ENTER für leere Passwörter.
Dann:
# cat /root/.ssh/id_rsa.pub | ssh 192.168.0.2 'mkdir -p /root/.ssh;\
> cat - >>/root/.ssh/authorized_keys2'
(Wir werden dann nach unserem Root-Passwort gefragt,und das hoffentlich zum letzen Mal).
Nun kommen wir per ssh als Root auf den Remote-PC ohne ein Passwort angeben zu müssen, und wir können rdiff-backup automatisieren.
Als nächstes erstellen wir ein Bash-Script mit allen rdiff-backup-Befehlen. Unser Bash-Script könnte etwa so aussehen:
#!/bin/bash
RDIFF=/usr/bin/rdiff-backup
echo
echo "=======Backing up 192.168.0.1 root======="
${RDIFF} --ssh-no-compression --exclude '/tmp/*' --exclude '/proc/*'\
--exclude '/sys/*' --exclude '/media/*/*'\
/ /media/hdb1/rdiff-backups/192.168.0.1/root
echo "(and purge increments older than 1 month)"
${RDIFF} --remove-older-than 1M\
--force /media/hdb1/rdiff-backups/192.168.0.1/root
echo
echo "=======Backing up 192.168.0.1 mount hda5======="
${RDIFF} --ssh-no-compression --exclude /media/hda5/myjunk /media/hda5\
/media/hdb1/rdiff-backups/192.168.0.1/hda5
echo "(and purge increments older than 1 months)"
${RDIFF} --remove-older-than 1M\
--force /media/hdb1/rdiff-backups/192.168.0.1/hda5
echo
echo "=======Backing up 192.168.0.2 root======="
${RDIFF} --ssh-no-compression --exclude '/tmp/*' --exclude '/proc/*'\
--exclude '/sys/*' --exclude '/media/*/*' --exclude '/mnt/*/*'\
192.168.0.2::/ /media/hdb1/rdiff-backups/192.168.0.2/root
echo "(and purge increments older than 1 months)"
${RDIFF} --remove-older-than 1M\
--force /media/hdb1/rdiff-backups/192.168.0.2/root
Wir nennen dieses Bash-Script nun "
myrdiff-backups.bash" und legen es in /usr/local/bin auf unserem lokalen (Backup-Server) Rechner ab und machen es ausführbar. (chmod +x) Starte das Script, um sicherzustellen, dass es funktioniert.
Und jetzt bringen wir cron bei, es jeden Tag um 8 Uhr aufzurufen. Die folgende Zeile in crontab als Root wird das bewirken:
# crontab -e
wir fügen folgende Zeile ein:
0 20 * * * /usr/local/bin/myrdiff-backups.bash
So, das wars auch schon. Jetzt habt viel Spass mit den vielen Möglichkeiten von rdiff-backup!
More info
Rdiff-backup
RdiffBackupWiki
examples
man rdiff-backup
Dank an Swynndla
nach oben