Backup unter Linux mit rdiff-backup

Aus Thomas-Krenn-Wiki
Zur Navigation springen Zur Suche springen

rdiff-backup ermöglicht einfache und platz-effiziente Backups unter Linux. Der Datenbestand des letzten Backups ist direkt über das Dateisystem zugänglich. Für ältere Backup-Versionen einer Datei legt rdiff-backup nur die Änderungen ab - diese älteren Versionen können über das rdiff-backup Tool wiederhergestellt werden.

Video

Backup erstellen

Ein Backup wird ganz einfach über

rdiff-backup QUELL-VERZEICHNIS BACKUP-VERZEICHNIS

erstellt.

Hier ein einfaches Beispiel:

[root@tpw mnt]# rdiff-backup /mnt/daten-verzeichnis/ /mnt/backup-verzeichnis/

Server per SSH sichern

Sie können mit rdiff-backup auch einen entfernen Server über SSH sichern. Das Backup der Daten am Server wird dabei am lokalen Client erstellt. Im ersten Schritt stellen Sie sicher, dass auch am Server rdiff-backup installiert ist, ansonsten erhalten Sie folgende Fehlermeldung:

bash: rdiff-backup: command not found
Fatal Error: Truncated header string (problem probably originated remotely)
[...]
Remember that, under the default settings, rdiff-backup must be
installed in the PATH on the remote system.
[...]

Sind die Installationsvoraussetzungen erfüllt, starten Sie über SSH das Backup:

rdiff-backup root@IP-Adresse::QUELL-VERZEICHNIS BACKUP-VERZEICHNIS

In diesem Beispiel wird das QUELL-VERZEICHNIS der IP-Adresse, lokal unter BACKUP-Verzeichnis gesichert.

Ubuntu-Benutzer werden mit dem Problem konfrontiert, dass sich root per default nicht mit einem Passwort über SSH anmelden darf. Um trotzdem Daten zu sichern, auf die am Server nur root zugreifen darf, wird ein Umweg über sudo eingerichtet:[1]

$ sudo vi /etc/sudoers.d/rdiff
tktest  ALL=(root)NOPASSWD:/usr/bin/rdiff-backup

Achtung: Nach dem Erstellen dieser Konfiguration darf der User tktest /usr/bin/rdiff-backup mit sudo ohne Eingabe eines Passwortes ausführen! Am besten wird zum Ausführen der Backups ein eigener User erstellt und die Kommandos eingeschränkt, die der User über SSH ausführen darf:

Beim Aufruf von rdiff-backup muss dann sicher gestellt werden, dass am Server sudo rdiff-backup aufgerufen wird:

$ rdiff-backup --remote-schema 'ssh -C %s sudo rdiff-backup --server' tktest@192.168.56.105::/etc backup/

Das default Remote-Schema kann in der man Page von rdiff-backup nachgelesen werden, im obigen Beispiel wird einfach sudo ergänzt.

Backup Versionen anzeigen

Die vorhandenen Backup-Versionen werden mittels

rdiff-backup -l BACKUP-VERZEICHNIS

angezeigt.

Auch hier wieder ein Beispiel:

[root@tpw mnt]# rdiff-backup -l /mnt/backup-verzeichnis/
Found 4 increments:
    increments.2009-06-03T15:13:24+02:00.dir   Wed Jun  3 15:13:24 2009
    increments.2009-06-03T15:13:58+02:00.dir   Wed Jun  3 15:13:58 2009
    increments.2009-06-03T15:22:45+02:00.dir   Wed Jun  3 15:22:45 2009
    increments.2009-06-03T15:23:57+02:00.dir   Wed Jun  3 15:23:57 2009
Current mirror: Wed Jun  3 15:25:55 2009
[root@tpw mnt]# 

Restore durchführen

Wie oben zu sehen ist, liegen im Backup-Verzeichnis selbst die aktuellen Daten vom 3. Juni 2009 (15:25:55 Uhr). Auf diese Versionen kann direkt zugegriffen werden:

