Monatliches Backup auf DVD unter Linux

Wer wert auf eine lückenlose Datensicherung legt, gerade in Hinblick auf Datenbank Backups (cold/hot), der möchte von jedem Tag im Jahr den Datenbestand, insbesondere der Iterimdaten, rücksichern (recovern) können. Da nicht immer ein physischer Zugriff auf den Server erfolgen kann (einlegen/wechseln des Backupmediums), muss man sich andere Backup-Strategien überlegen. Folgendes Szenario wäre ein möglicher Ansatz: Es existieren ein oder mehrere Webserver mit unterschiedlichen Standorten. Mit Rsync (s. Artikel Rsync – Synchronisation leicht gemacht), Reoback (s. Artikel REOBack Backup) und Master/Slave MySQL Replikation (s. Artikel MySQL Replikation / Master und Slave in 4 Schritten) synchronisiert man diese Webserver mit einem “kleinen” Linux Server daheim. Man zieht sozusagen alle Applikations- und Interimdaten auf ein System, auf das man physischen Zugriff hat, zusammen. Und an dieser Stelle steigen wir in die folgende Anleitung für ein monatliches Backup auf DVD ein.

Was wird benötigt?

1. Linux Kernel >= 2.6
2. dvd+rw-tools
3. ein Backupordner mit Symlinks auf die Backupverzeichnisse
4. ein Cronjob auf eine ausführbares Shell-Script
5. ein Shell-Script für das Anstossen des Brennvorgangs

Zu 1.: Warum Linux Kernel >= 2.6

Unter der Kernel Version 2.6 wird ein IDE DVD Brenner als SCSI Gerät mit einer SCSI-Emulation angesprochen. Da dies etwas umständlicher ist und man schliesslich selbst das Derivat auf dem Heimserver bestimmen kann, empfehle ich ein Kernel >= 2.6 zu verwenden.

Zu 2.: dvd+rw-tools installieren

Mit
apt-get install -u dvd+rw-tools
installieren wir das benötigte Programm-Bundle um DVDs beschreiben zu können.

Zu 3.: Backupordner mit Symlinks auf die Backupverzeichnisse

Mit
mkdir ORDNERNAME
erstellen wir einen Ordner, welche die Symlinks auf die Backup-Verzeichnisse beinhalten wird.
Anschliessend erstellen wir mit
ln -s ZIEL LINKNAME
in diesem Ordner die Symlinks auf alle Verzeichnisse welche gesichert werden sollen. Warum Symlinks? Mit Symlinks ersparen wir uns die Daten – die bereits auf der Platte vorhanden sind – zu kopieren, des Weiteren sprechen wir wie durch Zauberhand immer die aktuellen Dateien an.

Zu 4.: Cronjob auf Shell-Script

Je nachdem wieviele Daten in einem gewissen Zeitraum zu erwarten sind, sollte der Cronjob im entsprechenden Intervall aufgerufen werden. Bsp. werden über 4,7 GB (normaler DVD-Rom, Vorsicht! Die Herstellerangaben für 1 GB entspricht 1000 MB und nicht 1024 MB, d.h. eine DVD-Rom kann also mit ca. 4,3 GB gefüllt werden) in einen Monat erwartet, sollte entweder der Cronjob in kürzeren Zeiträumen ausgeführt werden oder man gestaltet das Shell-Script so, dass die Datenmenge auf mehrere DVDs aufgeteilt wird oder man benutzt andere Medien (bsp. Dual-Layer-DVD mit ca. doppelter Kapazität im Vergleich zur einfachen DVD-Rom). In meinem Fall genügt ein monatliches brennen, also sehe der Cronjob folgendermaßen aus:
# m   h     dom    mon   dow   command
0     11      15    *     *     /usr/local/bin/dvdbackup.sh >> /var/log/burning-dvd-backup.log
Dieser Cronjob wird jeden 15ten im Monat um 11:00 Uhr ausgeführt und ruft das Script dvdbackup.sh auf. Mit >> /var/log/burning-dvd-backup.log leitet man die “grundlegende” Ausgabe des Scriptes in eine Log-Datei um. Warum ich hier von “grundlegende” Ausgabe spreche erläutere ich im nächsten Schritt.

Zu 5.: Shell-Script

Mit vi oder touch erstellen wir eine Textdatei namens “dvdbackup.sh”. Diese machen wir mit
chmod 755 dvdbackup.sh
ausführbar. Anschliessend kopieren wir folgendes Listing – mit entsprechenden Anpassungen – in die Textdatei:
#!/bin/bash
cat /dev/null > /var/log/burning-dvd-backup.log

