Backup Strategie

Aus Bluelupo's Wiki
Wechseln zu: Navigation, Suche

Zweck einer Backupstrategie

Für den Fall der Fälle das vielleicht einmal wichtige Daten durch einen Festplattendefekt oder durch versehentliches Löschen vernichtet werden ist eine strategisches Backupverfahren immnes wichtig. Nur so kann man den Datenverlust ganz vermeiden oder auf ein Minimum beschränken.


Welche Verfahren eines Backups werden hier eingesetzt

Da ich ein System mit dem Logical Volume Manager (LVM) aufgesetzt habe bietet sich eine zweistufige Sicherung an, eine partitionsbezogene und eine dateibezogene Sicherung.

Partionsbezogene Sicherung

Die Sicherung einzelnen Partitionen, sprich Logiacl Volumes (LV), werden via des LVM Snapshotverfahrens gesichert. Ein Snapshot eines Logical Volumes wird erzeugt durch eine Kopie des im Hauptspeicher befindlichen LV's. Dies kann in wenigen Sekunden erstellt werden, d.h. somit besteht kein Problem mit offenen Dateien die eine normale Sicherung evtl. inkonsistent machen würden.

Dieser Snapshot kann dann ganz gewöhnlich via Diskdump (Kommando dd) auf ein ein Backupmedium gesichert werden. Von allen LV's bzw. Dateisystemen, wie /, /boot, /home, /opt, /tmp, /usr und /var werden auf diese Art und Weise Sicherungen per Script täglich per cronjob ausgeführt. Um Platz auf dem Backupmedium zu sparen komprimiere ich die jeweiligen Backupsätze noch per pbzip2 mit maximaler Kompression.

Das Backupscript erstellt täglich ein Satz von Diskdumps der in einzelnen Verzeichnissen aufbewahrt wird. Um eine ausreichend lange Wiederherstellungszeit der Daten zu geährleisten halte ich dazu 10 Versionen vor. Zuätzlich wird, ebenfalls per Script, einmal im Monat ein Backupsatz in einen Archivierungsverzeichnis auf einer externen Festplatte abgelegt. Somit sind am Ende eines Jahres 12 Versionen (Januar bis Dezember) auf dem externen Backupmedium plus maximal 10 Tagessicherungen auf dem internen Backupmedium (zweite zusätzliche Festplatte) vorhanden.

Dateibasierte Sicherung

Der dateibasierte Backup ist ein zusätlicher Schutz vor Datenverlust um ggf. einzelne Dateien eines Backups wieder herzustellen. Diese führe ich mit dem Tool rsnapshot durch, das sehr einfach zu konfigurieren und zusätzlich für Remotesicherung geeignet ist (mit ssh). Mit rsnapshot sichere ich ausgewählte Verzeichnisse, die mir besonders wichtig sind, ebenfalls mit einen selbst erstellten Script täglich per cronjob. rsnapshot hat ein ausgefeiltes platzsparendes Ablagekonzept der Sicherungen mit Hardlinks verwirklicht. Die Sicherungsläufe mit rsnapshot sind dreistufig gegliedert.


  • tägliche Sicherung von Montag bis Sonntag daliy.0 - daily.6 (7 Backups per Woche)
  • Wochensicherung jeweils am Sonntag weekly.0 - weekly.3 (4 Backups per Monat)
  • Monatssicherung jeweils am monatsersten monthly.0 - monthly.11 (12 Backups per Jahr)


Die Anzahl der Sicherungen ist somit beschränkt, da ich lediglich 7 Tages-, 4 Wochen- und 12 Monatsbackups vorhalte.

Wie wird im Detail gesichert

Backup erstellen

Als erstes erstellt das via cronjob gestartete Script run_lvmsnap.sh einen Satz von Diskdump-Images von jeden Logical Volume, die in einen neuen Verzeichnis (Name: JJJJ-MM-TT-hhmm) unterhalb von /mnt/back/diskdump angelgt werden. Zusätzlich wird noch der Master-Boot-Record der Bootplatte gesichert und ebenfalls in diesem Verzeichnis abgelegt. In der Datei metadata.txt werden eine Reihe von Kommandoausgaben geschrieben um zusätzlich Informationen zum System parat zu haben.

