Login
Login-Name Passwort


 
Newsletter
Werbung

So, 8. Februar 2009, 00:00

Das Backup-Programm BoxBackup

Platzsparendes netzwerkweites Backup

Restore

Prinzip

Einzelne Dateien können wir mit bbackupquery zurückholen. Nehmen wir als Beispiel an, wir haben /var/lib/ntp/ntp.drift verloren und wollen es wiederhaben. Am Prompt von bbackupquery können wir Kommandos eingeben. Im folgenden Listing sehen wir die Kommandos hinter dem Prompt query %gt; und die Ausgabe unmittelbar darunter.

query > cd var/lib/ntp
query > ls
00002798 f----- ntp.drift
query > ls -o
000013d9 f--o-- ntp.drift
00002780 f--o-- ntp.drift
00002798 f----- ntp.drift
query > ls -ot
000013d9 f--o-- 2007-03-03T20:29:57 ntp.drift
00002780 f--o-- 2007-03-04T00:29:57 ntp.drift
00002798 f----- 2007-03-05T00:29:57 ntp.drift
query > get -i 00002780 ntp.drift
Object ID 00002780 fetched sucessfully.
query > quit
Logging off...
Session finished.

Die Kommandos ähneln denen in einem FTP-Client. Ein normales ls-Kommando zeigt nur die aktuelle Version der Datei an. Mit ls -o sehen wir alle Versionen mit ihren IDs; mit ls -ot wird zusätzlich noch das Datum angezeigt. Nun wollen wir aus unverständlichen Gründen die Version vom 4.3.2007 wieder herstellen. Dies geschieht mit der get-Anweisung. Ohne die Option -i würde die letzte Version wieder hergestellt. Nachdem wir das Programm verlassen haben, finden wir die Datei im aktuellen Verzeichnis vor. Von dort können wir sie in ihr Zielverzeichnis verschieben. Wie in einem FTP-Client hätten wir mit dem lcd-Kommando in das Zielverzeichnis wechseln und die Datei direkt dorthin schreiben können.

Ein Restore funktioniert prinzipiell genauso. Hierbei kommt das Kommando restore zum Einsatz, das ein ganzes Unterverzeichnis in ein lokales Verzeichnis zurücksichert. Auch eine Vergleichsoperation compare gibt es, deren Syntax der von restore ähnelt. Beim Restore gibt es keine Möglichkeit, einen älteren Stand auszuwählen - dies ist eines der noch geplanten Features.

Test des Restore

Auf jeden Fall sollte man auch einmal testen, dass man mit dem Backup seinen Rechner auch wiederherstellen kann! Zumindest sollte man die Daten einmal komplett aus dem Archiv abrufen und auf Vollständigkeit prüfen.

Nun hat man vielleicht auf dem Client nicht genug Platz, um die Dateien in ein separates Verzeichnis zurückzuholen. Andererseits kann man eigentlich nur von diesem Client aus die Daten lesen, da sie verschlüsselt sind. Doch hier kommt uns die Sicherung der notwendigen Daten im client-Verzeichnis zu Hilfe. Mit einer Kopie dieser Daten können wir auf einem beliebigen Rechner zentral alle Backups prüfen. Dazu kopieren wir zunächst das ganze Verzeichnis auf den Zielrechner, wozu wir ein NFS-Volume, scp, rsync oder andere Methoden einsetzen können. Mit NFS zum Beispiel:

cp -a /mnt/backup/clients /mnt/server/backup

Melden wir uns an diesem Server an und wechseln in dieses Backup-Verzeichnis. Das kann als normaler Benutzer geschehen, wenn wir vorher diesen Benutzer zum Besitzer des ganzen Verzeichnisses gemacht haben. Die Konfigurationsdaten und Schlüssel jedes Clients liegen nun unter [client]/boxbackup. Unser Ziel ist, durch Verwendung der jeweiligen Konfigurationsdatei des Clients das richtige Zertifikat zu laden und so Zugriff zu bekommen. Dazu müssen wir in der Konfigurationsdatei aber den Pfad der Zertifikatsdatei anpassen:

for client in *; do
 sed -i -e "s:etc:var/backup/$client:" $client/boxbackup/bbackupd.conf
done

Probieren wir, ob wir die Backup-Daten des Clients sehen können. Vorher wechseln wir aber noch in ein leeres Testverzeichnis, das wir ggf. zuvor anlegen. So können die Backup-Daten keine vorhandenen Daten überschreiben.

