Backups mit rsnapshot

Als Apple seine komfortable Datensicherungssoftware am Mac namens Time Machine präsentiert hat, wurde die Einfachheit bestaunt und gepriesen. Man stöpselt eine Festplatte ein, auf die fortan Sicherungskopien der Dateien gesichert werden. Stündliche Backups für die letzten 24 Stunden, Tägliche Backups für den letzten Monat und wöchentliche Backups für die vorherigen Monate. Man muss nichts administrieren, und wenn man mal eine alte Version einer versehentlich gelöschten oder überschriebenen Datei suchen will, gibt es ein buntes Interface mit dem man vor einem Sternenhimmel auf Zeitreise geht.

Zeitreise auch ohne Sternenhimmel

Apple ist es mal wieder gelungen, eine Technologie benutzbar zu machen, die vorher für den normalen Anwender viel zu kompliziert war. Enttäuscht musste Apple allerdings feststellen, dass ein beachtlicher Anteil ihrer Anwender Time Machine ignoriert, weil sie zu faul sind eine Festplatte anzuschließen, aber das sei hier nur am Rande erwähnt.

Die Technologie, die hinter Time Machine steckt, ist aber gar nicht neu. In der Unix-Welt gibt es schon seit langem sogenannte Hardlinks. Das bedeutet, dass eine Datei an mehreren Stellen im Verzeichnisbaum existiert, obwohl sie tatsächlich nur einmal vorhanden ist.

Seit fast 10 Jahren nutze ich ein kleines Tool namens Meep, dass auf einer externen Festplatte viele Versionen meiner Backups in Form von Hardlinks kopiert und anschließend sämliche Änderungen mit dem Befehl rsync auf die neue Version anwendet. So werden Dateien geändert, gelöscht oder hinzugefügt, ohne die alten Verzeichnisse zu tangieren. Weil praktisch nur die Änderungen hinzukommen, kommt man mit relativ wenig Festplattenplatz aus. Meine externe Platte ist ca. doppelt so groß wie meine Serverplatte und enthält schon mehrere hundert vollständige Schnappschüsse. Die Zeitreise hat zwar keine schicke Science-Fiction Klickibunti-Oberfläche wie auf dem Mac, aber es sind normale Dateien. Und die kann man mit Linux-Befehlen wie ls und cp handhaben, oder grafische Dateimanager wie nautilus einsetzen.

rsnapshot

Meep wird aber schon seit Jahren nicht mehr weiterentwickelt. Darum habe ich vor einigen Wochen auf das ausgereiftere und vollständigere rsnapshot in Betrieb genommen.

Rsnapshot bewahrt stündliche, tägliche, wöchentliche und monatliche backups auf. Man kann beliebige Intervalle festlegen und die Anleitung erklärt es ziemlich detailliert.

In /etc/rsnapshot.conf definiert man Backupintervalle mit Namen und legt fest, wie viele Versionen vorgehalten werden sollen. In der Standardconfiguration ist das kleinste Interval hourly und es sollen 24 Stück vorgehalten werden.

Der Befehl "rsnapshot hourly" soll stündlich (am einfachsten per crontab) ausgeführt werden. "hourly.0" ist immer das jüngste Backup. Anschließend wird es in hourly.1, umbenannt während hourly.1 zu hourly.2 wird und so weiter. Das 25. wird dann gelöscht. Achtung: Es wird nicht automatisch zu einem daily-Backup gemacht. Das macht der Befehlt "rsnapshot daily". Er macht auch "hourly.24" dann "daily.0" Dafür sollte man auch einen crontab Eintrag machen.

wenn man keine hourly Backups haben will

Beim einfachen Lesen der Anleitung ist mir nicht klar geworden, dass "rsnapshot daily", "weekly" und "monthly" gar keine Backups macht, sondern nur die vorhandenen Backups rotiert. Weil ich nämlich anfangs nur tägliche Sicherungen anlegen wollte, klappte das gar nicht. Als ich den Befehl rsnapshot daily gegeben habe, konnte ich im logfile /var/log/rsnapshot.log lesen:

 

/mnt/backuphd/hourly.24 not present (yet), nothing to copy

 

Erst nachdem ich die Zeile

 

retain hourly 24

 

in /etc/rsnapshot.conf gelöscht habe und damit daily zum kleinsten Interval wurde, funktionierte der Befehl "rsnapshot daily" wie gewünscht.

sinnvolle Intervalle

Es macht keinen Sinn, "daily 100" einzustellen, um 100 tägliche Backups aufzubewahren, wenn man als nächsten Intervall "weekly" gewählt hat. Würde man "rsnapshot weekly" nach einer Woche aufrufen, würde es versuchen, den 100. daily-snapshot zu einem weekly-snapshot zu machen. Weil es nach einer Woche aber erst 7 tägliche gibt, scheitert das kommando ebenfalls mit der Fehlermeldung "... not present (yet), nothing to copy". In der /etc/rsnapshot.conf müssen also Intervalle stehen, die sich mit mit den crontab-Einträgen decken.

Meine aktuelle Konfiguration sieht vor, dass Montags bis Samstags während der normalen Geschäftszeiten im Abstand von zwei Stunden ein "hourly" Backup gemacht wird. Tägliche Backups wernde 10 Minuten vor Mitternacht auf Basis des letzten stündlichen Backups angelegt. Samstags werden die wöchentlichen und jeweils am ersten des Monats wird das monatliche Backup angelegt. (Weil das Rotieren recht schnell geht, reicht mir ein Abstand von 5 Minuten, so dass selbst wenn der erste des Monats man auf einen Samstag fällt, alle drei Backups sauber durchlaufen.) Das sieht in der crontab so aus:

 

10 8-20/2 * * 1-6 root /usr/bin/rsnapshot hourly
50 23 * * 1-6 root /usr/bin/rsnapshot daily
45 23 * * 6 root /usr/bin/rsnapshot weekly
40 23 1 * * root /usr/bin/rsnapshot monthly

 

Entsprechend muss die rsnapshot.conf folgendermaßen aussehen:

 

retain hourly 7
retain daily 7
retain weekly 4
retain monthly 12

 

Das letzte monthly dürfte natürlich auch größer sein, weil wir ja keine "yearly" Backups aufrufen. Das werde ich zu gegebener Zeit noch einrichten.

Die Tab-Taste

die rsnapshot.conf Datei ist leider total pingelig, was Whitespace angeht. Man muss spalten mit Tabulatoren trennen. Wer also zwischen interval und hourly nur Leerzeichen, aber keinen Tab gesetzt hat, bekommt eine Fehlermeldung.

Fazit

Auch wenn die Konfiguration etwas zeitintensiver als Time Machine ist, kann ich den Einsatz von rsnapshot sehr empfehlen. Das Anlegen der Sicherungen erfolgt mit bewährten Befehlen wie cp, rm, mv und rsync und ist darum sehr stabil. Das Ergebnis ist eine USB-Festplatte, die an beliebigen Linux-Rechnern gemountet werden kann und deren Inhalt ohne Einsatz von Spezialsoftware ausgelesen werden kann. Mit einem regelmäßigen Blick in /var/log/rsnapshot.log kann überprüft werden, ob das Skript seine Dienste verrichtet.

Write a comment

Comments: 0