Evtl. anfallende Fehlermeldungen werden in der Logdatei errorlog.txt festgehalten. Um die Integrität der Diskdumps überprüfen zu können sind in der Datei all_md5sums.txt die MD5 Prüfsummen hinterlegt.

Ein typischer Backupsatz sieht wie folgt aus:

# /mnt/backup/diskdump/2010-11-21-1938# ls -1
all_md5sums.txt
errorlog.txt
LVboot-20101121_1938.dd
LVhome-20101121_1938.dd
LVopt-20101121_1938.dd
LVroot-20101121_1938.dd
LVusr-20101121_1938.dd
LVvar-20101121_1938.dd
metadata.txt
sdaMBR-20101121_1938.dd


Backupdaten komprimieren und löschen

Mit zweiten Shellscript run_compress_dd.sh können die die oben erstellten komprimiert werden um Plattenplatz zu sparen. Ebenso sind das Löschen und Archivieren (auf externen Datenträger) der Bakupsätze möglich.

Mit dem Aufruf....

# run_compress_dd.sh -c10 -l9 -s

...werden 10 Versionen eines Backupsatzes aufgehoben (Option -c10) und alle unkomprimierten Diskdumps mit der höchsten Kompressionsstufe (Option -l9) erstellt (Option -s). Die Kompressionstufen sind mit denen von gzip (1-9) identisch. Als Packer wird das Tool pbzip2 verwendet, das im Gegensatz zu bzip2 das System während des Scriptlaufes nicht lahmlegt. pbzip2 verteilt die Last gleichmäßig auf alle vorhanden Prozeesoren, ansonsten verhält es sich wie bzip2.


Backupdaten nur löschen

Will man nur Backupsätze löschen kann man dies mit dem folgenden Aufruf tun.

# run_compress_dd.sh -c10 -d

Es werden wieder 10 Versionen gehalten und die überzähligen Backup's gelöscht (Option -d).


Backupsatz archivieren

Um monatlich den ältesten Backupdatensatz auf eine externen USB-Disk zu archivieren (verschieben), kann das dies so realisiert werden (Option -m).

# run_compress_dd.sh -m


Dateibasierte Sicherung starten

Die dateibasierte Sicherung (run_rsnapshot.sh) aller meiner System (Remote via SSH) wird täglich um 19:45 Uhr durchgeführt und auf einer externen USB-Festplatte abgelegt. Am Sonntag um 19:50 Uhr wird zusätlich ein Wochenbackup angestoßen, ebenso am Monatsersten um 19:55 Uhr ein Monatsbackup.

Scriplistings

crontab Einträge

Die nachfolgenden Einträge für einen kompletten partitions- und dateibezogenen Backup sind in der root crontab einzutragen.

# LVM Snapshot täglich erstellen
38 19 * * * /usr/local/scripts/run_lvmsnap.sh -s
#
# alle Backupsaetze zweimal täglich komprimieren und zu alte Versionen loeschen (10 Versionen, staerkste Kompr.)
15 09,15 * * 2,3,4,6,7 /usr/local/scripts/run_compress_dd.sh -c10 -l9 -s
#
# alte Backupsaetze zweimal täglich loeschen (10 Versionen behalten)
58 8,19 * * * /usr/local/scripts/run_compress_dd.sh -c10 -d 
#
# aeltesten Backupsatz auf externe Disk verschieben (monatlich zwischen dem 5. und 11.)
50 11 5-11 * * /usr/local/scripts/run_compress_dd.sh -m
#
# Dateisicherung via rsnapshot (täglicher, wöchentlicher und monatlicher Lauf)
45 19 1 * * /usr/local/scripts/run_rsnapshot.sh -b monthly
50 19 * * 7 /usr/local/scripts/run_rsnapshot.sh -b weekly
55 19 * * * /usr/local/scripts/run_rsnapshot.sh -b daily

Partitionssicherungsscript run_lvmsnap.sh

Listing run_lvmsnap.sh

Komprimierungs- und Löschscript run_compress_dd.sh

Listing run_compress_dd.sh

Dateisicherungsscript run_rsnapshot.sh

Listing run_rsnapshot.sh


Konfigurationsdatei rsnapshot.conf

Listing rsnapshot.conf