Cloud-Backup mit Bordmitteln
bup
Die Software bup löst gleich zwei Probleme. Zum einen archiviert bup alle übergebenen Daten und ermöglicht deren Wiederherstellung. Zum anderen werden bei jedem Speichervorgang nur die Änderungen zu bereits in bup gesicherten Daten auf der Festplatte abgelegt. Aus Anwendersicht kann man sich bup als Datenbank vorstellen, die Daten besonders effizient speichert. Gerade diese Effizienz ist wichtig, damit nur ein Minimum an Daten an den Rechner im Internet übertragen werden muss.
Intern verwendet bup Strukturen des Versionsverwaltungssystems git (z.B. das git packfile format) und bietet ein wahres Füllhorn an Funktionen: Den Zugriff auf den Datenbestand via Webbrowser oder als FUSE-Modul, die Möglichkeit, mit git-Programmen auf die bup-Daten zuzugreifen und die Sicherung der Datenintegrität mittels PAR2.
bup-Repository erstellen
Bevor man mit bup arbeiten kann, muss man ein bup-Repository erstellen. bup legt hierbei standardmäßig seine Daten unter ~/.bup, also im jeweiligen Heimatverzeichnis des aktiven Benutzers, ab. Möchte man den Pfad ändern, so geschieht dies über den Parameter -d <Pfad>. Als ersten Test kann man mittels des folgenden Befehls ein temporäres bup-Archiv (für den Produktivbetrieb muss natürlich ein anderes Verzeichnis gewählt werden) anlegen:
$ bup -d /tmp/b init
Daten an bup senden
Bup sieht zwei verschiedene Arten vor, wie Daten zum Speichern eingereicht werden können. Über das Kommando split können beliebige Datenströme (z.B. die Ausgabe von tar oder dd) in bup umgeleitet werden. Um beispielsweise das eigene Heimatverzeichnis in bup zu sichern, könnte man folgenden Einzeiler verwenden:
$ tar cv ~ | bup -d /tmp/b split -n "tar-Test"
Diese Methode hat den Vorteil, dass auch Zugriffsrechte sowie Benutzer- und Gruppenzugehörigkeiten gesichert werden, hat aber auch den Nachteil, dass man nicht gezielt auf einzelne Dateien der Sicherung zurückgreifen kann. Mit -n wird hierbei der Name des Backup-Satzes angegeben. Für regelmäßige Backups (und der Ordnung wegen) empfielt es sich, für verschiedene Aufgaben eigene Backup-Sätze zu verwenden (z.B. konfig für /etc oder meins für ~). Für die Effizienz von bup ist es allerdings unerheblich, wieviele Backups ein Backup-Satz enthält, da immer nur Differenzen zu allen zuvor in bup gesicherten Daten gespeichert werden.
Möchte man auf einzelne Dateien in bup über FUSE, den integrierten Webserver oder das Kommandozeilenwerkzeug zugreifen können, so geschieht die Sicherung über:
$ bup -d /tmp/b index $ bup -d /tmp/b save -n "datei-Test" ~
Die erste Zeile legt eine Liste aller zu sichernden Dateien und Verzeichnisse an, die zweite sichert diese anschließend in der bup-Datenbank. Diese Variante hat aber (derzeit) den Nachteil, dass keine Dateirechte gesichert werden.
Daten aus bup herausbekommen
Das Ablegen von Daten in bup ist relativ einfach. Doch wie kommt man an die Daten wieder heran?
Da bup intern die git-Struktur verwendet, bei der jedes Backup über eine eindeutige CommitID auffindbar ist, wird für das Wiederherstellen eines Datenstromes ebendiese Nummer benötigt. Zum Auflisten dieser Nummern für das oben angelegte tar-Backup dient das
git-Programm selbst:
$ GIT_DIR="/tmp/b" git log "tar-Test"
Jede Sicherung wird im git-Protokoll mit CommitID, dem Ersteller des Backups sowie dem Zeitpunkt der Sicherung vermerkt. Zum Auslesen dient das Kommando join, dem die CommitID übergebenen wird:
$ bup -d /tmp/b join c9242bd6bb9cfd9c285f01ebb0dcdacf0c620038 | tar xv
Auf einzelne Dateien in bup kann man mittels des Kommandos fuse via beliebiger Dateimanager lesend zugreifen:
$ mkdir /tmp/mountpunkt $ bup -d /tmp/b fuse /tmp/mountpunkt
Möchte man dem FUSE-Modul beim Arbeiten zusehen, so erweitert man den Aufruf nach fuse noch um -f. Anschließend kann man im Dateimanager /tmp/mountpunkt als Adresse angeben und Dateien aus dem Archiv heraus kopieren.
Um den Zugriff über FUSE zu beenden und bup aus dem Verzeichnis auszuhängen, genügt:
$ fusermount -u /tmp/mountpunkt
Der Zugriff über den Webbrowser geschieht ähnlich:
$ bup -d /tmp/b web
Der bup-Webserver lauscht nun an Port 8080 und nimmt Verbindungen entgegen. Im Browser gibt man in der Adresszeile http://127.0.0.1:8080 an und kann dann Dateien aus bup herunterladen. Den Server beendet man nach getaner Arbeit über die Tastenkombination Strg + C.
Von der Kommandozeile kann man natürlich auch seine Backups wiederherstellen. Hierzu dient das bup-Kommando restore. Dieses benötigt zusätzlich zum Namen des Backup-Satzes auch noch das Datum der Sicherung. Möchte man die letzte Sicherung wiederherstellen, so lautet das Datum latest.
Zum Auflisten aller Sicherungszeitpunkte des Backup-Satzes datei-Test dient:
$ bup -d /tmp/b ls datei-Test | sort -r
Der folgende Einzeiler stellt schließlich alle Dateien und Verzeichnisse aus datei-Test vom Datum 2012-04-23-171250 im aktuellen Verzeichnis wieder her:
$ bup -d /tmp/b restore "/datei-Test/2012-04-23-171250/"



