Backup unter Linux mit rdiff-backup
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
- ↑ Securely backing up your files with rdiff-backup and sudo (bencane.com)
- ↑ rdiff-backup-fs (code.google.com)
- ↑ rdiff-backup-fs Issues (code.google.com)
- ↑ Question about --terminal-verbosity (rdiff-backup-users Mailing List)
Weitere Informationen
- rdiff-backup (rdiff-backup.net)
- rdiff-backup Github Repository (github.com)
- Automated Backups With rdiff-backup (howtoforge.com)
- Unbeabsichtigte Rdiff-Backups entfernen und Metadaten reparieren (timedicer.co.uk)
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.
|