Backup unter Linux mit rsnapshot

Aus Thomas-Krenn-Wiki
Zur Navigation springen Zur Suche springen
Hinweis: Bitte beachten Sie, dass dieser Artikel / diese Kategorie sich entweder auf ältere Software/Hardware Komponenten bezieht oder aus sonstigen Gründen nicht mehr gewartet wird.
Diese Seite wird nicht mehr aktualisiert und ist rein zu Referenzzwecken noch hier im Archiv abrufbar.

Mit rsnapshot werden einfach und platzsparend Daten-Sicherungen unter Linux erstellt. Das Konzept hinter rsnapshot ist überschaubar und effektiv - je nach Konfiguration werden zu bestimmten Zeiten Snapshots der Daten erstellt. Danach werden die Snapshots rotiert, eine konfigurierbare Anzahl an Sicherungen aufgehoben und ältere Snapshots gelöscht. Um Platz zu sparen werden die Daten beim Rotieren nicht einfach kopiert, sondern untereinander über Hard-Links verknüpft. Dadurch ist eine Datei, die über mehrere Snapshots hinweg gleich bleibt, nicht mehrfach vorhanden, es existieren nur mehrere Hard-Links in den unterschiedlichen Snapshots.

Sicherungs-Konzept

Den Datentransfer übernimmt bei rsnapshot das Programm rsync. rsync ist ein Daten-Kopier-Werkzeug, dass über einen Delta-Copy Mechanismus nur die Änderungen von A nach B synchronisiert. Es eignet sich daher hervorragend zum Spiegeln von Daten, obendrein ist es netzwerkfähig (z.B. über SSH).

rsync wird meist dazu verwendet um 1:1 Kopien von Verzeichnissen zu erstellen. Der Nachteil an simplen 1:1 Spiegelungen ist, dass gelöschte Daten auch im Spiegel gelöscht werden und sich daher nicht wiederherstellen lassen. rsnapshot fügt rsync eine weitere Komponente hinzu, die daraus ein inkrementielles Backup macht: Hard-Links.

Ein Datei-System wie ext4 erstellt Hard-Links, indem es die Referenzen auf die gleiche Node-Nummer im Filesystem zeigen lässt. Am einfachsten erklärt sich das anhand eines Beispiels:

# ls
hourly.0  hourly.1
# ls -li hourly.*/localhost/etc/hosts
28147 -rw-r--r-- 2 root root 186 Jul 10  2014 hourly.0/localhost/etc/hosts
28147 -rw-r--r-- 2 root root 186 Jul 10  2014 hourly.1/localhost/etc/hosts
# du -sh hourly.*
47M         hourly.0
908K	hourly.1

Das Beispiel zeigt zwei Snapshots des etc-Verzeichnisses, die kurz hintereinander mit rsnapshot erstellt wurden:

  • hourly.0 ist der aktuelle Datenstand, das etc-Verzeichnis ist insgesamt 47M groß
  • hourly.1 ist ein Snapshot des älteren Datenstandes, da sich keine Daten geändert haben und rsnapshot Hard-Links einsetzt, ist der Snapshot nur ~900K groß

Der ls Befehl zeigt Referenz-Nummern (o.a. Indizes, inodes) der Dateien an, in beiden Snapshots zeigt etc/hosts auf den selben Inode. Die Datei hat sich offensichtlich nicht geändert. Ändern wir die Datei und erstellen erneut einen Snapshot, bekommt die Datei einen neuen Inode:

# ls -li hourly.*/localhost/etc/hosts
28589 -rw-r--r-- 1 root root 209 Mar 13 11:30 hourly.0/localhost/etc/hosts
28147 -rw-r--r-- 2 root root 186 Jul 10  2014 hourly.1/localhost/etc/hosts
28147 -rw-r--r-- 2 root root 186 Jul 10  2014 hourly.2/localhost/etc/hosts

Installation

rsnapshot wird als Package aus den Repos installiert:

$ sudo apt-get install rsnapshot 
[...]
The following extra packages will be installed:
  liblchown-perl
The following NEW packages will be installed:
  liblchown-perl rsnapshot
0 upgraded, 2 newly installed, 0 to remove and 139 not upgraded.
Need to get 124 kB of archives.
After this operation, 530 kB of additional disk space will be used.
[...]

Nützliche Informationen zur weiteren Vorgehensweise finden Sie in:

Konfiguration

