Was braucht ein Server ohne RAID...?

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.

Download dump.py

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

Erläuterungen

Params: backup part, backupname, keydir, recipient,
username, password, host, maxdumplevel
ParameterBedeutung
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.

Wiederherstellung

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.

Beispiel

-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.

Befehl zum Wiederherstellen

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.


Powered by...FreeBSD!! FUCKING YEAH !!!!!

Impressum -- Nutzungsbedingungen -- www.hcesperer.org
$Id: backup.html 136 2008-04-27 14:53:24Z hc $