Backups mit rsnapshot

0 | 31421 Aufrufe
Sie können diese Wikiseite nach der Anmeldung auf Webmasterpro bearbeiten. Helfen Sie mit und verbessern Sie "Backups mit rsnapshot" mit Ihrem Wissen!

Anzeige Hier werben

Viele Administratoren setzen rsync zum Abgleichen von Dateien ein, auch für Backups kommt es teilweise zum Einsatz. Meistens ist hierbei aber kein oder nur komplizierter - beispielsweise über Archive - Zugriff auf die gesicherten Daten möglich. rsnapshot ermöglicht den Zugriff, wie es auch lokal der Fall wäre, gleichzeitig wird zusätzlich der benötigte Speicherbedarf gesenkt.

Die Technik

SSH

Über SSH kann eine Shell auf einem entfernten Rechner, auf dem ein SSH-Server gestartet ist, geöffnet werden. Es eignet sich also zur Fernadministration. Zusätzlich ist es möglich Dienste durch SSH zu tunneln.

Da die Kommunikation verschlüsselt wird ist es möglich auch über nicht-vertrauenswürdige Netzwerke - zu denen das Internet zu zählen ist - zu übertragen. Mithilfe von einem Public Key Verfahren ist es außerdem möglich sich passwortlos auf dem entfernten Rechner einzuloggen. Hierdurch lassen sich Abläufe, wie beispielsweise Backups, einfach automatisieren.

rsync

rsync ist ein Werkzeug um Dateien lokal oder über das Netzwerk zu synchronisieren. Hierbei zeichnet es sich besonders dadurch aus nur geänderte Daten übertragen werden. Hierbei werden je nach Parametern Dateirechte, Device Nodes, harte Links etc. erhalten.

Da rsync leicht über SSH getunnelt werden kann lässt es sich einfach für automatisierte Backups einsetzen.

cron

Um regelmäßige Ausgaben automatisch auszuführen wird auf einem UNIX-System meist cron verwendet. Hier kann man mit einer einfacher Datei definieren wann welche Kommandos ausgeführt werden. Die Ausgabe der Befehle kann man sich per Email zuschicken lassen.

Ein harter Link bezeichnet einen zusätzlichen Dateisystemeintrag für eine bereits existierende Datei. Unter beiden Dateinamen ist dann dieselbe Datei aufzufinden. Die Datei wird erst von der Festplatte gelöscht, wenn alle harten Links auf die Datei entfernt wurden.

Mit dem Kommando cp -al lassen sich Dateien und auch ganze Verzeichnisse mithilfe von harten Links kopieren. Wird ein Verzeichnis auf diese Art kopiert so benötigt die Kopie nahezu keinen zusätzlichen Speicherplatz, da nur Verzeichniseinträge erzeugt werden. Die Daten selbst sind bereits auf die Festplatte geschrieben.

Kombiniert man all diese Techniken lässt sich ein Backup erstellen, welches sichere automatisierte Backups erzeugt, die trotzdem nur mit einem geringen Speicheraufwand benötigen.

Hierzu wird ein Vollbackup des gewünschten Verzeichnisses, bei entfernten Daten wird die rsync-Verbindung über SSH getunnelt, erstellt. Das Backupverzeichnis wird dann mit cp -al kopiert, somit erhält man einen Snapshot des Backups. Wird nun einige Zeit später wieder eine Synchronisation mit rsync in dasselbe Backupverzeichnis angestossen, so werden geänderte Dateien überschrieben (im Detail: gelöscht und neu erstellt, beim Löschen wird ein harter Link freigegeben). Somit enthält das Backupverzeichnis nach erneuter Synchronisation die aktuelle Daten, der kopierte Snapshot wird nicht verändert.

Erweitert man diesen Vorgang durch ein automatisches Erstellen von durchnummerierten Snapshots, die nach einer gewissen Zeit gelöscht werden, so erhält man ein robustes Backupsystem, welches dank rsync minimalen Traffic verursacht und dank harten Links minimalen Festplattenspeicher benötigt.

