Dirvish

Durch die Nutzung des IPFire als Homeserver mittels des Samba-AddOn stellt sich die Frage nach einer Datensicherung für alle Userdaten. Auch die digitalen Fotos, welche so schön in der Webgalerie weltweit erreichbar sind, sollten unbedingt ordentlich gesichert werden, schließlich lassen sich dafür keine Negative mehr im Schrank finden.

Im Folgenden wird beschrieben, wie mit Hilfe von Dirvish ein einfaches, aber wirkungsvolles Backup auf eine USB-Festplatte gesichert werden kann.

Dirvish ist ein Perl-Script, welches mit Hilfe von rsync wöchentlich/täglich/stündlich ein vollständiges Backup erstellt. Dazu werden sogenannte Hardlinks verwendet.

Jede Datei im Linux-Filesystem wird durch einen Hardlink beschrieben. Erzeugt man einen zweiten Hardlink auf die selbe Datei, so ist die Datei trotzdem nur einmal da. Die Datei wird jedoch erst gelöscht, wenn man den letzten Hardlink löscht. Diese Eigenschaft macht sich Dirvish zu nutze. Es schreibt bei jedem Backup eine vollständige Kopie der zu sichernden Dateien als Hardlink. Ändert sich am Dateisystem nichts, werden folglich nur Hardlinks gechrieben, welche kaum Plattenplatz benötigen. Somit kann man jeden Tag ein vollständiges Abbild (Snapshot) erzeugen, ohne dass man ein riesiges Backupmedium braucht.

rsync-AddOn installieren

Wie jedes andere AddOn mittels Pakfire installieren.

Dirvish herunterladen

Die aktuelle Version von Dirvish HIER herunterladen und mittels WinScp auf den IP-Fire nach /root/dirvish/… kopieren. Das Verzeichnis dirvish vorher mit F7 anlegen.

Mit Putty auf der Konsole des IP-Fire als root einloggen und folgende eingeben:

cd /root/dirvish
tar -xzf dirvish-xyz.tgz

./install.sh

Jetzt werden die Systemvariablen abgefragt:

perl to use (/usr/bin/perl)  -> mit Enter bestätigen
What Installation prefix should be used?() -> /var/ipfire/dirvish
/var/ipfire/dirvish doesn't exist, create it? (n) -> y

Die nächsten Abfragen sind alle mit Enter bzw. yes zu bestätigen. Dirvish wird damit nach /var/ipfire/dirvish/… installiert. Dort liegen alle AddOns von IP-Fire, daran sollte man sich also halten.

Fehlende Perl-Module installieren

Dirvish benötigt zusätzliche Perl-Module, welche nicht Bestandteil von IP-Fire sind. Da CPAN ebenfalls nicht Bestandteil von IP-Fire ist, werden die fehlenden Module einfach bei CPAN herunter geladen.

Es werden die folgenden Module benötigt:

Time::JulianDay
Time::ParseDate
Time::Period
Time::Timezone

Diese *.pm-Dateien werden wieder mittels WinScp auf den IP-Fire in den Pfad

/usr/lib/perl5/5.8.8/Time/...

kopiert.

Backup-Medium definieren

Als Backup-Medium nutze ich eine externe USB-Festplatte. Man kann jedoch genau so gut eine zweite interne Festplatte nutzen bzw. das Backup auf einen entfertnten Linux-Rechner schreiben. Auf keinen Fall sollte man das Backup auf die gleiche Festplatte scheiben, auf der schon die Daten liegen. Damit hätte man im Fall eines Festplatten-Crashs auch kein Backup.

Die weitere Beschreibung geht von einer USB-Festplatte aus. Diese sollte als FAT32 formatiert sein, damit man sie auch an Windows-Rechnern einfach lesen kann.

Auf der Weboberfläche vom IP-Fire wird die externe Festplatte unter „Dienste→Extra-HD“ als /dev/sd… angezeigt. Hier legt man den Mountpoint fest, Ich habe dafür /mnt/usb gewählt.

Dirvish einrichten

Es gibt hier ein sehr gutes Howto für Dirvish. Der Einfachheit halber werde ich daher hier nur kurz die unbedingt nötigen Schritte erläutern.

Das Prinzip von Dirvish besteht darin, sogenannte 'Vault's (Tresore) zu definieren, in denen das Backup abgelegt wird. Ein 'Vault' ist ein Verzeichnis auf dem Backup-Medium. Es gibt eine übergeordnete Konfig-Datei und je Vault noch eine spezielle. Zunächst editieren wir die übergeordneten Datei master.conf

