37.6Inkrementelle Backups (rsnapshot)

Auch das Perl-Script rsnapshot aus dem gleichnamigen Paket baut auf rsync auf. Im Unterschied zum gerade beschriebenen Kommando rdiff-backup verwendet es Hardlinks, um auf bereits gesicherte Dateien früherer Backups zurückzugreifen. Das macht den Zugriff auf ältere Backup-Versionen (»Snapshots«) einfacher als bei rdiff-backup. Eine Komprimierung der Backups ist hingegen nicht vorgesehen.

rsnapshot ist dahingehend konzipiert, dass das Script regelmäßig automatisch ausgeführt wird. rsnapshot sichert bei entsprechender Konfiguration sowohl lokale Verzeichnisse als auch via SSH Verzeichnisse von anderen Rechnern im lokalen Netzwerk. Alle Backups werden auf dem lokalen Rechner gespeichert, auf dem rsnapshot ausgeführt wird. Dieser Denkansatz ist genau umgekehrt als bei vielen anderen Backup-Tools: rsnapshot ist nicht dazu gedacht, ein Backup der lokalen Dateien auf einem anderen Rechner zu speichern. Vielmehr sichert das Kommando die Daten mehrerer via ssh oder rsync erreichbarer Rechner im lokalen Dateisystem.

Anstatt an rsnapshot zahlreiche Optionen zu übergeben, steuern Sie das Kommando durch die Konfigurationsdatei /etc/rsnapshot.conf. Für diese Datei gelten zwei wichtige Syntaxregeln: Verzeichnisse müssen mit einem Slash enden (also /verzeichnis/, nicht /verzeichnis), und die Elemente der Konfigurationsdatei müssen durch Tabulatorzeichen (nicht Leerzeichen) voneinander getrennt werden!

Für erste Experimente können Sie die zusammen mit rsnapshot mitgelieferte Konfigurationsdatei bis auf wenige Details unverändert lassen. Die drei wichtigsten Parameter, die Sie kennen und gegebenenfalls selbst einstellen müssen, sind snapshot_root, backup und interval.

snapshot_root gibt an, in welchem Verzeichnis die Backups gespeichert werden sollen. Standardmäßig kommt das Verzeichnis /var/cache/rsnapshot zum Einsatz, das bei der Installation von rsnapshot automatisch eingerichtet wurde.

backup gibt an, welches Verzeichnis wo gesichert werden soll. backup kann mehrfach jeweils in einer eigenen Zeile angegeben werden, um mehrere Verzeichnisse an unterschiedlichen Orten zu sichern. Für Backups innerhalb des lokalen Dateisystems sehen die backup-Einstellungen wie folgt aus:

# in /etc/rsnapshot.conf ... backup /home/ localhost/ backup /etc/ localhost/

Um ein Verzeichnis /home/user/Mail des externen, via SSH erreichbaren Rechners mars.sol zu sichern, müssen Sie in der bereits vorhandenen Zeile cmd_ssh das Kommentarzeichen # entfernen. In der backup-Zeile geben Sie den Login-Namen, den Hostnamen sowie das gesamte zu sichernde Verzeichnis an. Damit das funktioniert, müssen Sie vor dem ersten Backup einen mit root-Rechten eingerichteten SSH-Schlüssel ohne Passphrase in die Datei /home/user/.ssh/authorized_keys des Rechners mars.sol kopieren (siehe Abschnitt 32.4, »Authentifizierung mit Schlüsseln«). Vorsicht: Die auf dem lokalen Rechner im Verzeichnis /root/.ssh gespeicherte Schlüsseldatei darf nicht in falsche Hände geraten!

# in /etc/rsnapshot.conf ... cmd_ssh /usr/bin/ssh ... backup user@mars.sol:/home/user/Mail/ mars.sol/

Optional besteht die Möglichkeit, während des Backups einen LVM-Snapshot durchzuführen oder Scripts auszuführen, bestimmte Dateimuster vom Backup auszuschließen etc. Details können Sie in der mitgelieferten Konfigurationsdatei sowie in der man-Seite zu rsnapshot nachlesen.

interval definiert, wie viele Backup-Versionen für ein bestimmtes Zeitintervall gespeichert werden sollen. Die Standardeinstellungen sehen so aus:

# in /etc/rsnapshot.conf ... interval hourly 6 interval daily 7 interval weekly 4 #interval monthly 3

Das bedeutet, dass von Backups, die durch das Kommando rsnapshot hourly ausgeführt werden, sechs Versionen gespeichert werden. Des Weiteren werden sieben Backups von rsnapshot daily archiviert sowie vier Backups von rsnapshot weekly. Das Intervall monthly ist standardmäßig nicht definiert.

Die Einstellung interval hourly 6 ist dann zweckmäßig, wenn das Kommando rsnapshot hourly nicht stündlich, sondern nur alle vier Stunden ausgeführt wird, wie dies in /etc/cron.d/rsnapshot vorgesehen ist. Wenn Sie rsnapshot hourly hingegen wirklich jede Stunde ausführen möchten, wäre die Einstellung interval hourly 24 zweckmäßiger.

Sie können nach Bedarf beliebige weitere Intervalle definieren. rsnapshot speichert die Backups für jedes Intervall in einem jeweils eigenen Verzeichnis und verlinkt nicht geänderte Backups nur innerhalb des Verzeichnisses eines Intervalls. Das bedeutet, dass der Speicherbedarf mit jedem zusätzlichen Intervall stark steigt.

rsnapshot kann manuell aufgerufen werden. Das erfordert root-Rechte. Als Parameter müssen Sie dabei ein in der Konfigurationsdatei mit interval definiertes Zeitintervall angeben:

root# rsnapshot daily

Nach dem Backup finden Sie die gesicherten Daten im folgenden Verzeichnis:

/var/cache/rsnapshot/<interval.n>/<hostname>/<verzeichnis>

Dabei gibt interval das Intervall an, standardmäßig hourly, daily, weekly oder monthly. n gibt die Backup-Version an: 0 für das aktuellste Backup, 1 für die letzte Version, 2 für die vorletzte Version etc. hostname gibt an, von welchem Rechner die gesicherten Daten stammen, wobei localhost den lokalen Rechner bezeichnet.

Das aktuellste stündliche Backup des lokalen Verzeichnisses /etc befindet sich also im folgenden Verzeichnis:

/var/cache/rsnapshot/hourly.0/localhost/etc

Das aktuellste monatliche Backup des Verzeichnisses /home/user/Mail des Servers mars.sol befindet sich in diesem Verzeichnis:

/var/cache/rsnapshot/monthly.0/mars.sol/home/user/Mail

Um die Backups zu automatisieren, ist ein regelmäßiger Aufruf von rsnapshot durch die Cron-Konfigurationsdatei /etc/cron.d/rsnapshot vorgesehen. Sie müssen dazu nur die Kommentarzeilen vor den vier bereits vorgesehenen Cron-Zeilen entfernen:

# /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

Damit wird rsnapshot alle vier Stunden, also um 0:00 Uhr, 4:00 Uhr, 8:00 Uhr etc., täglich um 3:30 Uhr, wöchentlich montags um 3:00 Uhr sowie monatlich am ersten Tag des Monats um 2:30 Uhr mit den Parametern hourly, daily, weekly und monthly ausgeführt. Natürlich können Sie die Zeiten nach eigenem Gutdünken variieren. Beachten Sie, dass alle in der Cron-Datei verwendeten Zeitintervalle auch in /etc/rsnapshot.conf definiert sein müssen! Für das Intervall monthly ist das standardmäßig nicht der Fall.