Hinweis: Um keinen direkten root-Login zum Sichern der Dateirechte zu benötigen kommt außerdem sudo zum Einsatz, mehr dazu später.

rsnapshot

Installation

Die Installation von rsync, SSH und rsnapshot sollte am Besten über den Paketmanager der Distribution erfolgen. Für rsync und SSH sollte es hier aktuelle Pakete geben, rsnapshot ist nicht bei jeder Distribution dabei. Wie rsnapshot händisch installiert wird kann in der offiziellen Dokumentation nachgelesen werden.

Für entfernte Datensicherung: Automatisierter SSH-Login

Um sich automatisiert und passwortlos auf dem Server, der gesichert werden soll, einloggen zu können muss auf dem Backuprechner ein Privater Key erzeugt werden. Hierzu dient ssh-keygen, mit ssh-keygen -b 1024 -t dsa beispielsweise lässt sich ein 1024-Bit DSA-Key erstellen. Dieser wird in ~/.ssh/id_dsa gespeichert, außer über den Parameter -f wurde ein anderer Dateiname angegeben. Unter ~/.ssh/id_dsa.pub ist der öffentliche Teil des Schlüssels gespeichert, welcher später auf den Server kopiert werden muss.

Da das Backup später als root auf dem Server arbeiten muss um alle Dateien auch einlesen zu dürfen muss es möglich sein über den passwortlosen Login an root-Rechte zu kommen. Hierbei ist wichtig, dass das Risiko den Login für andere Dinge als Backups einzusetzen möglichst gering gehalten werden muss. Als Alternative zu den root-Rechten ist es möglich einem normalen Benutzer die Leserechte auf alle Dateien zu geben, in diesem Artikel wird der Einfachheit halber aber ein normaler Benutzeraccount kombiniert mit sudo benutzt. sudo ist auf vielen Distributionen bereits installiert, ansonsten kann es über den Paketmanager installiert werden.

Auf dem zu sichernden Server wird also ein Backup-Benutzer eingerichtet, das kann über useradd -m sicherung geschehen. Damit der passwortlose Login klappt muss der öffentliche SSH-Schlüssel (unter ~/.ssh/id_dsa.pub) als erlaubter Schlüssel eingerichtet werden. Hierzu einfach den Schlüssel in der Datei ~/.ssh/authorized_keys hinzufügen, existiert die Datei nicht kann sie einfach erstellt werden. Nun sollte es möglich sein sich als User sicherung einzuloggen.

Als nächster Schritt muss dem Benutzer erlaubt werden rsync mit root-Rechten per sudo aufzurufen. Hierzu muss die Datei /etc/sudoers um folgende Zeile erweitert werden:
sicherung ALL=(root) NOPASSWD: /usr/bin/rsync *

Konfiguration

rsnapshot selbst ist schnell konfiguriert. Die Konfigurationsdatei ist einfach aufgebaut und mit Kommentaren gut dokumentiert. Gewöhnungsbedüftig ist allerdings, dass alle Parameter durch einen Tag getrannt werden müssen, Leerzeichen sind nicht zulässig. Im Paket selbst ist eine Beispielkonfiguration enthalten, die meist erst noch an die richtige Stelle kopiert werden muss:
cp /etc/rsnapshot.conf.default /etc/rsnapshot.conf

Nahezu alle Konfigurationsoptionen kann man so lassen wie sie vorgegeben sind. Wichtig zu ändern ist:

Backuppfad

Alle Backups werden in einem gemeinsamen Pfad gespeichert. Dieser Pfad ist über die Option snapshot_root einzustellen.

 
Text
1
2
# Beispiel: Backups werden in /backup/ gespeichert
snapshot_root   /backup/
Backupintervalle

