Inhaltsverzeichnis

Pull-Backup mit Bontmia

Mit bontmia lassen sich tägliche Snapshots von Dateien auf einem entfernten Server erstellen. Bontmia läuft hierbei auf dem Backupserver, so dass auf dem zu sichernden Server keinerlei Login-Daten vom Backupserver liegen. Um auf dem Backupserver Platz zu sparen werden nicht geänderte Dateien als Hardlinks abgelegt.

Installation

Backupserver

Benötigt wird das FeM-Gentoo-Overlay!

Versionen:

Alternativ ist das Skript auch unter http://folk.uio.no/johnen/bontmia verfügbar werden. Im FeM-Gentoo-Overlay liegt ein passender Patch, welcher die Angabe eines SSH-Schlüssels (--identity) und einer Exclude-Datei (--exclude-from) für rsync erlaubt.

zu sichernder Server

Konfiguration

zu sichernder Server

Benutzer und SSH-Key anlegen

Der Schlüssel muss ohne Passwort (Passphrase) erstellt werden, sonst macht das automatische Backup wenig Spaß.

Ausgabe

Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/backup/.ssh/id_rsa.
Your public key has been saved in /home/backup/.ssh/id_rsa.pub.
The key fingerprint is:
3e:65:ec:fd:ba:92:15:94:18:da:74:26:d4:fc:b9:f0 root@server1
The key's randomart image is:
+--[ RSA 2048]----+
|         .==o.   |
|         +.+=    |
|        . .. . . |
|         .  o o  |
|        S +  + . |
|       . + .. E  |
|        o .o.    |
|         .o  .   |
|           .oo.  |
+-----------------+

Der Private Schlüssel für den Backup-Nutzer (/home/backup/.ssh/id_rsa) muss nun sicher (z.B. per SCP) auf den Backup-Server übertragen werden. Anschließend kann er auf dem zu sichernden Server gelöscht werden.

Sudo einrichten

Damit rsync auf alle Dateien zugreifen kann, muss es mit root-Rechten ausgeführt werden. Dies geschieht via sudo.

/etc/sudoers

# Allow rsync for backup-user
backup  ALL=(root)NOPASSWD:/usr/bin/rsync --server --sender -vlHogDtprRze.iLsf . /

/etc/sudoers

# Allow rsync for backup-user
backup  ALL=(root)NOPASSWD:/usr/bin/rsync --server --sender -vlHogDtprRze.iLsfx . /

/etc/sudoers

# Allow rsync for backup-user
backup  ALL=(root)NOPASSWD:/usr/bin/rsync --server --sender -vlHogDtprRze.iLsfxC . /

Hinweis: Der zu sichernde Pfad ist hier /, kann aber bei Bedarf auch eingeschränkt werden.

Backupserver

Annahmen:

SSH-Hostkey speichern

Zu allererst muss man sich einmal per SSH mit dem zu sichernden Server als der Benutzer auf dem Backupserver verbinden unter dem dann das Backup läuft.

Ausgabe

The authenticity of host 'server1.example.org (10.200.2.211)' can't be established.
RSA key fingerprint is c9:08:84:ea:1c:2c:84:5a:0f:cd:6e:1f:a1:bf:fe:4a.
Are you sure you want to continue connecting (yes/no)?

Nun sollte man als Nutzer Backup auf dem genannten Server eingeloggt sein.

Sicherungsinhalt festlegen

Ausschließliche Exclude-Liste

Mit dieser Variante werden die genannten Verzeichnisse und/oder Dateien (Wildcards erlaubt) vom Backup ausgeschlossen. Alles andere wird gesichert.

In diesem Beispiel werden alle Verzeichnisse außer /dev, /mnt, /proc, /sys und /usr/portage und alle Dateien außer /opt/xen/*/*.fs gesichert.

/mnt/backup/server1.example.org/exclude

/dev
/mnt
/opt/xen/*/*.fs
/proc
/sys
/usr/portage

Kombinierte Include-/Exclude-Liste

Mit dieser Variante legt man explizit die zu sichernden Verzeichnisse und/oder Dateien (Wildcards erlaubt) fest, die vom Backup eingeschlossen werden. Alles andere wird nicht gesichert.

In diesem Beispiel werden die Verzeichnisse /etc, /home, /root (ohne root/.cache), /usr/local, /var/lib/mysql, /var/lib/portage, /var/log und /var/www gesichert.

/mnt/backup/server1.example.org/exclude

+ etc
+ etc/**
+ home
+ home/**
- root/.cache
- root/.cache/**
+ root
+ root/**
+ usr
+ usr/local
+ usr/local/**
+ var
+ var/lib
+ var/lib/mysql
+ var/lib/mysql/**
+ var/lib/portage
+ var/lib/portage/**
+ var/log
+ var/log/**
+ var/www
+ var/www/**
- *

Backup

Auf dem Backupserver kann nun mit

das Backup anstoßen.

Ausgabe

bdirmatch: ^(./server1.example.org:/)
No previous backup detected, will start with an empty replication

Backing up
  server1.example.org:

Deletes files that should not be in the latest snapshot

Moving the complete backup into the backup archive
  (/mnt/backup/server1.example.org/backup/unfinished_backup -> /mnt/backup/server1.example.org/backup/)

Calculates which backups to save
(0 minutes, 0 hours, 7 days, 4 weeks, 3 months, 0 years)
  Saving /mnt/backup/server1.example.org/backup/2012/03/31/12:50 by filters:  days weeks month

Anschließend kann man dies auch per Cronjob erledigen lassen. Der Parameter „–rotation“ gibt an, welche Backups vorgehalten werden - im Beispiel sind das