Login
Newsletter
Werbung

So, 8. Februar 2009, 00:00

Das Backup-Programm BoxBackup

Platzsparendes netzwerkweites Backup

Das Skript sieht folgendermaßen aus. Anstatt nur die Schlüsseldatei zu sichern, holen wir uns gleich das ganze Verzeichnis /etc/boxbackup, denn ohne ein Minimum an Konfiguration dürfte es nicht möglich sein, an das Backup heranzukommen, wenn man alles von Grund auf neu installieren muss:

#!/bin/sh
# This script should run as root
etcdir=/etc/boxbackup
basedir=/mnt/backup
conffile="$etcdir/bbackupd.conf"
PATH=/sbin:/usr/sbin:$PATH
cd /root || exit 1
server=$(grep "StoreHostname *=" "$conffile" | cut -d ' ' -f 3)
clientdir="$basedir/clients/$(uname -n)"
ssh $server "mkdir -p $clientdir"
# Backup partition tables
/sbin/sfdisk -l -uS > partitions 2>&1
if [ $? = 0 -a -s partitions ]; then
	scp partitions "$server:$clientdir/partitions" > /dev/null
fi
# Backup LVM tables
if [ -x /sbin/pvs ]; then
	> lvm
	/sbin/pvs >> lvm 2>&1
	/sbin/vgs >> lvm 2>&1
	/sbin/lvs >> lvm 2>&1
	if [ -s lvm ]; then
		scp lvm "$server:$clientdir/lvm" > /dev/null
	fi
fi
# Backup MD info
if [ -r /proc/mdstat ]; then
	cat /proc/mdstat > md 2>&1
	if [ $? = 0 -a -s md ]; then
		scp md "$server:$clientdir/md" > /dev/null
	fi
fi
# List packages
if [ -x /usr/bin/dpkg-query ]; then
	/usr/bin/dpkg-query --show > packages 2>&1
	if [ $? = 0 -a -s packages ]; then
		scp packages "$server:$clientdir/packages" > /dev/null
	fi
	dpkg --get-selections > selections 2>&1
	if [ $? = 0 -a -s selections ]; then
		scp selections "$server:$clientdir/selections" > /dev/null
	fi
fi
if [ -x /usr/sbin/slapt-get ]; then
	/usr/sbin/slapt-get --installed > packages 2>&1
	if [ $? = 0 -a -s packages ]; then
		scp packages "$server:$clientdir/packages" > /dev/null
	fi
fi
if [ -x /usr/bin/rpm ]; then
	/usr/bin/rpm -qa > packages 2>&1
	if [ $? = 0 -a -s packages ]; then
		scp packages "$server:$clientdir/packages" > /dev/null
	fi
fi
# TODO: similar for other package systems
rm -f partitions lvm md packages selections
# Copy BoxBackup config directory
scp -rp "$etcdir" "$server:$clientdir" > /dev/null
# Start BoxBackup
bbackupctl -c "$conffile" sync > /dev/null
exit 0

Die etwas merkwürdige Abfrage der Dateigrößen soll verhindern, dass eine leere Ausgabe des Kommandos (im Fehlerfall z.B.) die bereits vorhandene Information überschreibt.

Wer andere Distributionen als Debian einsetzt, muss das Skript vielleicht noch etwas erweitern. Eine Fehlerabfrage findet zur Zeit praktisch nicht statt. Man sollte also gelegentlich kontrollieren, ob die Clientdaten vorhanden und korrekt sind. (Optimal ist das nicht, aber das Skript ist auch nur ein erster Hack. Besser eine primitive Lösung als gar keine.)

Das Skript soll natürlich regelmäßig aufgerufen werden, daher ändern wir den Eintrag für Cron folgendermaßen (crontab -e):

0 2 * * * /usr/local/sbin/dobackup

Eventuelle Fehlermeldungen von dem Skript erhalten wir automatisch per Email. Statt der 0 sollte man die Minuten zwischen den einzelnen Clients etwas variieren, sonst kann die Last auf dem Server unangenehm hoch werden.

Kommentare (Insgesamt: 0 )
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung