Backups unter Debian GNU/Linux - Grundlagen und Beispiele

Dieses Howto beschäftigt sich mit Backups unter Debian GNU/Linux und bietet dafür Grundlagen und Beispiele. Der Schwerpunkt liegt dabei beim Serverbackup mit den Tools tar, rsync, nfs, DVD±RW und anderen.

Ziel dieses Howto ist es, das grundlegende Wissen zu erlangen, das für möglichst problemlose und sichere Backups im täglichen Betrieb benötigt wird. Die hier erläuterten Maßnahmen und Beispiele sollen als Basis dienen und zu eigener Kreativität motivieren.


Autor des Artikels ist Daniel Knabl (daniel [at] knabl [dot] com); der Text ist unter einer Creative-Commons-Lizenz freigegeben: Namensnennung-NichtKommerziell-Weitergabe unter gleichen Bedingungen 2.0 Deutschland

Feedback zu diesem Dokument ist natürlich willkommen, fachliche Fragen bitte an die Mailingliste (howto [at] lists [dot] debianhowto [dot] de), sonstige Fragen an den Autor Daniel Knabl (daniel [at] knabl [dot] com).

Contents

Grundlagen

Backups und das dafür notwendige Wissen sollten jedem Computerbenutzer ein Anliegen sein. Wer weiß schon, wann eine Festplatte den Geist aufgibt, wann ein böser Wurm oder ein Virus durchschlüpft oder irgendetwas anderes passiert, was wertvolle (einmalige) Daten beschädigt oder gar vernichtet.

Um ein Backup-Script regelmäßig auszuführen dient unter Debian (und allen anderen *nix-artigen Systemen) der Scheduler cron. Er ermöglicht zeitgesteuerte Ausführung von Befehlen.

Die grundlegende Konfiguration und Bedienung von cron ist in der Manpage gut dokumentiert. Daher hier nur einige nützliche Überlegungen:

  • einmal pro monat Full Backup auf DVD
  • einmal wöchentlich Full Backup auf entfernten Rechner
  • einmal täglich incremental Backup auf andere Platte/Partition

Diese Strategie wäre bereits sehr sicher, da sowohl auf einem Datenträger (DVD) als auch auf einem entfernten Rechner (zB ein gemieteter Rechner in einem Rechenzentrum) komplett vollständige Backups erzeugt werden, und zusätzlich täglich die Veränderungen in incremental Backups festgehalten werden.

Die Einträge in crontab könnten so aussehen:

   25 1    1 * *   root    test -x /usr/local/sbin/fullbackup.dvd.sh
   47 0    * * 7   root    test -x /usr/local/sbin/fullbackup.local.sh
   52 0    * * *   root    test -x /usr/local/sbin/backup.daily.sh

Unterschied Full und incremental Backup

Ein Full Backup (Vollständige Datensicherung) ist ein vollständiges Backup, es werden also alle Dateien gesichert, egal ob sie verändert wurden, oder nicht.

Ein Incremental Backup (inkrementelle Datensicherung) ist ein teilweises Backup, es werden nur Dateien gesichert, die ein bestimmtes Kriterium erfüllen. Als solches Kriterium verwendet man gewöhnlich “die Datei wurde seit dem letzten Backup verändert” oder “die Datei wurde seit X Tagen nicht mehr gesichert”.

Struktur - was wann wie wohin sichern

Da wir hier ein Debian-System als Grundlage verwenden, kann man sich sehr gut an den FHS, den Filesystem Hirarchy Standard, halten. Abhängig von einigen Fragen wird man schnell wissen, was zu sichern ist

  • Werden Programme selbst kompiliert?
  • Werden Pakete aus den Sourcen gebaut?
  • Verwende ich Pakete, für die keine Pakete (mehr) existieren?
  • Sichern Benutzer ihre Dateien selbst?
  • Gibt es gemeinsam genutzte Bereiche (Freigaben, /pub ...)

Abhängig von der Wichtigkeit der Daten weiß man schnell, wie oft/wann man sie sichert

  • Finden auf dem Server sehr viele Schreibzugriffe (Datenbank, Mail...) statt?
  • Wird der Server gewerblich genutzt?
  • Bist du gesetzlich verpflichtet, gewisse Daten sicher zu speichern?

Abhängig von den beiden ersten Überlegungen:

  • Wie groß sind die zu sichernden Daten
  • Wie sicher muss das Backup - “subjektiv” betrachtet - sein

Folgede Optionen stehen zur Verfügung, aus denen - nach nach Ansprüchen - ausgewählt werden kann:

  • SCSI
    • für Hochsicherheits-Backups
    • und/oder geringere Datenmengen
    • extrem hohe Geschwindigkeiten
  • SATA-Raid und NFS
    • für mittlere Sicherheit
    • und/oder mittlere Datenmengen
    • hohe Geschwindigkeiten
  • IDE-Raid und USB-Festplatten
    • für geringe Sicherheit
    • und/oder sehr große Datenmengen
    • mäßige Geschwindigkeiten

Technik - einzelne Werkzeuge vorgestellt

Die Standard-Tools

cp und tar

cp und tar sind wohl nur für Komplettbackups geeignet, dafür aber auf (beinahe) jedem System vorhanden.

Die Bedienung von cp ist einfach und nicht sonderlich umfangreich:

Syntax:

cp -a 'was' 'wohin'

Beispiel:

cp -a /usr/local /bak/usr/local