cd /var/ipfire/dirvish/etc/
touch master.conf

Die Datei hat muss den folgenden Inhalt haben:

Datei: /etc/master.conf

### /var/ipfire/dirvish/etc/dirvish/master.conf
#zunächst wird das Backup-Medium konfiguriert
bank:
        /mnt/usb
# xdev: 1/0 - folgt/folgt nicht symbolischen links
xdev:   1
index:  gzip
image-default:  %Y%m%d-%H:%M
exclude:
        lost+found/
        core
        .nfs*
        *.tmp
        *.TMP
        .recycle/
# Definition der zu sichernden Vaults (Tresore), die Namen muessen nicht
# identisch sein mit den tatsaechlischen Namen der Verzeichnisse!
#
Runall:
        vault1
        vault2
#                
# nicht vergessen:
# einen neuer tresor (vault) mit dem Befehl 'dirvish --vault Tresorname --init' initialisieren!!!
# wie lange werden standardmaessig alle backups aufgehoben?
expire-default: +30 days
# vom Standard (siehe oben) abweichend...
expire-rule:
# Minute
#       Stunde
#               Day of month
#                       Month
#                               Day of week (Sonntag ist Nr. 1!)
#                                       Zeit bevor Loeschung
# Min   Hr      Dom     Mon     Dow     STRFTime_FMT
  *      *       1       *       *       +3 months

Expire-default definiert für jedes Backup eine Haltbarkeit von 30 Tagen. Abweichend davon wird mit expire-rule für das Backup am ersten des Monats eine Haltbarkeit von 3 Monaten vorgeschrieben. Unter Runall sind alle Vaults eingetragen, die es gibt. Jetzt definieren wir diese Vaults:

cd /mnt/usb
mkdir vault1

In jedem Vault muss es ein Verzeichnis 'dirvish' geben, in dem Dirvish seine log-Files für dieses Vault schreibt. Zusätzlich kommt hier noch die Konfigurationsdatei für dieses Vault hinein.

cd /mnt/usb/vault1
mkdir dirvish
cd dirvish
touch default.conf

Die default.conf muss den folgenden Inhalt haben:

Datei: /mnt/usb/vault1/dirvish/default.conf

## /mnt/usb/vault1/dirvish/default.conf
# die Conf-Datei für Dirvish für den Tresor (vault) vault1
client:         server #hier kommt der Hostname hin
tree:           /var/ipfire/samba/user1
exclude:        *.bak
                *~
                .*
                *.tmp
                lost+found/
#       hier können noch weitere Haltbarkeiten, abweichend
#       von der /var/ipfire/dirvish/etc/dirvish/master.conf, für dieses vault definiert werden
#
# expire-default:       +2 days
# expire-rule:
# Min   Hr      Dom     Mon     Dow     STRFTIME_FMT

In der ersten Zeile wird dirvish angewiesen, auf seinen eigenen Rechner den in der zweiten Zeile angegebenen Pfad zu sichern. Die zweite Zeile ist also entsprechend anzupassen. Sollen weiteren Pfade gesichert werden, so ist ein neues vault anzulegen.

Dirvish initalisieren

Dirvish schaut vor jedem Backup nach, ob ein altes Backup existiert, welches gemäß der Expire-Regel gelöscht wird. Da noch keine Backups existieren, muss das erste Backup zunächst erzeugt werden:

/var/ipfire/dirvish/bin/dirvish --vault vault1 --init

Dies dauert eine ganze Weile, abhängig davon, wie viele Daten gesichert werden. Nach erfolgter Arbeit befinden sich die gesicherten Daten unter

/mnt/usb/vault1/...

in einem Verzeichnis mit einem Namen, aus dem die Startzeit des Backups hervorgeht. Der Befehlt ist für jedes vault zu wiederholen.

Dirvish automatisieren

Zum automatischem Start des Backups ist ein cronjob einzurichten. Zunächst wird ein script erzeugt, welches die erforerlichen Befehle enthält:

cd /etc/fcron.daily
touch dirvish.cron
chmod 700 dirvish.cron

Der Inhalt der Datei dirvish.cron ist folgermaßen:

Datei: /etc/fcron.daily/dirvish.cron

/var/ipfire/dirvish/bin/dirvish-expire
/var/ipfire/dirvish/bin/dirvish-runall

Dirvish überwachen

