Tägliche Backups!!
ACHTUNG: Weder für die Richtigkeit folgender
Informationen noch für Ihre Daten kann
irgendeine Haftung übernommen werden! Zusätzlich zu diesen
Backups sollten ausserdem noch permanente Backups angefertigt werden!
(Nicht Teil dieses Howtos)
FreeBSD kommt mit einem sehr nützlichen Backup-Tool, dump, sowie
restore zur Wiederherstellung.
Und dank der UFS-Snapshots kann man sogar rw gemountete Dateisysteme
konsistent sichern.
dump.py ist mein Backup-Script für tägilche Backups: Am 1. des Monats Level 0 (vollständig), jeden Montag level 1, Dienstag Level 2 usw. Man kann angeben, ob die Backups täglich, wöchentlich oder monatlich durchgeführt werden sollen.
Das Skript wurde speziell für Dedicated Server entwickelt, die sich in einem großen Rechenzentrum (in meinem Fall im Strato RZ in Berlin) befinden. Sinn dieser Backups ist es nicht, eine Versionsgeschichte der Dateien auf dem Server zu erhalten, sondern lediglich, eine annähernd Aktuelle Version der Serverinhalte bereitzuhalten. Strato beispielsweise (Stand: April 2006) tauscht selbst bei RAID1-Systemen im Falle eines Festplattendefekts den gesamten Rechner und nicht nur die defekte Festplatte aus. Für einen möglichst kurzen Systemausfall ist es wichtig, dass die Daten schnell wieder zur Verfügung stehen.
Voraussetzungen: python 2.4 oder höher, gpg, ftp-backupspace, ncftp, gpg-Schlüsselpaar. (Wer gpg nicht kennt, sollte sich zuerst mal http://www.gnupg.org/ ansehen; gpg dient zur Verschlüsselung des Backups.)
Achtung: Während der Ausführung des Scripts ist der ftp-username und das Passwort in der Prozessliste sichtbar (Bug in ncftpput!). Deshalb muss vorher der Kernel-Parameter security.bsd.see_other_uids auf 0 gesetzt werden!
Verwendung. Es ist ein Script in /usr/local/etc/periodic/daily/ zu erstellen, das wie folgt aussehen kann: (angenommen, dump.py liegt in /root) ACHTUNG! Nicht vergessen, den mode des scripts auf 0700 zu setzen, da es plaintext Passwörter enthält.
PGP Keys Müssen unbedingt separat gesichert werden, denn sonst kann das Backup später nicht mehr entschlüsselt werden!
dump.py ist ein sehr einfach gehaltenes Skript, das sehr leicht an individuelle Bedürfnisse angepasst werden kann.
#!/bin/sh #/home: daily /root/dump.py /home home /home/hc/.gnupg pgp_recipient myftplogin myftppass my.backup.server.net 7 #/, /usr: weekly /root/dump.py / root /home/hc/.gnupg pgp_recipient myftplogin myftppass my.backup.server.net 1 /root/dump.py /usr usr /home/hc/.gnupg pgp_recipient myftplogin myftppass my.backup.server.net 1 #/var: once per month /root/dump.py /var var /home/hc/.gnupg pgp_recipient myftplogin myftppass my.backup.server.net 0
Params: backup part, backupname, keydir, recipient, username, password, host, maxdumplevel
| Parameter | Bedeutung |
|---|---|
| backup part | Partition, die gesichert werden soll. Zum Beispiel '/' für die Root-Partition, /home für home, etc. |
| backupname | Dateiname des Backups auf dem FTP-Server |
| keydir | Verzeichnis, in dem die GPG Schlüssel aufbewahrt werden. Standard ist im Verzeichnis .gnupg im Benutzerverzeichnis des Benutzers. Angenommen, der Admin heisst hat den login hc, dann liegt das Verzeichnis in /home/hc/.gnupg |
| recipient | Empfänger. Gibt die Person an, die das Backup entschlüsseln kann. Normalerweise der Admin des Servers. Genaueres steht in der gnupg Dokumentation. (Parameter '-r' von gpg) |
| username | Benutzername auf dem FTP-Server |
| password | Passwort auf dem FTP-Server |
| host | FTP-Server |
| maxdumplevel | Maximales Dump-level. 0 bedeutet monatliche Backups, 1 bedeutet wöchentliche Backups, 7 tägliche. |
OpenBSD/NetBSD: unterstützen keine Snapshots; damit das Script trotzdem funktioniert, muss der Parameter -L vom dump-Befehl im python code entfernt werden.
Zum Wiederherstellen müssen vom niedriegsten Dump-Level angefangen alle dump-Files wiederhergestellt werden. Dump-Files, die älter sind, als ein Dump-File eines niedrigeren Levels, müssen ignoriert werden.
-rw----r-- 1 bxxxxxx 500 1693514014 Mar 1 03:33 backup_home_0.dump -rw----r-- 1 bxxxxxx 500 20710102 Mar 1 03:34 backup_root_0.dump -rw----r-- 1 bxxxxxx 500 1951698038 Mar 1 03:56 backup_usr_0.dump -rw----r-- 1 bxxxxxx 500 19098260 Mar 1 03:57 backup_var_0.dump -rw----r-- 1 bxxxxxx 500 6093760 Mar 3 03:04 backup_home_5.dump -rw----r-- 1 bxxxxxx 500 68386086 Mar 4 03:06 backup_home_6.dump -rw----r-- 1 bxxxxxx 500 5858339 Mar 5 03:04 backup_home_7.dump -rw----r-- 1 bxxxxxx 500 71830213 Mar 6 03:06 backup_home_1.dump -rw----r-- 1 bxxxxxx 500 13722 Mar 6 03:06 backup_root_1.dump -rw----r-- 1 bxxxxxx 500 34880580 Mar 6 03:08 backup_usr_1.dump -rw----r-- 1 bxxxxxx 500 5965200 Mar 7 03:04 backup_home_2.dump -rw----r-- 1 bxxxxxx 500 11099417 Mar 8 03:04 backup_home_3.dump -rw----r-- 1 bxxxxxx 500 112193406 Mar 9 03:05 backup_home_4.dump
Um die home-Partition wiederherzustellen, müssen folgende Backups aufgespielt werden: 0-4 (in der Reihenfolge). 5, 6 und 7 können ignoriert werden.
Da eine Wiederherstellung nur selten erforderlich sein sollte, braucht man kein spezielles Script dafür...
ncftpget -c -u BACKUPUSER -p ******** BACKUPSERVER BACKUPFILENAME | gpg -d --homedir GNUPGDIR | restore rvf -
Die Anweisung muss im Stammverzeichnis der wiederherzustellenden Partition ausgeführt werden.
Impressum -- Nutzungsbedingungen -- www.hcesperer.org
$Id: backup.html 136 2008-04-27 14:53:24Z hc $