Tutorial: Einfaches Backup von Debian mit Webmin, CurlFtpFS, Dump und Tar

Ich möchte in dieser Anleitung kurz und knapp darstellen, wie man einen Linux-Rechner mit Hilfe eines Backup-Systems aus Webmin Curlftpfs, Dump und Tar sichert.

Gesichert wird auf einem FTP-Verzeichnis. Webmin sollte bereits installiert sein, da diese GUI m.E. die beste Methode einer professionellen Administration bietet. Kommandozeilenpuristen mögen mir verzeihen.

Gesichert werden einzelne Verzeichnisse inklusive Unterverzeichnisse und komplette Datenbanken, hier anhand von MySQL beispielhaft dargestellt. Backups sind ein Muss. Jedes weitere Wort erübrigt sich. Als Inspiration dienten mir die Artikel “Filesystem Backup” und “Automatische Backups mit Linux“.

Die einzelnen Komponenten in der Übersicht

Webmin ist ein freies Programmpaket zur Verwaltung eines Unix-Rechners aus der Ferne mit Hilfe eines HTML-Browsers. [Wikipedia]

Curlftpfs – Ein Linux Filessystem, das es ermöglicht entfernte FTP-Verzeichnisse lokal einzubinden. Somit kann man über das Betriebssystem direkt in ein FTP-Verzeichnis schreiben oder davon laden, ohne den Umweg über einen FTP-Client. Wir werden unsere Backup-Dateien damit direkt in ein FTP-Verzeichnis kopieren.

Tar ist der Name eines im Unix-Umfeld sehr geläufigen Archivierungsprogramms. Tar bietet die Möglichkeit, Dateien sequenziell in eine einzige Datei zu schreiben bzw. Dateien aus selbiger wieder herzustellen. Man kann tar-Dateien komprimieren, um ihre Größe zu reduzieren.

Dump/Restore ermöglicht das Sichern des Filesystems. Es werden also nicht nur die einzelnen Dateien gesichert, sondern auch die dazugehörigen Zugriffsinformationen (“ACL Access Control List“) über Rechte, Besitzer etc. Mit Tar allein kann man diese Metadaten nicht sichern.

Installation

Webin Modul

Das Modul zur Sicherung sollte schon mit Webmin installiert worden sein. Wenn nicht, können Sie es nachinstallieren unter Webmin|Webmin Configuration|Webmin Modules.  Dort installieren Sie dann bitte das Modul “fsdump“.

Sie müssen auch das Modul selbst konfigurieren, um automatische Datumsangaben nutzen zu können. Das geschieht unter Filesystem Backup|Modul config. Aktivieren Sie dort den Punkt “Do strftime substitution of backup destinations?

Mit dieser aktivierten Funktion können wir später Datums- und Zeitangaben mit in die Dateinamen der Sicherung einbinden, was absolut unverzichtbar ist.

Curlftpfs

Mit Hilfe von Curlftpfs werden wir jetzt ein entferntes FTP-Verzeichnis permanent in unser Filesystem aufnehmen, damit es ganz einfach die Backup-Dateien aufnehmen kann. Wir installieren Curlftpfs über die Konsole.

apt-get install curlftpfs

Nun legen wir ein leeres Verzeichnis an, das wir als Einhängepunkt (“Mount Point) für Curlftpfs nutzen.

mkdir /mnt/ftpbackup

Damit die Verbindung zum entfernten FTP-Verzeichnis immer hergestellt wird, sobald das System startet – auch wenn Linux-Server meist immer laufen -, muss die Datei “/etc/fstab” angepasst werden. Passen Sie folgende Zeile an oder fügen Sie sie hinzu:

curlftpfs#{username}:{password}@{host} /mnt/ftpbackup fuse rw,allow_other,uid={userid} 0 0

wobei {username} = FTP Username, {password} = FTP Passwort, {host} = FTP Host/IP (Pfadangaben auf Zielserver möglich) und {userid} = ID eines lokalen Nutzer (bspw. root, backupadmin oder 1001).

Eine mögliche Zeile wäre bspw.

curlftpfs#ftp01:GeHeim3@12.34.56.78 /mnt/ftpbackup fuse rw,allow_other,uid=backupadmin 0 0

Mit mount wird dann das FTP-Verzeichnis eingebunden:

mount /mnt/ftpbackup

Am besten probiert man gleich mal aus, ob man in dem Verzeichnis die Dateien aus dem entfernten FTP-Verzeichnis sehen kann, so denn welche dort vorhanden sind.

ls -l /mnt/ftpbackup

Von nun an können wir in das Verzeichnis /mnt/ftpbackup schreiben und die Dateien landen automatisch in dem entfernten FTP-Verzeichnis.

Dump/Restore

Wie schon erwähnt, können wir mit Tar allein keine Informationen zu den Rechten oder Inhabern einer Datei oder eines Verzeichnisses mitspeichern. Wer nach Zurückspielen einer Sicherung nicht noch mit chgrp, chown und chmod hantieren möchte, der kann mit Dump/Restore auch diese Informationen (ACL) sichern.

Sofern noch nicht geschehen stellt sich die Installation von dump/restore als einfach heraus.

apt-get -y --force-yes -f install dump

Konfiguration

Wenn bisher alles geklappt hat, versuchen wir uns jetzt einmal an einer einfachen Sicherung des kompletten Home-Verzeichnisses. Das Modul befindet sich unter System|Filesystem Backup.

Einfaches Verzeichnis sichern

Es bietet sich an, gleich das komplette User Verzeichnis (hier /home/ zu sichern)

Klicken Sie in webmin auf System|Filesystem Backup und tragen Sie neben “Add a new backup of directory” /home/ ein. Der Haken bei “In TAR format” wird gesetzt. Es sollte genügen dieses Verzeichnis mit Tar, also ohne ACL-Informationen zu sichern. Wenn nicht, dann entfernen Sie bitte den Haken, dann wird das Verzeichnis kommplett mit allen Metadaten gesichert.

Im nächsten Schritt richten Sie noch wohin gesichert werden soll. Wir sichern natürlich auf unser “gemountetes” Verzeichnis.

/mnt/ftpbackup/home_%Y%m%d_%H%M.tgz

Mit den Platzhaltern für die Datumsangaben erhält man bspw. ein Backupfile mit Namen “home_20100327_2355.tgz”. Diese Sicherung erfolgte also am 27.03.2010 um 23:55 Uhr. Man sollte die Uhrzeit nicht vergessen. Denn würde ein Backup zu lange benötigen und über Mitternacht hinaus schreiben, würde es ohne Uhrzeitangabe den selben Namen erhalten wie das folgende Backup, was zu Komplikationen führen kann.

Tragen Sie unbedingt eine E-Mail-Adresse für den Erfolgs- oder Misserfolgsfall ein. Sie können dann in ihrem E-Mail-Client auf die Schlüsselwörter “Error” oder “Warning” filtern, um sich automatisch über eine fehlerhafte Sicherung zu informieren.

Zum Schluss kann man wie unter Webmin bereits bekannt, den Zeitplan festlegen, wann die Sicherung ausgeführt werden soll. Man kann hier auch angeben, das eine Sicherung automatisch nach einer anderen, erfolgreichen Sicherung starten soll. Das ist sehr praktisch, da sich so keine zwei Sicherungen in die Quere kommen können.

Datenbank sichern per Dump

Die MySQL-Datenbank muss zunächst als File exportiert werden, bevor man dieses File (sog. “Datenbank-Dump”) sichern kann. Dazu dient das Tool mysqldump (nicht zu verwechseln mit oben genutzten dump für das Filesystem) . Ich benutzte dazu folgendes Skript mysqlbackup_dump_create.

#! /bin/sh
# Parameter
# $1 = dbusername
# $2 = dbpasswort

