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:
genisofs
muss installiert sein. Es ist Teil des Pakets cdrkit
.
gpg --edit-key <name>
, Kommando "trust").
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.