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.