DBASELIST=`mktemp`
mysqlshow -p$2 -u $1 | awk '{print $2}' | grep -v Databases | sort >$DBASELIST
# where to put the files
cd /var/MySQL_dump/
prefix="MySQL_dump_"
datum=`date +%Y%m%d_%H%M`
ordner=$prefix$datum
echo "Creating MySQL-Dump inside "$ordner
mkdir -p $ordner
cd $ordner
for x in `cat $DBASELIST`; do
 echo $x;
 mysqldump --opt -p$2 -u $1 $x >$x.sql;
done;
echo "done"

Bevor wir dieses Skript ausführen, muss natürlich noch ein Zielverzeichnis angelegt werden:

 md /var/MySQL_dump

Beim Aufruf werden zwei Parameter übergeben: Ein MySQL-Username und das zugehörige Passwort. Man sollte fürs Backup einen Extra-User anlegen, der nach Möglichkeit nur Leserechte, aber dann auch für alle Datenbanken hat. Beispiel:

/home/juergen/mysqlbackup_dump_create dbbackup MeinPasswort

Diese Zeile fügen wir dann in den Backup Optionen in die Zeile “Command to run before backup” ein. Damit das Verzeichnis mit den einzelnen Datenbank-Dumps nicht vollläuft, löschen wir es nach jedem erfolgreichen Backup wieder ab. Dazu fügen wir in die Zeile “Command to run after backup” folgendes ein:

 cd /var/MySQL_dump/;rm -r *

Ein Backupjob für MySQL-Datenbanken kann folgendermaßen aussehen:

Kontrolle.

Nur eines ist schlimmer als kein Backup zu haben, ein kaputtes Backup. Darum sollte man immer dann, wenn man an den Einstellungen etwas ändert, testen, ob Backups geschrieben werden und ob diese auch zu gebrauchen sind.

Es versteht sich von selbst, dass man ab und an prüft, ob die Dateien lesbar und wieder zu entpacken sind.

Die MySQL-Sicherung kann man am besten prüfen, indem man sich eine virtuelle Testumgebung aufsetzt. Die kann man einfach am heimischen Desktop anlegen und dort in eine “nackte” MySQL-Installation das Dump einspielen.

Weitere Tipps

Ziel sollte immer ein physikalisch und am besten auch geographisch getrenntes Medium sein. Auf jeden Fall muss das Backup auch anders zugänglich sein als nur über das zu sichernde System selbst, da man im Katastrophenfall auch seine Sicherungen verloren hätte.

Wer auf Nummer sicher gehen will, kann die erzeugten Verzeichnisse auch mit Hilfe von GPG verschlüsseln. Dies ist anzuraten, wenn Die Sicherungen auf einem externen, geteiltem Server liegen.

Wer lieber inkrementelle Sicherungen durchführen möchte, der aktiviert “Just add new files to archive”. Allerdings funktioniert das nicht zusammen mit komprimierten Archiven.

Aus Erfahrung würde ich sagen, dass man wichtige Sachen täglich komplett sichern sollte. Bei Platzproblemen empfiehlt es sich, die ältesten Sicherungen entweder auf Band oder DVD zu archivieren und aus dem FTP-Verzeichnis zu entfernen.

Alte Sicherungen löschen

Der Befehl

find /mnt/ftpbackup/ -mtime +10 -type f -exec /bin/rm {} \;

löscht alles, was im Verzeichnis /mnt/ftpbackup/ älter als 10 Tage ist. Diesen Eintrag kann man per cronjob automatisieren oder in einem der Backup Jobs ausführen lassen.

Abschließend würde ich mich wieder einmal über jedes Lob oder jede Anregungen und jeden Fehlerhinweis freuen.

Filesystem Backup