rsnapshot ist dafür konzipiert, Sicherungen lokal abzulegen. Eine Art "Remote Snapshot" über SSH gibt es nicht - möchte man das trotzdem durchführen, muss ein Umweg über einen lokalen NFS-Mount oder ein Staging-Verzeichnis am remote Server genommen werden.[1]

Sog. Pull-Backups über SSH sind durchaus möglich, dass heißt einen Remote-Server lokal über SSH zu sichern.

Die erste wichtige Option in der Haupt-Konfigurationsdatei /etc/rsnapshot.conf ist aufgrund der zuvor genannten Einschränkung snapshot_root. Unter diesem Pfad werden alle Snapshots abgelegt.

rsnapshot.conf

Hilfe zu den Konfigurationsoptionen holt man sich am besten über man rsnapshot.

Hinweis: Parameter für Optionen in rsnapshot.conf müssen durch Tabulator getrennt werden!

Für erste Sicherungen sind folgende Einstellungen am wichtigsten:

Option Bedeutung
snapshot_root Root-Verzeichnis, unter dem die Snapshots abgelegt werden.
no_create_root Ist no_create_root auf 1 gesetzt, wird das Root-Verzeichnis nicht automatisch erstellt. Das ist z.B hilfreich wenn Snapshots auf einer externen Festplatte gespeichert werden sollen, der Mount der Festplatte aber fehl schlug.
retain Die retain Zeilen regeln die Backup-Intervalle und für welchen Zeitraum Backups aufgehoben werden. "retain hourly 6" gibt z.B. an, dass 6 stündliche Snaphots aufgehoben werden.
logfile Gibt die Log-Datei an, in der rsnapshot seine Kommandos loggt.
backup Die backup Zeilen spezifizieren, welche Verzeichnis wohin gesichert werden.

Ob Ihre Konfiguration valide ist, prüfen sie via configtest:

$ sudo rsnapshot configtest
Syntax OK

Regelmäßige Sicherungen

Angenommen, Sie nehmen sich folgendes Schema für retain vor:

retain          hourly    6
retain          daily     14
retain          weekly    8
retain          monthly    6

Mit diesen Einstellungen müssen Sie dann noch dafür sorgen, dass rsnapshot regelmäßig aufgerufen wird. Auf Systeme, die durchgängig laufen, übernimmt dies der cron Dienst. Systeme, die länger ausgeschaltet sind, verwenden dazu anacron.[2]

Hinweise: rsnapshot selbst weiß nicht, wann und wie es ausgeführt wird. Es kümmert sich nur darum, dass je nach Intervall die Snapshots rotiert und die Daten synchronisiert werden. cron bzw. anacron sorgen deshalb für die periodische Ausführung von rsnapshot.

Cronjobs

Wie bereits erwähnt können Sie rsnapshot bei Systemen, die dauerhaft in Betrieb sind, per cronjob ausführen lassen. Unter /etc/cron.d/rsnapshot installiert rsnapshot eine Beispiel-Konfiguration. Sie müssen die Einträge nur auskommentieren, sodass (die Zeiten können entsprechend angepasst werden):

  • Alle 4 Stunden ein Backup ausgeführt wird
  • Täglich um 03:30 ein Backup läuft
  • Jeden Montag um 03:00 ein Backup läuft
  • Am ersten des Monats um 02:30 ein Backup läuft
$ sudo vi /etc/cron.d/rsnapshot
# 0 */4         * * *           root    /usr/bin/rsnapshot hourly
# 30 3          * * *           root    /usr/bin/rsnapshot daily
# 0  3          * * 1           root    /usr/bin/rsnapshot weekly
# 30 2          1 * *           root    /usr/bin/rsnapshot monthly

Anacron

Bei Systeme die nicht dauerhaft in Betrieb sind, übernimmt Anacron das Ausführen von Jobs in cron.daily, cron.weekly und cron.monthly. Falls Anacron auf Ihrem System nicht installiert ist, wird es mittels sudo apt-get install anacron installiert. Lassen Sie die Einträge in der Datei /etc/cron.d/rsnapshot wie im oben abgebildet jedoch auskommentiert. In der Datei /etc/anacrontab befinden sich die Einträge, die die Scripte in cron.* ausführen:

$ tail /etc/anacrontab
# These replace cron's entries
1	5	cron.daily	run-parts --report /etc/cron.daily
7	10	cron.weekly	run-parts --report /etc/cron.weekly
@monthly	15	cron.monthly	run-parts --report /etc/cron.monthly

Die stündlichen Jobs werden weiterhin von Cron ausgeführt, diese werden von anacron nicht behandelt:

