Diese Anleitung bezieht sich auf ein Debian System. Normalerweise sollte das Selbe aber auch für andere Systeme gelten.
Bitte Verbesserungen über das Wiki vornehmen. Oder erweitern.
Flexbackup ist ein Perl basiertes Skript, das Sicherungen von Dateien übernimmt. Das Besondere daran ist, dass Inkrementelle-, Differentielle- und Voll-Backups unterstützt werden.
An dieser Stelle, Dank an Lars für die folgende Erklärung:
Bei einem full backup werden alle Dateien gesichert. Ein differential backup sichert alle die Dateien, die seit dem letzten full Backup geändert oder erzeugt wurden. Ein incremental backup sichert nur Dateien, die seit dem letzten differentiellen oder inkrementellen Backup geändert oder erzeugt wurden. Wenn man einmal im Monat ein Vollbackup erzeugt, jede Woche ein differentielles Backup und jeden Tag ein inkrementelles Backup, so kann man mit maximal 8 Sicherungsdateien auskommen: das letzte Vollbackup, das letzte differentielle Backup und alle inkrementellen Backups seit dem letzten differentiellem Backup (maximal 6, denn am 7. Tag käme ja wieder ein differentielles Backup).
Natürlich könnte man auch einfach an jedem Tag eines Monats ein inkrementelles Backup erzeugen. Wenn aber am 30. eines Monats die Platte kaputtgeht, so muss man ein Vollbackup sowie 30 inkrementelle Backups einspielen um wieder auf den letzten Stand zu kommen – das ist einfach mühsam und (vor allem bei Tapes) langwierig.
Ein einfaches…
apt-get install flexbackup buffer
…installiert die benötigten Programme.
Download des aktuellen RPM-Datei (http://www.edwinh.org/flexbackup/). Auf Shellebene als root folgenden Befehl ausführen (RPM-Datei sollte sich auf aktueller Verzeichnisebene befinden, sonst noch Pfadangaben):
yast2 -i flexbackup-1.2.1-1.noarch.rpm
Die Konfigurationsdatei flexbackup.conf befindet sich z. B. in /etc/ und hat eine eigene Man-Page (man flexbackup.conf).
Auf folgende Sachen muss in der Konfiguration wert gelegt werden. Zum einen die Kompressionsmethode. Dazu werden 3 Variablen angepasst:
$type = 'tar'; $compress = 'gzip'; # one of false/gzip/bzip2/lzop/zip/compress/hardware $compr_level = '7'; # compression level (1-9) (for gzip/bzip2/lzop/zip)
Es gibt auch noch andere Möglichkeiten. Aber die entnimmt bitte der Manpage. tar.gz ist eine gute Kombination. Bzip2 ist zwar besser als Gzip, aber braucht auch erheblich länger.
Als nächstes müssen „Sets“ eingerichtet werden. Mit Sets werden die Orte mit Namen versehen, um die sich Flexbackup kümmern soll:
$set{'home'} = "/home/foo /home/bar /home/mail";
$set{'samba'} = "/home/samba";
$set{'www'} = "/var/www /var/wwws";
Schliesslich ist noch das Device (der Ort) wichtig, an dem Flexbackup, die Sicherungen ablegen soll. Hier kann auch ein Tape-Laufwerk verwendet werden. Wenn es jedoch um die Sicherung auf einer anderen Festplatte geht, wird in der Variable einfach das Verzeichnis definiert:
$device = '/mnt/backup';
Erwähnenswert ist eventuell noch die Möglichkeit bestimmte Dateien und Verzeichnisse von vornherein auszuschliessen. Dazu gibt es die Variable $exclude. Alles was in diesem Beispiel z.B als Verzeichnis /onlytemp/ enthält wird nicht gesichert.
$exclude_expr[0] = '.*/onlytemp/.*'; $exclude_expr[1] = '.*~$';
Das Log-Verzeichnis und andere Verzeichnisse müssen auch noch definiert werden:
$logdir = '/var/log/flexbackup/log'; # directory for log files $tmpdir = '/tmp'; # used for temporary refdate files, etc $stampdir = '/var/log/flexbackup/lib'; # directory for backup timestamps $index = '/var/log/flexbackup/lib/index'; # DB filename for tape indexes
Ich gehe mal davon aus, dass wir das Set 'home' sichern möchten. Und zwar durch ein volles Backup, einem differentiellem und einem inkrementellem. Dazu erstellt man einen Crontab in etwa so:
# Min Hour Day Month Weekday Command 00 2 * * 1-5 /usr/bin/flexbackup -set home -incremental 00 3 * * 6 /usr/bin/flexbackup -set home -differential 00 5 1-7 * * /usr/bin/flexbackup -wday 7 -set home -full
Es ist nicht ganz leicht den Crontab anzupassen. Diese Einstellung würde täglich von Montag bis Freitag ein inkrementelles Backup durchführen. Samstags dann ein differentielles und ein Mal im Monat am Sonntag (der erste Sonntag im Monat) ein volles Backup. Bei dieser Lösung werden aber an den übrigen Sonntagen keine Backups gemacht.
Will man am ersten Sonntag ein volles Backup machen, an den übrigen Sonntagen differentielle uns ansonsten inkrementelle Backups, könnte die Crontab so aussehen:
# Min Hour Day Month Weekday Command 00 2 * * 1-6 /usr/bin/flexbackup -set home -incremental 00 3 8-31 * * /usr/bin/flexbackup -wday 7 -set home -differential 00 5 1-7 * * /usr/bin/flexbackup -wday 7 -set home -full
Lars hatte folgendes hinzugefügt: Auf neueren Debian-Versionen das flag -wday vermutlich überflüssig, da man ein entsprechendes Script einfach in /etc/cron.monthly ablegen kann. Ebenso kann man scripte für die differentiellen und inkrementellen Backups in cron.weekly bzw. cron.daily ablegen.
RHenze: Das besondere an der Option “-wday 7“ ist, dass flexbackup an einem bestimmten Wochentag im Monat (z.B. jeden ersten Sonntag im Monat) gestartet werden kann. D.h. mittels crontab-Eintrag sorgt man dafür, dass flexbackup in den ersten 7 Tagen des Monats aufgerufen wird. Mit der Option -wday 7 startet es dann aber tatsächlich nur am 7. Tag (Sonntag). Das ist mit cron.monthly nicht zu realisieren.
Wenn ich was besseres habe, werde ich das Wiki aktualisieren.
Um einen externen Server über SSH/RSA-Key zu sichern muss auf dem ext. Server 'buffers' und natürlich 'sshd' installiert sein. Der User, welcher den lokalen Cron-Job ausführt muss auf beiden Server existieren. Nun sind eigentlich nur noch wenige Schritte notwendig damit das Backup über ssh geholt werden kann:
1. Auf dem lokalen Rechner muss ein RSA-Key generiert werden:
ssh-keygen -t rsa heim-server:~# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: 13:e1:66:a3:b1:b9:b9:cd:bc:37:ec:ff:16:28:b7:5broot@heim-server heim-server:~#
2. Auf dem externen Rechner muss der RSA-Key bekannt gemacht werden: Im Homeverzeichniss des (identischen) Users den Ordner '.ssh' (mit Punkt) anlegen
externer-Server:~# mkdir .ssh
nun in den Ordner wechseln
externer-Server:~# cd .ssh
In diesem Ordner die Datei 'authorized_keys' anlegen.
externer-Server:~/.ssh# touch authorized_keys
3. Den Inhalt der lokalen Datei 'id_rsa.pub' in die externe Datei 'authorized_keys' übernehmen.
In der flexbackup.conf sind die Sets natürlich noch zu bestimmen. Bsp.:
$set{'srv_etc'}="www.dein-server.lan:/etc";
$set{'srv_var'}="www.dein-server.lan:/var";
usw…
Fertig. Übrigens, nun wird auch keine Passwortabfrage mehr Notwendig wenn man sich vom lokalen Server via SSH mit dem externen Rechner Verbindet. Es wird automatisch der RSA Key ausgetauscht/verglichen.
Es sei gesagt, dass hier wirklich nur eine Quick'n'Dirty Anleitung besteht. Flexbackup umfasst sehr viele Funktionen und hat auch viele Anwendungsgebiete. Zum Beispiel umfasst die Konfigurationsdatei viele Optionen bezüglich der Sicherung auf Bandlaufwerk. Damit habe ich mich zum Beispiel noch gar nicht beschäftig.
Wenn jemand weiteres über Flexbackup heraus findet, darf er gerne das Wiki hier aktualsieren und erweitern. Wäre eine schöne Sache.