Bekanntlich habe ich ja einen kleinen Server laufen, der als Basis eine MSI WindBOX II hat. Dieser kleine, feine Rechner ist passiv gekühlt und hat dank mobilem Atom-Chipsatz und entsprechendem Atom-Prozessor einen äußerst niedrigen Energieverbrauch. So läuft der kleine munter seit mehr als 1,5 jahren Non-Stop ohne je ein Problem verursacht zu haben.

Durch die flache Bauweise ergibt sich allerdings ein Problem: Es ist nur eine Festplatte verbaut, die auch noch relativ klein ist mit ihren 160GB.

Das alleine wäre ja noch kein Problem, denn als Webserver etc. muss die WindBOX keine großen Datenmengen zur Verfügung stellen, die diese 160GB sprengen würden. Das Problem ist vielmehr das schlechte Gefühl, das mich immer beschlichen hat, was mit meinen Daten ist, falls die Festplatte doch mal das Zeitliche segnen würde. So habe ich mich kurzerhand dazu entschlossen eine 2,5 Zoll Festplatte im externen Gehäuse an einen der vier USB-Ports zu hängen und die Daten dort als Backup auszulagern.

Das Backup kann man per Hand machen, z.B. jede Woche, aber das wäre nicht nur umständlich, sondern auch unsicher. Zum einen kann man es mal vergessen oder keine Zeit haben und zum anderen ist ein Wochenrhythmus für ein Backup etwas wenig.

Um unter Linux Backups zu fahren, die inkrementell gemacht werden, zwingt sich einem fast automatisch das Kommandozeilen-Tool rsync auf.

Mit rsync kann man viele nette Dinge machen, darunter auch Backups über ssh und dergleichen. Ich benutze rsync jedoch nur, um einmal täglich ein Backup von verschiedenen Ordnern auf die externe Platte zu schieben. Das ganze natürlich inkrementell, was den Vorteil hat, dass nur Dateien kopiert werden, die eine neuere Version haben oder auf dem Backup-Pfad noch nicht existieren.

Für diesen Zweck habe ich mir ein Skript geschrieben, das ich unter /etc/rsyncbackup.sh abgelegt habe und folgenden Inhalt hat:

#!/bin/sh
rsync -a /var/lib/mysql/ /media/extern/Backup/mysql
rsync -a /var/www/ /media/extern/Backup/www
rsync -a /var/spool/cyrus/mail/m//user/musteruser/ /media/extern/Backup/mail/mail
rsync -a /var/lib/cyrus/ /media/extern/Backup/mail/db
rsync -a /etc/ /media/extern/Backup/etc

Die Pfade können natürlich entsprechend angepasst und erweitert werden.

Der Befehl rsync -a besagt nichts anderes, als dass rsync alles kopieren soll, inklusive der Benutzerrechte. Weitere Infos zu rsync findet man auf der entsprechenden rsync-Ubuntuusers-Seite.

Die erste Zeile meines Skriptes kopiert die MySQL-Datenbank in den Backup-Pfad des externen Laufwerkes. Die zweite Zeile macht das selbe mit dem Webserver-Ordner des Servers. Die dritte und vierte Zeile sichert zum einen die Mails des Cyrus-Servers und zum anderen dessen Datenbank. Zum Abschluss sichert die letzte Zeile noch den kompletten /etc/-Ordner des Servers, in dem alle wichtigen Skripte (v.a. die von mir angepassten) liegen.

Dieses Skript liefert uns den Mechanismus zum Sichern unserer Dateien, jedoch noch keine zeitgesteuerten Aktionen. Deshalb erweitern wir mit nachfolgenden Befehlen noch die crontab, damit das Skript jeden Tag um 04:00 Uhr morgens ausgeführt wird.

Aufruf der crontab:

sudo crontab -e

Eintrag für das tägliche Ausführen des Skriptes um 04:00 Uhr:

0 4 * * *       sh /etc/rsyncbackup.sh > /dev/null 2>&1

Damit können wir beruhigt sein, dass alle wichtigen Dateien des Servers einmal täglich gesichert werden. Natürlich kann man das Skript beliebig erweitern und z.B. auf die externe Platte sichern und danach auch noch auf eine NAS im Netzwerk. Dank ssh kann rsync selbst über das Internet verschlüsselt auf entfernte Server sichern, falls man dies wünscht.