Jetzt, wo alles funktioniert und eingerichtet ist, kann man den nächsten Schritt tun.

Eine einfache Möglichkeit der Überwachung, ob Dirvish seine Arbeit auch ordentlich erledigt hat, bietet das

http://www.dirvish.org/viewvc/contrib/admin/DailyEmailScript/dirvish-status.sh?
view=log|dirvish-status.sh|Script

, welches den Status von Dirvish ausliest und per E-Mail versendet. Es wird nach /var/ipfire/dirvish/bin kopiert und ausführbar gemacht:

chmod 700 /var/ipfire/dirvish/bin/dirvish-status.sh

Danach editieren wir es noch wie folgt:

In den ersten Zeilen ist der Pfad zu den Vaults festzulegen (hier also /mnt/usb). Der Eintrag des Mail-Empfängers wird auskommentiert.

Die letzten Zeilen sind wie folgt anzupassen:

Datei:

...
echo "Disk usage:"
/bin/df -h
#echo
#cat $tmpfile
#) | mail -s "${WARNSUB}Dirvish status (${YESTERDAY}@`hostname`)" $MAILTO  
)
sendEmail -f Absender@web.de -u "${WARNSUB}Dirvish status (${YESTERDAY}@`hostname`)" -o message-
file=$tmpfile -t Empfänger@web.de -s smtp.web.de -xu Absender-username -xp Absender-Passwort
rm  $tmpfile

Das Beispiel geht von einem E-Mail-Konto des Absenders bei web.de aus und ist natürlich anzupassen. Absender und Empfänger können gleich sein.

Das Script geht davon aus, dass Dirvish nicht die Uhrzeit im Verzeichnisnamen vermerkt. Daher muss die master.conf nochmals editiert werden:

Datei:

#/var/ipfire/dirvish/etc/master.conf
...
#image-default:  %Y%m%d-%H:%M
image-default:  %Y%m%d
...

Jetzt ist jedoch nur noch ein Backup am Tag möglich, aber die Probephase ist ja vorbei ;-).

Damit das ganze funktioniert, muss das Programm 'sendEmail' noch installiert werden. Einfach hier downloaden, mit WinScp auf den IP-Fire nach /root/ kopieren und mit

cd /root
tar -xzvf sendEmail-v1.55.tar.gz
cp sendEMail-v1.55/sendEmail /bin/sendEmail
chmod 700 /bin/sendEmail

an die richtige Stelle kopieren.

Jetzt das script mit in den Cronjob aufnehmen:

Datei:

#/etc/fcron.daily/dirvish.cron
/var/ipfire/dirvish/bin/dirvish-expire
/var/ipfire/dirvish/bin/dirvish-runall
/var/ipfire/dirvish/bin/dirvish-status.sh

Backup entfernter Rechner

Dirvish bietet die Möglichkeit, auf entfernte Rechnner mittels ssh zuzugreifen und Backups über das Netz zu erstellen. Damit erhält man zusätzlich zum Schutz gegen Hardwareausfälle auch noch einen Schutz gegen Diebstahl oder Feuer. Dazu sind in der jeweiligen default.conf die folgenden Zeilen anzupassen:

Datei:

##default.conf vom vault1
client:         user@domain.entfernter.rechner
rsh:            ssh -i /Pfad/zum/privaten/Schlüssel
tree:           /zu/sichernder/Pfad/auf/entferntem/Rechner
...

Bedingung ist natürlich, dass

  • der user einen ssh-Zugang und auch lesenden Zugriff auf den Pfad hat,
  • dass auf dem entfernten Rechner rsync installiert ist und
  • dass der öffentliche Schlüssel auf dem entfernten Rechner unter /home/user/.ssh/authorized_keys eingelesen ist.

Eine genaue Beschreibung, wie die Schlüssel erzeugt und eingefügt werden, findet man im oben genannen Dirvish-HowTo.

Nutzt man als Backupmedium eine externe USB-Festplatte, sollte man aufgrund der Datenmenge das initiale Backup direkt am entfernten Rechner erzeugen (dazu muss dort natürlich auch Dirvish installiert sein, aber wir wissen ja jetzt wie das geht) und dann nur noch die Änderungen täglich über das Internet übertragen.

de/addons/dirvish/start.txt · Zuletzt geändert: 2009/04/20 12:06 von exciter
Recent changes RSS feed Creative Commons License Valid XHTML 1.0 Valid CSS Driven by DokuWiki