echo "$(date '+%b %d %H:%M:%S') debian-mrs creating monthly backup dvd:"
echo "---------------------------------------------------------------------------------"

#image von symlink ordner erstellen
echo "creating iso backup image"
mkisofs -f -l -iso-level 4 -o /storage/tmpbackup.iso /storage/symbackupfolder/ >> /var/log/burning-dvd-backup.log 2>&1

isosize=`ls -al /storage/tmpbackup.iso | awk '{print $5}'`

if [ $isosize -lt 4697620480 ] ; then
        echo "burning iso backup image on dvd"
        growisofs -dvd-compat -Z /dev/hda=/storage/tmpbackup.iso >> /var/log/burning-dvd-backup.log 2>&1

        echo "eject dvd"
        eject
else
        echo "can't write iso backup image, because iso is to large"
fi

echo "remove iso backup image"
rm /storage/tmpbackup.iso

echo "---------------------------------------------------------------------------------"

Download dvdback.sh

dvdbackup.sh

Was macht das Script?
1. Mit cat /dev/null > /var/log/burning-dvd-backup.log leere ich die Log-Datei.

2. Die Ausgaben mit echo sind genau die Ausgaben die ich durch den Cronjob in die Log-Datei umleite.

3. Mit mkisofs -f -l -iso-level 4 -o /storage/tmpbackup.iso /storage/symbackupfolder/ >> /var/log/burning-dvd-backup.log 2>&1 erstellt man ein ISO-File namens tmpbackup.iso von dem erstellten Backup-Ordner, der wiederum durch die Symlinks die entsprechend zu sichernenden Ordner enthält. Die “spezielle” Ausgabe von mkisofs leite ich mit >> /var/log/burning-dvd-backup.log 2>&1 auch in die Log-Datei um. 2>&1 entspricht hierbei, dass alle Standardausgaben sowie Fehlermeldungen umge-”piped” werden.

4. Die erste if-Bedinung (if [ $isosize -lt 4697620480 ] ;) prüft die Größe des Images und vergleicht diese mit der maximalen Kapazität MEINER Rohlinge! Jeder DVD-Rohling ist unterschiedlich, mit atip kann man die freien Blöcke einer DVD ermitteln und mit 2048 Bytes (Blockgrösse) multiplizieren, nun hat man die maximale Kapazität der DVD in Bytes und ersetzt diese mit 4697620480.

5. Wenn das ISO-Image grösser als die maximale Kapazität meines Rohlings ist, wird der Brennvorgang abgebrochen, da ich nach oben noch ca. 500-800 MB Luft habe, ist das für mich die einfachste Lösung gewesen. Stattdessen kann man natürlich das ISO-Image mit split in mundgerechte Stücke zerteilen und hiervon wieder ISO-Images erstellen, die dann in einer Schleife nacheinander gebrannt werden (mit manuellen DVD Wechseln) oder man legt mehrere Backup-Verzeichnisse mit unterschiedlichen Symlinks an, um so bereits zu Beginn mehrere ISOs zu planen und anschliessend zu erstellen.

6. Passt das Image auf den Rohling, wird es nun mit growisofs -dvd-compat -Z /dev/hda=/storage/tmpbackup.iso >> /var/log/burning-dvd-backup.log 2>&1 gebrannt. Statt /dev/hda muss eventuell etwas anderes eingetragen werden, in meinem Fall ist das DVD Laufwerk über /dev/hda ansprechbar. Um den Gerätenamen herauszufinden, genügt ein Blick per vi in die /etc/fstab. Der zu indentifizierende Eintrag sollte so
<b>/dev/hda</b>        /media/cdrom0   udf,iso9660 user,noauto     0       0
oder ähnlich aussehen. cdrom0 oder ido9660 sind typischen Hinweise auf ein CD-Rom oder DVD-Laufwerk.

6. Abschliessend wird mit eject die DVD ausgeworfen und mit rm /storage/tmpbackup.iso das temporäre ISO-Image gelöscht.

Voila!

Hinweis

Diese Anleitung ist ein praktischer Leitfaden ohne Gewähr.

Weiterführende Literatur

empfehlenswert sind folgende Bücher:

Druckansicht


Autor: admin
Datum: Freitag, 27. Februar 2009 14:10
Trackback: Trackback-URL Themengebiet: Linux und mehr

Feed zum Beitrag: RSS 2.0 Diesen Artikel kommentieren

Kommentar abgeben