[root@tpw mnt]# ls -l /mnt/backup-verzeichnis/
total 117348
-rw-r--r-- 1 root root 30000000 2009-06-03 15:12 datei1
-rw-r--r-- 1 root root 30000000 2009-06-03 15:13 datei2
-rw-r--r-- 1 root root 30000000 2009-06-03 15:22 datei3
-rw-r--r-- 1 root root 30000000 2009-06-03 15:25 datei4
drwx------ 3 root root     4096 2009-06-03 15:25 rdiff-backup-data
[root@tpw mnt]# 

Um z.B. die Datei datei1 wiederherzustellen genügt es diese Datei in das gewünschte Verzeichnis zu kopieren:

[root@tpw mnt]# cp /mnt/backup-verzeichnis/datei1 /mnt/restore-verzeichnis/datei1
[root@tpw mnt]# ls -l /mnt/restore-verzeichnis/
total 29336
-rw-r--r-- 1 root root 30000000 2009-06-03 15:27 datei1
[root@tpw mnt]# 

Restore einer älteren Version

Um nun einen älteren Stand einer Datei zu bekommen, greift man auf das rdiff-backup Tool wie folgt zurück:

rdiff-backup BACKUP-VERZEICHNIS/rdiff-backup-data/increments/INCREMENTS-FILE RESTORE-VERZEICHNIS/RESTORE-DATEI

Die Datei datei4 wurde im Beispiel zwischen den letzten beiden Backups verändert. Für das Wiederherstellen der Datei datei4 mit dem Stand von 15:23:57 Uhr greift man auf die Increments-Datei zurück:

[root@tpw mnt]# rdiff-backup /mnt/backup-verzeichnis/rdiff-backup-data/increments/datei4.2009-06-03T15:23:57+02:00.diff.gz /mnt/restore-verzeichnis/datei4
[root@tpw mnt]# 

Alternativ kann auch die Option restore-as-of verwendet werden. Weitere Informationen dazu finden Sie in der manpage von rdiff-backup.

Restore mittels rdiff-backup-fs FUSE Mount

Das Projekt rdiff-backup-fs[2] bietet die Möglichkeit ein rdiff-backup Repository via FUSE (Filesystem in Userspace) zu mounten. Dadurch kann man ohne dem rdiff-backup Kommando sehr komfortabel auf alte Versionen zugreifen. Es gibt für jedes durchgeführte Backup ein eigenes Verzeichnis mit Datum/Uhrzeit. Wechselt man in dieses Verzeichnis, hat man direkten Zugriff auf die Dateien der Backups.