bbackupquery -c /var/backup/<client>/boxbackup/bbackupd.conf

Es klappt! Nun können wir Verzeichnis für Verzeichnis rücksichern, was aber zu viel Handarbeit bedeutet:

restore boot boot
restore etc etc
...

Um die Integrität des Backups systematisch zu prüfen, habe ich daher ein weiteres Skript erstellt. Um es zu benutzen, muss man lediglich die Variable basedir anpassen. Dann kann man es von jeder beliebigen Stelle aus aufrufen. Auch dieses Skript steht zum Download bereit.

#!/bin/sh
# hjb 2007-03-29
basedir="/app"
cd "$basedir/backup-tree" || exit 1
query() {
 local client=$1
 shift
 /usr/sbin/bbackupquery -q -c "$basedir/backup/$client/boxbackup/bbackupd.conf" "$@"
}
for client in *; do
 cd $client || exit 2
 chmod -R 0700 *
 rm -rf *
 files=$(query $client ls quit | egrep '^[0-9]{8}' | cut -d ' ' -f 3-)
 for i in $files; do
 echo -n $client $i:
 query $client "restore $i $i" quit | tr -d .
 done
 cd ..
done

Bei diesem Test stellte ich mit Besorgnis fest, dass einige Dateien im Backup Fehlermeldungen lieferten und das Restore abbrach. Ein Teil dieser Fehler war mit einer defekten Festplatte zu erklären. Nachdem ich diese aus dem RAID entfernt hatte, nahmen die Fehler ab. Einige blieben jedoch. Nachdem die Versuche, anhand der Hilfen auf der BoxBackup-Homepage das Problem zu lokalisieren, fehlgeschlagen waren, löschte ich die betroffenen Client-Accounts und legte sie neu an. Man verliert dadurch die Versions-Historie der gesicherten Dateien, aber eine andere Lösung sah ich zunächst nicht. Einige Probleme blieben jedoch weiterhin, so dass ich die Vermutung hatte, dass BoxBackup 0.10 noch Fehler aufweist. Ich begann also, die betroffenen Clients auf neuere Versionen aus dem Versionsverwaltungssystem des Projektes zu aktualisieren.

Doch meine Zweifel an der Korrektheit des Programmes scheinen unbegründet. Das wahre Problem liegt woanders, und zwar an einigen merkwürdigen Zugriffsrechten. So hatte ich auf einem Client folgendes Verzeichnis:

dr-xr-xr-x 2 hans hans 4096 2007-11-02 23:57 include

Sind in diesem Verzeichnis Dateien enthalten, versucht die Rücksicherung, sie anzulegen. Dass dies mit einem »Permission denied« scheitert, kann man mühelos sehen. Die einzige Lösung ist, auf dem zu sichernden Rechner die Rechte zu ändern, in diesem Fall: chmod u+w include.

Hier ist das Rezept, wie man solchen Problemen auf die Spur kommt. Man lässt zuerst das Restore-Test-Skript normal laufen. Gibt es für Client »client« und Verzeichnis »dir« einen Fehler aus, dann führt man das Kommando, das zu dem Fehler führte, unter »strace« von Hand aus:

strace -f -olog -s300 /usr/sbin/bbackupquery -q \
 -c <basedir>/backup/<client>/boxbackup/bbackupd.conf \
 "restore -r <dir> <dir>" quit

Hilfreich ist die Option -r, die dazu führt, dass sich der Fehler sofort wiederholt. Nur finden wir danach in der Datei log einen Hinweis, was das Problem war. Beispiel:

11748 open("usr-local/test/include/xyz", _WRONLY|O_CREAT|O_EXCL|O_LARGEFILE, 0666) = -1 EACCES (Permission denied)

Mit folgendem Kommando kann man im aktuellen Verzeichnis (auf dem Client) nach ähnlichen Problemen fahnden:

find . -type d ! -perm /0200

Eine weiterer Fehler kann unter recht bizarren Umständen auftreten, wenn man symbolische Links hat, die mit einer absoluten Pfadangabe auf ein Verzeichnis zeigen. Ich vermutete hier einen Fehler in BoxBackup 0.10, was schließlich bestätigt und korrigiert wurde. Wer eine Version vor 5. November 2007 einsetzt, kann als Workaround den absoluten Link durch einen relativen ersetzen.

Kommentare (Insgesamt: 0 || Kommentieren )
Pro-Linux
Pro-Linux @Twitter
Neue Nachrichten
Werbung