37.5Inkrementelle Backups (rdiff-backup)
Eine interessante Alternative zu rsync ist das Kommando rdiff-backup. Der wichtigste Unterschied zu rsync besteht darin, dass rdiff-backup bei veränderten Dateien auch die alte Version im Backup-Verzeichnis archiviert. Um Platz zu sparen, können statt einer Kopie der betreffenden Datei auch nur die Änderungen gespeichert werden, optional in komprimierter Form. rdiff-backup liefert also ohne viel Mühe ein inkrementelles Backup, aus dem Sie auch ältere Versionen einer Datei wiederherstellen können. Im Prinzip bietet rdiff-backup dieselben Funktionen wie die »Time Machine« von Apples OS X – nur ohne spektakuläre Benutzeroberfläche.
In der einfachsten Form wenden Sie rdiff-backup auf zwei lokale Verzeichnisse an. Wenn das Zielverzeichnis noch nicht existiert, wird es erzeugt.
rdiff-backup erzeugt im Backup-Verzeichnis das Unterverzeichnis rdiff-backup-data. Darin speichert es diverse statistische Daten und Statusinformationen. Außerdem enthält das Verzeichnis increments alte Versionen von Dateien, die sich mittlerweile geändert haben oder die gelöscht wurden. Dabei werden nur die Änderungen gespeichert (.diff) und zusätzlich komprimiert. Außerdem wird in den Dateinamen das Datum der letzten Version integriert. Daraus ergeben sich dann unübersichtliche Dateinamen in der Form dateiname.2015-11-03T08:37:58+02:00.diff.gz.
Wenn Sie auf das Backup zurückgreifen möchten, enthält /home-backup den Zustand des /home-Verzeichnisses zum Zeitpunkt des letzten Backups mit Ausnahme des rdiff-backup-data-Verzeichnisses genau so, als hätten Sie das Backup mit cp -a oder rsync -a --delete ausgeführt. Der Zugriff auf das letzte Backup ist also ganz einfach. Natürlich können Sie das Backup auch mit rdiff-backup wiederherstellen. Dazu verwenden Sie die Option -r und die Zeitangabe now. Das folgende Kommando stellt das Backup probeweise in einem temporären Verzeichnis wieder her:
Wenn Sie auf eine ältere Version einer Datei bzw. auf eine mittlerweile gelöschte Datei zugreifen möchten, wird es komplizierter: Sie müssen der Reihe nach alle .diff-Dateien anwenden (die neueste zuerst), bis Sie den gewünschten Zeitpunkt in der Vergangenheit wiederhergestellt haben. Natürlich müssen Sie das nicht manuell tun – rdiff-backup hilft Ihnen dabei. Das folgende Kommando stellt den Zustand des /home-Verzeichnisses so wieder her, wie er vor zehn Tagen war:
Den Backup-Zeitpunkt können Sie wahlweise absolut (z.B. 2015-12-31) oder relativ in Stunden (h), Tagen (D), Wochen (W) etc. angeben – siehe auch man rdiff-backup im Abschnitt TIME FORMATS. Beachten Sie, dass die Wiederherstellung alter Dateien mit zunehmender Versionsanzahl einen erheblichen CPU-Aufwand verursacht und entsprechend langsam ist!
Oft wollen Sie nur eine einzelne Datei oder ein Unterverzeichnis in einer alten Version wiederherstellen. Dabei können Sie auch eine gar nicht mehr existierende Datei bzw. ein mittlerweile gelöschtes Verzeichnis angeben:
Wenn Sie rdiff-backup regelmäßig ausführen, wächst das Backup-Verzeichnis im Laufe der Zeit immer stärker an. Um alle Backup-Dateien zu löschen, die älter als vier Monate sind, gehen Sie so vor:
Statt eines konkreten Zeitpunkts können Sie auch angeben, wie viele Backup-Versionen maximal archiviert bleiben sollen. Das folgende Kommando reduziert die Backup-Versionen auf drei:
In allen bisherigen Beispielen bin ich davon ausgegangen, dass sich das Quell- und das Zielverzeichnis im lokalen Dateisystem befinden. rdiff-backup kann aber über das Netzwerk auch auf externe Verzeichnisse zugreifen. Anders als bei rsync muss dazu rdiff-backup auch auf dem externen Rechner installiert sein! Die Kommunikation erfolgt über SSH. Eine spezielle Konfiguration von rdiff-backup ist nicht erforderlich.
Bei der Angabe externer Verzeichnisse gilt nahezu dieselbe Syntax wie bei rsync. Der einzige Unterschied besteht darin, dass nach dem Hostnamen zwei Doppelpunkte angegeben werden müssen:
Noch mehr Details und Beispiele zum Umgang mit rdiff-backup bietet die folgende Webseite:
http://www.nongnu.org/rdiff-backup
Wenn Ihnen die Idee von rdiff-backup zusagt, Sie sich aber außerdem noch die Verschlüsselung des Backups sowie ein Upload via SSH oder FTP auf einen externen Server wünschen, lohnt sich vielleicht ein Blick auf das Python-Programm Duplicity. Es ist ähnlich wie rdiff-backup zu bedienen, erzeugt allerdings tar-Archive. Duplicity befindet sich allerdings nun schon seit mehreren Jahren im Beta-Stadium. Nichtsdestotrotz dient es als Basis für die Backup-Benutzeroberfläche Déjà Dup, die ich Ihnen am Beginn dieses Kapitels vorgestellt habe.