Backup unter Linux mit rsnapshot
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:
- /usr/share/doc/rsnapshot/
- rsnapshot HOWTO (rsnapshot.org)
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
- ↑ Can I set the snapshot_root to a remote SSH path? (rsnapshot.org)
- ↑ A simple backup scheme using rsnapshot (gentoo.org)
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.
|