Das Thema Datensicherung

Hinweis:
Diese Seite gibt meinen Wissensstand von ca. 2014 wieder und sollte heutzutage nicht mehr als Blaupause für das Anlegen eines Fileservers genutzt werden. Für eine Anleitung, die erst später veraltet sein wird, bitte die übergeordnete Seite betrachten. ;-)

Bis jetzt haben wir uns viel Mühe gegeben, einen Single Point Of Failure zu bauen: wenn die Festplatte kaputt geht, die Passphrase vergessen wird oder sich der Admin irgendwo vertut und die falsche Partition löscht sind alle Daten futsch. Um das zu vermeiden sind regelmäßige Backups das Mittel der Wahl.

Weil wir uns ja Mühe geben, dass nicht jeder die Daten lesen kann, ist es nur konsequent dies bei der Backup-Strategie ebenfalls zu berücksichtigen. Die Daten sollten also nie im Klartext das System verlassen. Ich verwende für meine Backups normalerweise GnuPG mit symmetrischer Verschlüsselung. Allerdings unterstützt GnuPG diese nicht im Batch-Modus. Deshalb verwendet das folgende Skript die "normale" asymmetrische Verschlüsselung mit meinem öffentlichen GnuPG-Key.

#!/bin/sh

BASEDIR=/mnt/
BACKUP=backup/backup_`date "+%Y_%m_%d"`
GPG="gpg --batch -e -r felix"
ISO="genisoimage -r -quiet -o $BASEDIR$BACKUP.iso $BASEDIR$BACKUP"

FILES=files/
GIT=git/
SVN=svn/

echo "Create working directory"
echo "=> $BASEDIR$BACKUP"
mkdir -p $BASEDIR$BACKUP

echo "Archive files from $FILES"
mkdir -p $BASEDIR$BACKUP/files
for path in $BASEDIR$FILES*
do
        THIS=`basename $path`
        TAR="tar cf - -C $BASEDIR$FILES $THIS"
        echo " * $THIS"
        $TAR | $GPG > $BASEDIR$BACKUP/files/$THIS.tar.gpg
done

echo "Archive GIT repositories"
mkdir -p $BASEDIR$BACKUP/git
for path in $BASEDIR$GIT*
do
        THIS=`basename $path`
        TAR="tar cf - -C $BASEDIR$GIT $THIS"
        echo " * $THIS"
        $TAR | $GPG > $BASEDIR$BACKUP/git/$THIS.tar.gpg
done

echo "Archive SVN repositories"
mkdir -p $BASEDIR$BACKUP/svn
for path in $BASEDIR$SVN*
do
        THIS=`basename $path`
        DUMP="svnadmin dump --quiet $path"
        echo " * $THIS"
        $DUMP | $GPG > $BASEDIR$BACKUP/svn/$THIS.dump.gpg
done

echo "Make ISO image"
echo "=> $BASEDIR$BACKUP.iso"
$ISO

echo "Clean up working directory"
rm -rf $BASEDIR$BACKUP

Folgende Anpassungen sind notwendig:

Zunächst werden alle Einzelteile eingepackt und in einem Verzeichnis abgelegt, dessen Name nach dem Schema "backup_YYYY-MM-DD" gebildet wird. Die Dateien aus dem Verzeichnis files/ werden direkt mit tar eingepackt und mit GnuPG verschlüsselt. Ebenso wird mit den Git-Repositories verfahren. Bei den SVN-Repositories hingegen wird mit svnadmin ein Dump angelegt. Während tar die Dateien direkt und unverändert archiviert, wandelt svnadmin dump die Repositories in ein textbasiertes Format um, das später mit svnadmin load wieder geladen werden kann. Dies bietet einen guten Schutz vor inkompatiblen Repository-Formaten, wie sie manchmal bei größeren Versionssprüngen von Subversion auftreten.

Anstatt alle Dateien bzw. alle Repositories in ein großes Backup zu werfen, legt das Skript für jedes Verzeichnis auf oberster Ebene bzw. jedes Repository ein eigenes Archiv an. Das erleichtert das spätere Durchsuchen des Backups gewaltig und hat eigentlich nur den Nachteil, dass für einen Außenstehenden die Namen sichtbar werden. Am Ende wird aus dem Verzeichnis ein ISO-Image nach dem Schema "backup_YYYY-MM-DD.iso" gebildet und das Arbeitsverzeichnis gelöscht. Das ISO-Image kann dann per FTP runtergeladen und auf einem anderen Rechner archiviert oder auf eine CD/DVD gebrannt werden.

Selbstredend ist es wichtig, dass der Private Key für das Entschlüsseln des Backups sicher verwahrt wird.


Zurück zur Hauptseite