rsnapshot

Backups - diese leidige Sache ist leider im Falle des Falles ebenso überlebensnotwendig wie generell heikel und lästig. Regelmäßige Backups zu machen erfordert einiges an Disziplin und ist doch wichtig um bei einem Daten-GAU wieder dort weitermachen zu können, wo man aufgehört hat.

Um die optimale Backupstrategie wird viel gestritten, den Heiligen Grahl gibt es nicht. Spiegelt man seine Platten in einem RAID kann man zwar bei einem Ausfall vorübergehend ungestört weiterarbeiten, steht aber dumm da wenn ein wild gewordenes Shell-Script ganze Verzeichnishierarchien abgesäbelt hat. Macht man in regelmäßigen Zeitabständen Kopien der Datenbestände und hält auch noch mehrere dieser gleichzeitig für längere Zeit auf Vorrat, kann man zwar eine ganze Ewigkeit in die Vergangenheit blicken und versehentlich gelöschte oder geänderte Dateien wieder ausgraben, braucht aber ein Vielfaches an Speicherplatz und im Falle des Ausfalles hat man einige Tage bis Wochen Arbeit verloren.

Zumindest das Problem des Platzverbrauchs lässt sich etwas eindämmen: Bei "inkrementellen Backups" werden nur die seit dem letzten Backup veränderten oder hinzugefügten Dateien kopiert. Dadurch werden die Backups jedoch voneinander abhängig (das inkrementelle Backup basiert auf dem letzten vollständigen Backup) was nicht grade für die Robustheit des Systems zuträglich ist.

Weiterhin stellt sich die Frage, in welcher Form man die Dateien und Ordner speichern will. Spiegelt man die Festplatten auf Hardware-Ebene, muss man sich darum keine Sorgen machen. Hält man jedoch Kopien vor, hat man die Wahl: Kopiert man die Verzeichnisstruktur? Legt man ein .tar-Archiv an? Packt man dieses vielleicht unter Umständen noch in ein .tar.gz-Archiv? Letztere sind kleiner, brauchen jedoch beim Sichern und Wiederherstellen erheblich mehr Rechenleistung und somit mehr Zeit.

Das Paket "rsnapshot" hat eine ebenso einfache wie effiziente Lösung für diese Probleme parat. Es arbeitet auf Datei- und Ordner-Basis, erstellt also Kopien von Verzeichnishierarchien auf einer Backup-Partition. Die Dateien werden dabei weder in Archive gepackt noch komprimiert. Die Sicherung erfolgt in regelmäßigen Zeitabständen. Dabei werden nur die Dateien wirklich kopiert, die seit einem etwaigen vorherigen Backup hinzugefügt oder geändert wurden (inkrementelles Backup). Die übrigen Dateien werden aber nicht etwa ausgespart. Stattdessen macht "rsnapshot" Gebrauch von einem in der Computer-Welt einmaligen Feature: Hardlinks. Statt unveränderte Dateien in einem inkrementellen Backup erneut zu kopieren wird ein Link auf die bereits bestehenden Daten angelegt. Dieser unterscheidet sich nicht von dem Original-Verweis der Datei im vorherigen Backup auf die Daten. Wird später das zu Grunde liegende Backup gelöscht, bleiben die Daten trotzdem erhalten, weil noch der Hardlink des inkrementellen Backups auf sie verweist. Eine Unterscheidung zwischen "vollständigem" und "inkrementellem Backup" ist so weder nötig noch möglich; die Backups verlieren ihre Bindung untereinander, die Vorteile inkrementeller Backups (geringerer Speicherplatzbedarf) bleiben.

"rsnapshot" ist auch beim Remote-Backup entfernter über das Internet erreichbarer Server hilfreich. Dort muss als einzige Voraussetzung ebenso wie auf dem lokalen Rechner das Programm "rsync" installiert sein. "rsnapshot" greift dann via SSH auf den Remote-Host zu (es ist zweckmäßig, den Remote-Host so zu konfigurieren, dass der lokale Host sich via Zertifikaten ohne Passwort einloggen kann) und kopiert von dort die gewünschten Dateien und Ordner in das Backup-Verzeichnis. Auch hier werden nur die Dateien übertragen, die neu sind oder seit dem letzten Backup verändert wurden.

"rsnapshot" eignet sich hervorragend für automatisierte, Cron-gesteuerte Backups. Wie viele Versionen für eine angegebene Periode (hourly, daily, weekly, ...) behalten werden wird in der Konfigurationsdatei angegeben. Die Backups werden automatisch rotiert bis sie nach entsprechender Zeit automatisch gelöscht werden.

Unter Ubuntu installiert sich "rsnapshot" einfach über das gleichnamige Paket. "rsync" wird dabei automatisch mitinstalliert:

sudo apt-get install rsnapshot

Auf einem Remote-Host muss nur "rsync" installiert werden:

sudo apt-get install rsync

Anschließend wird "rsnapshot" über die Konfigurationsdatei "/etc/rsnapshot.conf" eingestellt. Detailierte Informationen über die einzelnen Parameter enthält die zugehörige Man-Page:

man rsnapshot

Eine Konfigurationsdatei könnte etwa so aussehen:

config_version	1.2

snapshot_root /backup/

cmd_cp /bin/cp
cmd_rm /bin/rm
cmd_rsync /usr/bin/rsync
cmd_ssh /usr/bin/ssh
cmd_logger /usr/bin/logger
cmd_du /usr/bin/du

interval weekly 4
interval monthly 3

verbose 3
loglevel 3

logfile /var/log/rsnapshot
lockfile /var/run/rsnapshot.pid

# LOCALHOST
backup /home/ localhost/
backup /etc/ localhost/
backup /usr/local/ localhost/
backup /var/ localhost/
exclude /var/tmp/***
exclude /var/cache/***

# SERVER
backup root@example.de:/var/ server/
backup root@example.de:/etc/ server/
backup root@example.de:/usr/local/ server/
backup root@example.de:/root/ server/
exclude /var/tmp/***
exclude /var/cache/***

In diesem Fall würde man einmal pro Woche "rsnapshot" wie folgt ausführen:

sudo rsnapshot weekly

Im Verzeichnis "/backup" würden dann vier wöchentliche und drei monatliche Backups abgelegt werden.

Tags: Linux