$ grep hourly /etc/crontab 
17 *	* * *	root    cd / && run-parts --report /etc/cron.hourly

Um rsnapshot zu starten erstellt man in den Verzeichnissen cron.hourly, cron.daily, cron.weekly und cron.monthly einfache Skripte.

Achtung: Die Skripte in den cron.* Verzeichnissen dürfen keine Endung aufweisen, da sie sonst nicht ausgeführt werden. Ungültig wäre z.B. rsnapshot.conf!

$ sudo vi /etc/cron.hourly/rsnapshot
#!/bin/sh
rsnapshot hourly || echo "Backup failure"
$ sudo chmod +x /etc/cron.hourly/rsnapshot

Analog erstellt man die Skripte in cron.daily, cron.weekly und cron.monthly und ersetzt zugehörig hourly mit daily, weekly und monthly.

Struktur der Sicherung

Im Nachfolgenden sehen Sie die Struktur des rsnapshot Sicherungsverzeichnisses.

rsnapshot Sicherungsverzeichnis

Hier werden die einzelnen Sicherungen entsprechend nach stündlichen, täglichen, wöchentlichen usw. Sicherungen gruppiert.

root@rsnapshot-test:/var/cache/rsnapshot# ls -la
total 36
drwx------  9 root root 4096 Aug 12 14:17 .
drwxr-xr-x 10 root root 4096 Aug 11 11:25 ..
drwxr-xr-x  3 root root 4096 Aug 11 13:17 daily.0
drwxr-xr-x  3 root root 4096 Aug 12 14:17 hourly.0
drwxr-xr-x  3 root root 4096 Aug 12 13:17 hourly.1
drwxr-xr-x  3 root root 4096 Aug 12 12:17 hourly.2
drwxr-xr-x  3 root root 4096 Aug 12 11:17 hourly.3
drwxr-xr-x  3 root root 4096 Aug 12 10:17 hourly.4
drwxr-xr-x  3 root root 4096 Aug 12 09:17 hourly.5

Verzeichnisinhalt einer Sicherung

Sie können direkt in den einzelnen Sicherungen navigieren. Hier z.B. die tägliche Sicherung des Servers localhost. Es werden in diesem Beispiel die Verzeichnisse /etc, /home und /usr gesichert.

root@rsnapshot-test:/var/cache/rsnapshot/daily.0/localhost# ls -la
total 20
drwxr-xr-x  5 root root 4096 Aug 11 12:17 .
drwxr-xr-x  3 root root 4096 Aug 11 13:17 ..
drwxr-xr-x 90 root root 4096 Aug 11 12:37 etc
drwxr-xr-x  3 root root 4096 Aug 10 13:10 home
drwxr-xr-x  3 root root 4096 Aug 10 13:05 usr

Dateiänderung

Die hosts-Datei wurde nach dem Backup um 13:05 abgeändert. Somit ändert sich der Inode-Eintrag bei den nächsten Sicherungen für diese Datei.

root@rsnapshot-test:/var/cache/rsnapshot# ls -li */localhost/etc/hosts
404919 -rw-r--r-- 1 root root 194 Aug 10 13:05 daily.0/localhost/etc/hosts
404317 -rw-r--r-- 6 root root 209 Aug 11 14:02 hourly.0/localhost/etc/hosts
404317 -rw-r--r-- 6 root root 209 Aug 11 14:02 hourly.1/localhost/etc/hosts
404317 -rw-r--r-- 6 root root 209 Aug 11 14:02 hourly.2/localhost/etc/hosts
404317 -rw-r--r-- 6 root root 209 Aug 11 14:02 hourly.3/localhost/etc/hosts
404317 -rw-r--r-- 6 root root 209 Aug 11 14:02 hourly.4/localhost/etc/hosts
404317 -rw-r--r-- 6 root root 209 Aug 11 14:02 hourly.5/localhost/etc/hosts

Einzelnachweise


Foto Georg Schönberger.jpg

Autor: Georg Schönberger

Georg Schönberger, Abteilung DevOps bei der XORTEX eBusiness GmbH, absolvierte an der FH OÖ am Campus Hagenberg sein Studium zum Bachelor Computer- und Mediensicherheit, Studium Master Sichere Informationssysteme. Seit 2015 ist Georg bei XORTEX beschäftigt und arbeitet sehr lösungsorientiert und hat keine Angst vor schwierigen Aufgaben. Zu seinen Hobbys zählt neben Linux auch Tennis, Klettern und Reisen.


Das könnte Sie auch interessieren

Dm-cache
Mcelog
Zwei Default Gateways in einem System