8 Gedanken zu „Tutorial: Einfaches Backup von Debian mit Webmin, CurlFtpFS, Dump und Tar

  1. Sven Teichmann

    Hallo,

    nachdem ich nun von einem V-Server auf einen Dedicated Server umgestiegen bin, musste ich mich auch mit dem Thema Backup (möglichst via Webmin, weil ich das sowieso schon nutze) beschäftigen.

    Ich hatte es anfangs über den direkten Weg versucht, d.h. in Webmin das Backup so eingestellt, dass es via FTP auf einen entfernten Host gemacht wird. Funktioniere eigentlich recht gut, allerdings ist es schon sehr kompliziert gewesen, nach vorhandenen Backups zu sehen. Hinzu kommt, dass es nicht so einfach wäre, Backups, die älter sind als 10 Tage zu löschen. Das größte Problem ist gewesen, dass eine Komprimierung (egal ob gzip oder bzip2) immer dazu geführt hat, dass das Backup zerstört wird. Scheinbar ist die Methode über den FTP Client noch nicht so ganz ausgereift.

    Die hier genannte Methode ist wesentlich einfacher und später, wenn man einige Backups hat auch viel übersichtlicher, weil man sich die Backups ganz einfach mittels “ls -l /mnt/ftpbackup” anzeigen lassen kann.

    So macht das Erstellen von Backups richtig Spaß 🙂

      1. Sven Teichmann

        Jetzt ist mir erst aufgefallen, dass bei meinem Server die Uhrzeit falsch ersetzt wird. Die Datei ist zuletzt um 2:00 Uhr geändert worden (was auch mit der Zeit übereinstimmt, wo die Sicherung durchgeführt werden soll). Die Zeit, die im Dateinamen steht, ist jedoch 0300, also 3:00 Uhr.

        Eine Idee, woran das vielleicht liegen könnte? Die Zeitzone, etc. ist richtig eingestellt, ich habe also keine Idee, woran das liegen könnte.

        1. Juergen Schulze Beitragsautor

          Ha! Viel Spaß beim Suchen.
          Die glatte Differenz von einer Stunde ist ein untrügliches Zeichen für falsch eingestellte Zeitzonen. UNFASSBAR dass man 2012 immer noch den gleichen Scheißstress hat Datum und Uhrzeit wie anno 1970. Weltweit gehen bestimmt 20% aller Programmierer-Mann-Stunden dafür drauf.
          Irgendwo auf dem Weg wird halt irgendwo ein Schalter nicht richtig gesetzt.
          Ich würde mich nicht allzusehr darüber aufregen, denn schließlich handelt es sich nur um Backups. Wichtiger ist, dass sie funktionieren und komplett sind.

          1. Sven Teichmann

            Ich hab das Problem mehr oder weniger per Zufall gelöst. Die Systemzeit und die Hardwarezeit hatten einen Abstand von 2 Stunden (und ein paar Sekunden) weshalb ich die Zeit mit einem Zeitserver synchronisieren lies. Nun stimmt auch das.

            Eine andere Frage: funktioniert das mit dem automatischen Mounten bei dir? Ich habe die Zeile genau so, wie sie sein muss in meine /etc/fstab eingetragen und den Server neugestartet (um das zu testen) und mein Backupspace war nicht mehr bzw. wurde nicht automatisch gemountet.
            Gibt es da noch irgendwas zu beachten? Könnte es vielleicht sein, dass er versucht zu mounten wenn noch keine Internetverbindung besteht?

          2. Juergen Schulze Beitragsautor

            Zeitserver anzapfen ist natürlich auch eine gute Lösung.
            Was das remote mounten betrifft ist deine Vermutung wohl richtig oder zumindest die naheliegenste:
            1. was sagen die Logs?
            2. gibt es einen Parameter in der Konfiguration, der erstmal auf Verbindung checkt?

  2. Sven Teichmann

    Nun funktioniert es. Ich habe noch die Option “_netdev” hinter die ganzen anderen Optionen gehängt.

    Danke für die Hilfe

  3. Sven Teichmann

    Was mir heute noch bezüglich der Backups aufgefallen ist, dass sowohl Benutzername, als auch Passwort im Klartext in der Prozessliste auftauchen (und natürlich auch in der fstab). Gibt es da eine Möglichkeit, das zu verhindern?

Kommentare sind geschlossen.