Komprimiert und vielleicht auf einen anderen Rechner, anstatt nur auf eine andere Partition oder Festplatte gehts dann mit tar:

Syntax:

tar -cvvzf 'wohin' 'was'

Beispiel:

tar -cvvzf daniel@dk10:~/backup.tar.gz /home/daniel

‘wohin’ kann DATEI, RECHNER:DATEI oder BENUTZER@RECHNER:DATEI sein.

Umfangreichere Tools

rsync und bashscripte

rsync und bashscripte sind auch für inkrementelle Backups geeignet, dafür aber nicht auf jedem System vorhanden.

Die Bedienung von rsync ist recht umfangreich und komplexere Aktionen sind möglich:

Syntax:

rsync [optionen] 'was' 'wohin'

Mehr dazu unter man rsync.

Nun folgen ein paar Beispiele aus meinen Backupscripten:

Beispiele:

rsync -avuz --delete --exclude '*~' --exclude '*mp3' /home/daniel/ daniel@dk10:/home/daniel/laptop
Synchronisiert mein vorhandenes Backup auf dem Server. Nicht vorhandene Dateien werden gelöscht (–delete), mp3 Dateien und Backups werden ausgelassen (–exclude ‘*mp3’ und –exclude ‘*~’).
rsync -avuz --exclude '**/CVS' daniel@dk10:/pub/vexim-2.0.1/ /home/daniel/vexim-2.0.1
Damit synchronisiere ich meine Arbeit vom Server auf den Laptop, wobei sämtliche CVS Verzeichnisse weggelassen werden.

Mehr zu den Optionen von rsync:

  • -a archive mode = -rlptgoD
  • -v verbose
  • -z compress
  • -u update; skip newer files
  • -r recursive
  • -g preserve group
  • -l copy symlinks
  • -p preserve permissions
  • -o preserve owner
  • -t preserve times
  • -D preserve devices

Damit kann man dann schon recht brauchbare Aktionen durchführen.

Praxisbeispiel

Hier nun wie versprochen mein Beispiel.

Das erste Beispiel ist ein simples Shellscript, das ich unter /usr/local/sbin/backup abgespeichert habe. Der Aufruf erfolgt mittels cron. Dazu führte ich als root crontab -e aus. Alternativ kann man auch in /etc/cron.daily/ ein Script ablegen, die Wirkung bleibt die selbe.

   # m h dom mon dow user  command
   11 1    * * *   root    /usr/local/bin/backup

Das Backup-Script: ich definiere die Variablen für DKRS (= mein Befehl) und ZIEL (= der Zielort des Backups). Dadurch kann ich bequem zwei Einträge ändern, und mein Script verhält sich komplett anders.

Ersetze ich z.B. /bak/dk10 durch daniel@domain.name:~/pfad/, dann erfolgt die Sicherung auf den entfernnten Rechner namens domain.name als Benutzer daniel in den Dateipfad ~/pfad/.

Anfangs lasse ich Dateien löschen, die als “Leichen” im System herumliegen, bei mir hauptsächlich DEADJOE und *~ Dateien.

'Hinweis: Dieses Backup-Script entspricht meinem Bedarf. Daher solltest du es nicht BLIND übernehmen!

#!/bin/sh
DKRS="rsync -avuz --exclude *.deb"
ZIEL="/bak/dk10"

echo -n "Backupsfiles löschen: "
  find / -name 'DEADJOE' -print | xargs rm
  find / -name '*~' -print | xargs rm
echo "done."

echo "Beginn Sicherung dk10: "

dpkg --get-selections > /etc/dpkg/selections.bak

echo -n "home: "
$DKRS --exclude ftp/ /home/ $ZIEL/home
echo "done."

for i in boot etc root dev var usr bin sbin lib
do
  echo -n "$i: "
  $DKRS /$i/ $ZIEL/$i
  echo "done."
done

Der Vorteil in dieser Kombination liegt zum einen im relativ einfachen Code des Scripts, zum anderen in der einfachen Möglichkeit, Befehl und Ziel “auszutauschen”. Weiters werde ich von cron per Email verständigt und erhalte eventuelle Fehlermeldungen.

Nun kommt nfs zum Einsatz:

Als root möchte ich immer Lesezugriff auf das Backup haben. Dazu exportiere ich das Verzeichnis /bak/dk10 auf dem einen Rechner und mounte es auf dem anderen Rechner. Der Eintrag in /etc/fstab:

   192.168.0.10:/bak    /root/bak      nfs     auto,ro    0   0

Wie gehts weiter

Weiter gehts so: du schreibst dein eigenes Backupscript, machst regelmäßig Backups (und überprüfst diese) und wirst sie hoffentlich nie brauchen.

Natürlich gibt es auch fertige Backup-Tools für Debian wie Sand am Meer, aus denen man sich eines aussuchen kann. Ein Beispiel ist rdiff-backup, für kleine bis mittlere Installationen ist flexbackup zu empfehlen. Ein weiterers Tool, welches rsync benutzt, ist Dirvish. In der c’t 7/06, Seite 212 gab es einen Artikel darüber.

Wer viel an seiner Konfiguration bastelt oder das System nicht alleine verwaltet - also wirklich viele Änderungen - sollte wohl über ein System zur Versionskontrolle nachdenken. Einfach und leicht verständlich sind rcs und cvs, etwas “moderner” ist subversion.

Quelle

Netmarks