Mit der Option interval können verschiedene Intervalle definiert werden. Das kleinste Intervall muss als erstes aufgelistet sein, alle weiteren der Größe nach sortiert. Jedes Intervall ist benannt und erhält eine Maximalzahl von Backupebenen.

 
Text
1
2
3
4
5
# Beispiel für die Intervallkonfiguration
interval        daily   7
interval        weekly  5
interval        monthly 12
interval        yearly  3

Im Beispiel ist das kleinste Intervall täglich, rsnapshot muss also später für das Backupintervall daily täglich aufgerufen werden. Insgesamt werden maximal 7 Tagesbackups gespeichert. Für alle anderen Intervalle ist die Bedeutung entsprechend.

rsync-Argumente

Mit rsync_short_args und rsync_long_args können die Parameter für den rsync-Aufruf festgelegt werden. Da auf dem Server sudo zum Einsatz kommt muss rsync_long_args um --rsync-path='sudo rsync' erweitert werden.

 
Text
1
2
3
# Beispielkonfiguration für die rsync-Parameter, die Bedeutung kann in der man-Page von rsync nachgelesen werden
rsync_short_args        -avz
rsync_long_args         --numeric-ids --delete-excluded --delete --delete-after --rsync-path='sudo rsync'
Dateien ausschließen

Mithilfe von den Optionen exclude und exclude_file können einzelne Dateien/Verzeichnisse aus dem Backup ausgeschlossen werden. Hier sollte /dev, /sys und /proc ausgeschlossen werden. Ist der Speicherplatz knapp oder ein Backup nicht notwendig können zusätzlich /tmp und /var/log ausgeschlossen werden. Je nach System variiert die Ausschlussliste, deswegen muss jeder Administrator selbst wissen, wie er die Liste weiter optimiert.

Backupverzeichnisse definieren

Die Option backup erlaubt es einzelne (auch entfernte) Verzeichnisse zum sichern auszuwählen. In der Konfigurationsdatei selbst sind einige Beispiele vorhanden, die die genaue Syntax erklären sollten.

rsnapshot per cron regelmäßig starten

Für jedes in der Konfiguration erstellte Intervall muss ein cronjob eingerichtet werden, entsprechend des Intervalls. Der cronjob für die tägliche Sicherung muss dementsprechend täglich gestartet werden. Damit rsnapshot weiß, welches Intervall gerade gesichert wird muss der Intervallname als erster Parameter übergeben werden. Wichtig ist außerdem, dass nicht alle Intervalle gleichzeitig gestartet werden können. Eine fertige Konfiguration könnte beispielsweise so aussehen:

 
Text
1
2
3
4
0 5 * * * /usr/bin/rsnapshot daily
0 7 * * 0 /usr/bin/rsnapshot weekly
0 9 1 * * /usr/bin/rsnapshot monthly
0 11 1 1 * /usr/bin/rsnapshot yearly

Die cronjobs müssen lokal als root laufen, da ansonsten die Benutzerrechte nicht kopiert werden können.

rsnapshot ohne root

Natürlich kann rsnapshot auch ohne root-Rechte eingesetzt werden. Hierbei können dann allerdings nur eigene Dateien gesichert werden bzw. die Benutzerrechte für fremde Dateien, auf die lesender Zugriff besteht, nicht gesichert werden.

Die Konfiguration bzgl. SSH-Zugriff, Cronjobs und rsnapshot bleibt hierbei nahezu gleich. sudo wird hierbei aber natürlich nicht benötigt.


Wikiseite bearbeiten

Diese Seite kann von jedem registrierten Benutzer bearbeitet werden. Bisher hat 1 Person an der Seite "Backups mit rsnapshot" mitgewirkt.

Sie haben einen Fehler entdeckt oder möchten etwas ergänzen? Dann können Sie nach der Anmeldung "Backups mit rsnapshot" hier bearbeiten.

Mitarbeiter