Hinweis: Mounting via SSH ist nicht möglich (siehe http://code.google.com/p/rdiff-backup-fs/issues/detail?id=13).

# rdiff-backup-fs /mnt/ /rdiff-backup-dir/
# cd /mnt
# ls
2013-12-11T15:56:38  2013-12-11T15:56:40  2013-12-11T15:56:42

Achtung: rdiff-backup-fs verwendet für die Zeitstempel per default UTC, in Europa müssen Sie daher die TZ Variable anpassen:[3]

# TZ='+1' rdiff-backup-fs /mnt/fuse /mnt/backup/

Fortschrittsanzeige

Rdiff-backup bietet bislang keine Fortschrittsanzeige (Progress Bar). Das Feature wurde zwar schon angefragt,[4] bislang aber nicht in rdiff-backup eingebaut.

Änderungen von Datei-Rechten

rdiff-backup protokolliert Änderungen der Datei-Rechte in einer Metadaten Diff-Datei mit:

gunzip -c mirror_metadata.2015-03-02T11\:06\:50+01\:00.diff.gz | grep Permissions
  Permissions 436

Im obigen Beispiel haben sich die Permissions von test.txt geändert, die vorhergehenden Rechte der Datei waren 436. Diese Zahl ist dezimal angegeben und nicht wie üblich octal. Um die gängigen Rechte zu erhalten muss sie daher umgerechnet werden:

$ echo 'obase=8;436' | bc
664

Tipps & Tricks

Letztes Backup Rückgängig machen

Der Mailinglist Beitrag [1] beschreibt, wie das letzte erfolgreiche Backup mit Hilfe eines Tricks zurückgesetzt werden kann. Dies kann hilfreich sein, wenn ungewollt, große Datenänderungen in das rdiff Repository übernommen wurde. (z.B. Backup eines leeren Verzeichnisses).

Bitte gehen Sie damit sehr vorsichtig um, da es keine offizielle rdiff-backup Funktionalität ist.

cd rdiff-backup-data/
$ ls
access_control_lists.2013-12-11T16:56:38+01:00.snapshot  file_statistics.2013-12-11T16:56:38+01:00.data.gz
access_control_lists.2013-12-11T16:56:40+01:00.snapshot  file_statistics.2013-12-11T16:56:40+01:00.data.gz
access_control_lists.2013-12-11T16:56:42+01:00.snapshot  file_statistics.2013-12-11T16:56:42+01:00.data.gz
backup.log                                               increments
chars_to_quote                                           increments.2013-12-11T16:56:38+01:00.dir
current_mirror.2013-12-11T16:56:42+01:00.data            increments.2013-12-11T16:56:40+01:00.dir
error_log.2013-12-11T16:56:38+01:00.data.gz              mirror_metadata.2013-12-11T16:56:38+01:00.diff.gz
error_log.2013-12-11T16:56:40+01:00.data.gz              mirror_metadata.2013-12-11T16:56:40+01:00.diff.gz
error_log.2013-12-11T16:56:42+01:00.data.gz              mirror_metadata.2013-12-11T16:56:42+01:00.snapshot.gz
extended_attributes.2013-12-11T16:56:38+01:00.snapshot   session_statistics.2013-12-11T16:56:38+01:00.data
extended_attributes.2013-12-11T16:56:40+01:00.snapshot   session_statistics.2013-12-11T16:56:40+01:00.data
extended_attributes.2013-12-11T16:56:42+01:00.snapshot   session_statistics.2013-12-11T16:56:42+01:00.data
$ cp current_mirror.2013-12-11T16:56:42+01:00.data current_mirror.2013-12-11T16:56:40+01:00.data
$ cd ..
$ rdiff-backup -v6 --check-destination-dir .
Using rdiff-backup version 1.2.8
...
Regressing to Wed Dec 11 16:56:40 2013
...
Deleting increment /rdiff/rdiff-backup-data/increments.2013-12-11T16:56:40+01:00.dir
Cleaning up

Alternativ dazu gibt es auch ein eigenes Regression Skript: http://www.timedicer.co.uk/programs/help/rdiff-backup-regress.sh.php

locate Tools am Backup Server vermeiden

Standardmäßig installieren viele Linux Distributionen mlocate oder locate. Diese Tools zum Finden von Dateien erstellen mithilfe eines Cronjobs regelmäßig eine Datenbank aller Dateien (dabei wird das updatedb Kommando aufgerufen).

Da mit rdiff-backup und dessen Increments-Dateien auf einem Backup Server eine große Anzahl von Dateien abgelegt wird, kann ein solches Datenbankupdate länger dauern und sowohl die CPU als auch das I/O-System unnötig belasten. Außerdem wird das locate Kommando zum Finden von Dateien erfahrungsgemäß auf einem Backup Server kaum verwendet.

Wir empfehlen daher, auf einem Backup Server auf mlocate oder locate zu verzichten und die entsprechenden Pakete zu deinstallieren. Unter Ubuntu führen Sie dazu folgendes Kommando aus:

sudo apt-get purge locate mlocate

Alternativ besteht auch die Möglichkeit, die mlocate/locate Konfiguration anzupassen (PRUNEFS Option). Weitere Informationen dazu finden Sie in der Manpage von updatedb (man updatedb).

Einzelnachweise

Weitere Informationen


Foto Werner Fischer.jpg

Autor: Werner Fischer

Werner Fischer arbeitet im Product Management Team von Thomas-Krenn. Er evaluiert dabei neueste Technologien und teilt sein Wissen in Fachartikeln, bei Konferenzen und im Thomas-Krenn Wiki. Bereits 2005 - ein Jahr nach seinem Abschluss des Studiums zu Computer- und Mediensicherheit an der FH Hagenberg - heuerte er beim bayerischen Server-Hersteller an. Als Öffi-Fan nutzt er gerne Bus & Bahn und genießt seinen morgendlichen Spaziergang ins Büro.


Das könnte Sie auch interessieren

Logwatch installieren
OpenVPN mit Pre-shared Key
VMware Horizon Linux Client Black Screen