Die Datensicherung mit Dirvish

Ich habe lange nach einer Lösung gesucht, bis ich in einer alten Ausgabe der c’t (7/2006, S. 212) auf das Programm „dirvish“ kam.
Dirvish benutzt rsync um Verzeichnisse zu synchronisieren. Bei bereits vorhandenen Dateien werden diese nicht erneut kopiert, sondern Hardlinks angelegt. Das hat den Vorteil, dass das Backup schnell und platzsparend erfolgt. Die mysql-Datenbank wird mit dem Programm „mysqldump“ gesichert.
Als Backup-Medium verwende ich eine, mit Reiserfs formatierte, 500 GB – Festplatte, die ich zusätzlich in den PC eingebaut habe. Die Backup-Platte wird beim Systemstart ro gemountet und über hdparm nach 5 Minuten Inaktivität abgeschaltet. Der Zeitdienst „anacron“ startet einmal täglich das Programm. Das Dateisystem Reiserfs nutze ich, weil es mit kleinen Dateien, wie z.B. Hardlinks, sehr platzsparend umgeht.

Die Installation erfolgt mit:

aptitude install dirvish

Die globale Konfiguration von Dirvish befindet sich in /etc/dirvish/master.conf.

# /etc/dirvish/master.conf

bank:
/srv/backup

xdev: 1

index: gzip

image-default: %Y%m%d-%H%M

# checksum: 1

summary: long

exclude:
lost+found/
core

Runall:
home
daten
etc
webserver

expire-default: +7 days

expire-rule:
#  MIN  HR  DOM  MON  DOW  STRFTIME_FMT
*   *    *    *    *    +7 days
*   *    *    *    7    +1 month
*   *    1    *    *    +1 year

Das globale Backupverzeichnis, die sogenannte „Bank“, ist /srv/backup.
Darin werden die „Vaults“ (Tresore) angelegt, die unter „Runall“ aufgeführt sind.
„expire“ bestimmt den Zeitplan, nachdem ein Backup verfällt.

Meine Backupstrategie:
Die täglichen Backups werden 1 Woche aufgehoben.
Die Sicherung an jedem letzten Tag der Woche wird einen Monat aufgehoben.
Das Backup von jedem 1. des Monats wird 1 Jahr aufgehoben.

Im Dateisystem habe ich die folgenden Verzeichnisse (Tresore) angelegt:

/srv/backup/daten
/srv/backup/etc
/srv/backup/home
/srv/backup/webserver

In jedem dieser Tresore muss nun ein Verzeichnis /dirvish angelegt werden und darin eine Datei default.conf. Für den Tresor „etc“ sieht bei mir so aus:

# /srv/backup/etc/dirvish/default.conf
client: debian
tree: /etc
exclude:
*.bak
*~
*.tmp
*.TMP

*.temp
*.jnl

„client“ ist der Hostname des Servers
„tree“ ist das zu sichernde Verzeichnis
„exclude“ schließt Dateien aus der Sicherung aus.

Nun erfolgt die Erstinitialisierung, die gleichzeitig ein Vollbackup ist, auf der Konsole:

dirvish –init -vault daten
dirvish –init -vault etc
dirvish –init -vault home
dirvish –init -vault webserver

Um das Backup zu automatisieren wird jetzt „anacron“ installiert:

aptitude install anacron

Debian hat bereits die Datei /etc/cron.d/dirvish angelegt. Da mein Server nur zu unregelmäßigen Zeiten läuft, macht ein regelmäßiger Zeitplan keinen Sinn. Die Datei habe ich deshalb entfernt.

Das Backupscript /etc/dirvish/dirvish-cronjob
habe ich nach /etc/cron.daily/dirvish-cronjob kopiert.
Damit wird die Datensicherung einmal täglich ausgeführt. Vorher muss das Script aber noch angepaßt werden. Am Anfang wird die Festplatte rw gemountet und am Schluß wieder ro gemountet. Außerdem rufe ich damit das Backupscript zur Datenbanksicherung auf.

#! /bin/sh
# /etc/cron.daily/dirvish-cronjob
# daily cron job for the dirvish package
#
if [ ! -x /usr/sbin/dirvish-expire ]; then exit 0; fi
if [ ! -s /etc/dirvish/master.conf ]; then exit 0; fi

mount -o remount,rw /dev/sdb1 /srv/backup

….

# umount /srv/backup || rc=$?

# Datenbank-Backup:
/usr/local/bin/mysql-backup.sh

mount -o remount,ro /dev/sdb1 /srv/backup || rc=$?
exit $rc

Sichern der mysql-Datenbank

Die Sicherung der mysql-Datenbank wird von der Datei /usr/local/bin/mysql-backup.sh ausgeführt. Das Script habe ich aus der c’t (7/2006, S. 212) und für mich angepasst. Angelegt wird die Datei mit:

touch /usr/local/bin/mysql-backup.sh
chmod +x /usr/local/bin/mysql-backup.sh

Das Sicherungsverzeichnis muss angelegt werden:

mkdir /srv/backup/database

Und hier der Code des Backupscripts:

# mysql-backup.sh
BACKUP_DIR=${1:-/srv/backup/database} # Directory fuer Backups
EXPIRETIME=7 # Wie viele Tage aufheben
DATE=`date „+%Y%m%d“`
# Sicherstellen, dass Dir. existiert
if [ ! -d $BACKUP_DIR ]; then
mkdir -p $BACKUP_DIR
chown 0700 $BACKUP_DIR
fi
# Neue Backups erstellen
for i in /var/lib/mysql/*/; do
dbname=`basename „$i“`
mysqldump –user=root –password=xxxx „$dbname“ | gzip > $BACKUP_DIR/$dbname.$DATE.gz
done
# Alte Backups loeschen
find $BACKUP_DIR -mtime +${EXPIRETIME} -exec rm {} \;

Das Backup-Script ist danach ausführbar zu machen:

chmod +x /usr/local/bin/mysql-backup.sh

Abschalten der Backup-Platte

Damit die Festplatte bei Inaktivität abgeschaltet wird, installiere ich das Programm „hdparm“:

aptitude install hdparm

Die Datei /etc/rc.local passe ich wie folgt an:

#!/bin/sh -e
hdparm -S 60 /dev/sdb
exit 0

Festplatten Aufteilung :

  1. 1.     /dev/scd0       /media/cdrom0  
  2. 2.     /dev/sda1       installation
  3. 3.     /dev/sda5       swap Patition

 

 

Schreibe einen Kommentar

 
Menü schließen