Linux als SOHO-Server

für Linux- und Windows-Clients
http://linux.eusterholz.dyndns.org

Kapitel:

Home
Debian Installation
Debian Etc.
Internet-Zugang
Telnet
FTP
r-Utilities
SSH
Printing
NTP
Nameserver
NFS/NIS/Automount
Samba (SMB-Server)
Apache (WEB-Server)
Modem / ISDN
Backup
Etc.


rsnapshot / dirvish / rdiff-backup

Grundlagen Backup ] Standard-Backup-Tools ] Backup im Netzwerk ] Bandlaufwerke ] [ rsnapshot / dirvish / rdiff-backup ] BackupPC ] Amanda ]


Auf dieser Seite werden drei ausgesuchte fertige Backup-Lösungen unter Linux exemplarisch vorgestellt. Alle vorgestellten Tools können auf Systemen ohne grafischer Oberflache, also auf Shell-Ebene, betreiben werden. Auch haben die einzelnen Tools schon eine Backup-Strategie wie inkrementelles Sichern oder rotieren von Sicherungen mit implementiert, so dass dem Benutzer viel Arbeit beim Einsatz der Tools abgenommen wird. Durch entsprechende Konfiguration, die relativ einfach zu handhaben ist, können so leistungsstarke Lösungen für kleine und mittlere große Netzwerke realisiert werden. Auch basieren die vorgestellten fertigen Lösungen auf Standart-Mechanismen, wie 'rsync'.

rsnapshot

'rsnapschot' ist ein einfach zu handhabendes Tool, zur umfangreichen Sicherung lokalen oder entfernten Daten im Netzwerk. Es basiert auf  den Tool 'rsync' in Kombination mit SSH zur Übertragung im Netzwerk. 'rsnapshot' überprüft dabei selbstständig, welche Dateien neu hinzu gekommen sind oder entfernt wurden, die Sicherung wird dabei inkrementell unter Anwendung von 'Hardlinks' abgelegt, der Speicherverbrauch auf dem Sicherungs-System wird  so drastisch minimiert. Die erstellten Sicherungen werden konfigurierbar in Tages- Wochen- und Monats-Intervallen rotiert, so dass auch eine gewisse Historie der Daten erzielt wird.

Unter Debian kann 'rsnapshot' einfach mit 'apt-get install rsnapshot' installiert werden, wie gewohnt unter Debian, werden alle Abhängigkeiten automatisch aufgelöst. Nach der Installation befindet sich die Konfigurationsdatei unter: '/etc/rsnapshot.conf'. Die Konfigurationsdatei ist auch schon quasi für Backup-Lösung vorkonfiguriert und vor allem gut dokumentiert; es brauchen nur wenige Parameter für eine eigene individuelle Lösung angepasst werden.

Im Folgenden wird eine Beispiel einer Sicherung mit 'rsnapshot' aufgezeigt, wobei der lokale Rechner 'localhost' (FQDN: 'debian.eusterholz.tld') und ein entfernter Rechner im Netz, in diesem Beispiel der Rechner 'meridian' (FQDN: 'meridian.eusterholz.tld'), gesichert werden soll. Bei beiden Rechnern sollen jeweils die Verzeichnisse '/home', '/etc' und '/usr/local' komplett inklusiver aller Unterverzeichnisse gesichert werden. Hier die notwendigen Einträge in der Datei: '/etc/rsnapshot.conf' für eine minimale Konfiguration:

/etc/rsnapshot.conf (Beispiel)

# CONFIG FILE VERSION
config_version  1.2

# SNAPSHOT ROOT DIRECTORY
snapshot_root   /RSNAPSHOT/

# EXTERNAL PROGRAM DEPENDENCIES #
cmd_cp          /bin/cp
cmd_rm          /bin/rm
cmd_rsync       /usr/bin/rsync
cmd_ssh         /usr/bin/ssh
cmd_logger      /usr/bin/logger
cmd_du          /usr/bin/du

# BACKUP INTERVALS
interval        daily   7
interval        weekly  4
interval        monthly 12


# GLOBAL OPTIONS
verbose         2
loglevel        3
logfile         /var/log/rsnapshot.log
lockfile        /var/run/rsnapshot.pid

###############################
### BACKUP POINTS / SCRIPTS ###
###############################

# 'debian.eusterholz.tld' (localhost)
backup          /home/                                     debian.eusterholz.tld/
backup          /etc/                                      debian.eusterholz.tld/
backup          /usr/local/                                debian.eusterholz.tld/


# 'meridian.eusterholz.tld'
backup          root@meridian.eusterholz.tld:/home/        meridian.eusterholz.tld/
backup          root@meridian.eusterholz.tld:/etc/         meridian.eusterholz.tld/
backup          root@meridian.eusterholz.tld:/usr/local/   meridian.eusterholz.tld/

Die aufgeführte Beispiel-Konfigurationsdatei handelt es sich um eine gekürzte und angepasste Version basierend auf der 'default'-Konfigurationsdatei. Es werden auch nur die wichtigsten Einstellungen für die individuelle Realisierung einer Datensicherung kurz erklärt:

Mit dem Parameter 'snapshot_root' wird angegeben, wo die Backups gespeichert werden.
Mit 'interval' werden den verschiedenen Backups Namen gegeben und eingestellt wie viele Versionen davon aufgehoben werden sollen. Im obigen Beispiel also '7' Tage vom täglichen Backup, '4' vom wöchentlichen Backup und '12' vom monatlichen Backup.
Der Parameter 'backup' legt fest, was, von welchem Rechnern, in welches Verzeichnis gesichert wird. Im ersten Block werden vom lokalen Rechner die Verzeichnisse '/home', '/etc' und '/usr/local' gesichert. Im zweiten Block werden die gleichen Verzeichnisse, jedoch vom Rechner 'meridian' als Benutzer 'root' über das SSH-Protokoll gesichert. Damit sicher gestellt ist, das der Backup-Rechner auf dem fremden Rechner zugreifen kann, ist für SSH ein passwort-loser Zugang einzurichten (vgl. Kapitel 'SSH').

Nach der Konfiguration, kann ein erster Test auf der Kommandozeile probiert werden, z.B. mit:

rsnapshot -V daily

Die Option '-V' veranlasst dabei, dass während der Sicherung alle Details mit ausgegeben werden (verbose). Der erste Sicherungslauf kann, je nachdem wie viel zu sichern ist, etwas länger dauern.
Nach Beendigung sollte nun die Sicherung, je nach Rechner getrennt, im Verzeichnis '/RSNAPSHOT/daily.0/debian.eusterholz.tld/' bzw. '/RSNAPSHOT/daily.0/meridian.eusterholz.tld/' abgelegt sein.

Ein erneuter Aufruf von 'rsnapshot' sollte nun schneller gehen, da nun eine inkrementelle Sicherung durchgeführt wird. Dabei wird ein neues Verzeichnis 'daily.1' angelegt, in den sich der Schnappschuss der vorherigen Sicherung befindet. Im 'daily.0'-Verzeichnis befindet sich immer der zuletzt gesicherte(aktuellste) Stand.
Bezogen auf die obige Konfiguration, würden bei weiteren Sicherungen, so sieben Verzeichnisse erstellt und vorgehalten; danach werden die ältesten Daten verworfen.

Analog gilt das gleiche für die wöchentliche und monatliche Sicherung, die mit 'rsnapshot weekly' bzw. 'rsnapschot monthly' eingeleitet werden kann.

Wenn alles funktioniert, können die einzelnen Aufträge als 'Cronjob' realisiert werden; auch hierzu ein Beispiel:

Auszug aus: 'crontab -l'

# MIN:    HOUR:   DAY:    MONTH:  WEEKD:  COMMAND:
# 0-59    0-23    1-31    1-12    0-6     /command/to/execute
#-------------------------------------------------------------------------
# daily backup every day, at 00:05
  5       0       *       *       *       /usr/bin/rsnapshot daily

# weekly backup every week, at 00:15 on monday
  15      0       *       *       1       /usr/bin/rsnapshot weekly

# monthly backup every month, at 00:25 on the 1st day of the month
  25      0       1       *       *       /usr/bin/rsnapshot monthly

In diesem Beispiel wird die tägliche Sicherung um '00:05' durchgeführt, die wöchentliche Sicherung um '00:15' Uhr immer Montags und die monatliche Sicherung jeweils am ersten tag des Monats um '00:25' Uhr. Es entstehen jetzt im Backup-Verzeichnis 7 tägliche, 4 wöchentliche und 12 monatliche Verzeichnisse mit den Sicherungen.

Unter Debian ist bei der Installation von 'rsnapshot' bereits eine Beispieldatei '/etc/cron.d/rsnapshot/rsnapshot' angelegt worden. Alternativ kann diese Datei dazu genutzt werden, um die Zeiten für Backups festzulegen. Die entsprechenden Einträge müssen auskommentiert werden und die Zeiten angepasst werden.

Weitere Beschreibungen und Beispiele können in der Dokumentation bzw. den Manualseiten zu 'rsnapshot' nachgelesen werden.

dirvish

Ähnlich wie 'rsnapshot' ist auch das Tool 'dirvish', jedoch ist es etwas schwieriger einzurichten und zu verstehen, dafür bietet es jedoch mehr Flexibilität bei der Definition von Backup-Strategien. Unter Debian kann 'dirvish' mittels 'apt-get install dirvish' nachgerüstet werden.

Bevor es nun an die Konfiguration geht, sollte man sich über einige Fachbegriffe bezüglich 'dirvish' im Klaren sein. Im Zusammenhang mit 'dirvish' ist die Rede von so genannte 'Banks' und 'Vaults'. Eine 'Bank' ist sozusagen das Ziel, wohin die Backups gespeichert werden, z.B. kann eine 'Bank' das Backup-Medium in Form eines Zielverzeichnisses wie '/backup' sein. Ein 'Vault' (englisch: Tresor) bezeichnet einen Bereich, der in der 'Bank' gesichert wird, es ist typischerweise ein Unterverzeichnis in einer 'Bank'.

In Folgenden wird die Konfiguration anhand eines kleines exemplarisches Beispiel dargestellt. Dabei soll von einen entfernten Rechner (FQDN: 'meridian.eusterholz.tld') remote über SSH das Verzeichnis '/home/' inklusive aller Unterverzeichnisse gesichert werden. Die Sicherung soll dabei zyklisch mit einer Historie erfolgen. Als Voraussetzung ist ein SSH-Zugang ohne Passwort-Abfrage vom Sicherungs-System zum Remote-System einzurichten (siehe Kapitel: 'SSH').

Für die Konfiguration ist zunächst die Hauptkonfigurationsdatei '/etc/dirvish/master.conf' zu erstellen, eine Vorlage hierfür kann unter '/usr/share/doc/dirvish/examples/' gefunden werden. Hier nun zum Beispiel:

Beispiel-Konfigurationsdatei (Bank): /etc/dirvish/master.conf

### Example 'master.conf' file:
bank:
               /MyBackup
               # other_bank
Runall:
               meridian.eusterholz.tld 02:00
               # other_vault hh:mm
image-default: %Y%m%d-%H:%M
exclude:
               lost+found/
               core
               *~
expire-default: +15 days
expire-rule:
#              MIN HR DOM MON DOW STRFTIME_FMT
               *   *  *   *   1   +6 months

Als erstes wird die 'Bank' eingerichtet, als das Verzeichnis, in das die zu sichernden Dateien abgelegt werden sollen (hier grün markiert: '/MyBackup').
Unter 'Runall:' werden die zu sichernden 'Vaults', sowie die Uhrzeiten eingetragen, wann diese gesichert werden sollen, aufgeführt (gelbe Markierung).
Mit der hinter 'image-default:' eingegebene Zeichenfolge wird der Aufbau des Namen des Sicherungsverzeichnisses im 'Vault' festgelegt.
Unter 'exclude:' werden die Verzeichnisse und Dateien eingetragen, die nicht mitgesichert werden sollen.
'expire-default: +15 days' bedeutet, dass alle Backups, die älter als '15' Tage sind, gelöscht werden sollen.

Die Konfiguration der 'Vaults' erfolgt durch Konfigurationsdateien unterhalb der in der 'master.conf' definierten Bank. Dazu ist in der Bank ein Unterverzeichnis für den 'Vault', sowie darin enthalten ein Verzeichnis 'dirvish' anlegen. Bezogen auf das Beispiel heißt dass:

mkdir -p /MyBackup/meridian.eusterholz.tld/dirvish

In dem erstellten Verzeichnis wird dann eine Datei 'default.conf' benötigt, in der die Einstellungen für den 'Vault' eingetragen werden, bezogen auf das vorgestellte Beispiel kann die Datei wie folgt aussehen:

Beispiel Vault: /MyBackup/meridian.eusterholz.tld/dirvish/default.conf

### Example 'dirvish/default.conf' file:
client:         root@meridian
tree:           /etc
xdev:           1
index:          gzip
log:            gzip
exclude:
                *.bak
                *~

Als Client ist unter 'client:' der Name des zu sichernden Clients einzutragen.
Unter 'tree:' wird das Verzeichnis angegeben, für das das Backup durchgeführt werden soll.
Mit 'xdev: 1' wird das Backup auf das Dateisystem unter 'tree' beschränkt.
Mit 'index: gzip' wird festgelegt, dass der Index, der bei der Sicherung angelegt wird, abschließend mit 'gzip' komprimiert werden soll.
Das gleiche gilt für 'log: gzip'.
Mit 'exclude:' können Dateitypen bzw. Verzeichnisse angegeben werden, die nicht mit gesichert werden sollen.

Nachdem die Konfiguration abgeschlossen ist, sollte ein erstmaliger Abgleich per Hand vorgenommen werde, z.B. mit:

dirvish --vault meridian.eusterholz.tld --init

Abhängig von der Größe des 'Vault', kann es einige Zeit dauern. Für weitere 'Vaults' sollte der Vorgang entsprechend wiederholt werden.

Nach Abschluss des ersten Backups sollte nun unter 'Bank' und 'Vault' ein neues Verzeichnis als Zeitstempel der Sicherung (grüne Markierung) erstellt sein:

debian:/MyBackup/meridian.eusterholz.tld/20070315-13:27# ls -lisa
insgesamt 36
438175  4 drwxr-xr-x   3 root root  4096 2007-03-15 13:27 .
438174  4 drwxr-xr-x   4 root root  4096 2007-03-15 13:27 ..
438182 16 -rw-r--r--   1 root root 15053 2007-03-15 13:27 index.gz
438179  4 -rw-r--r--   1 root root  3923 2007-03-15 13:27 log.gz
438177  4 -rw-r--r--   1 root root   663 2007-03-15 13:27 summary
438176  4 drwxr-xr-x  70 root root  4096 2007-03-15 06:13 tree

Innerhalb des neu erstellten Verzeichnisses sollten sich die Log-Dateien wie 'index.gz', 'log.gz' und 'summary' befinden. Die eigentliche Sicherung ist unter dem Verzeichnis 'tree' (gelbe Markierung) zu finden.

Zum Schluss muss noch sichergestellt werden, das 'dirvish' regelmäßig neue Sicherungen erstellt und die alten löscht. Bei Debian erledigt das die 'cron'-Datei: '/etc/cron.d/dirvish', die jede Nacht das Skript: '/etc/dirvish/dirvish-cronjob' aktiviert. Dort werden standardmäßig die Skripte: 'dirvish-runall' und 'dirvish-expire' aufgerufen.

Spezielle Konfiguration und Einstellungen können in der Dokumentation zu 'dirvish' nachgelesen werden.

rdiff-backup

'rdiff-backup' ist ein weiteres Tool das unter Unix/Linux zur Datensicherung lokal und über ein Netzwerk eingesetzt werden kann. Es ist unter Python realisiert und hat den 'rsync'-Algorithmus implementiert, auch ist das Abspeichern von historischen Versionen gegeben. Die Übertragung im Netzwerk findet ebenfalls wie bei den zuvor vorgestellten Tools auch über das SSH-Protokoll statt.
Zunächst ist 'rdiff-backup' zu installieren, welches unter Debian am einfachsten mit 'apt-get unstall rdiff-backup' erledigt werden kann. Soll 'rdiff-backup' im Netzwerk sichern, so ist auf jeden Rechner, der daran beteiligt ist 'rdiff-backup' zu installieren.

Vereinfacht gesagt verwendet 'rdiff-backup' folgende Syntax: 'rdiff-backup <QUELL-VERZEICHNIS> <ZIEL-VERZEICHNIS>', prinzipiell wie beim 'cp'-Kommando auch.
Um auf einen lokalen Rechner eine Verzeichnis zu sichern zeigt das folgende Beispiel:

rdiff-backup /etc /BACKUP_1

Es wird das Verzeichnis '/etc' inklusiv aller Unterverzeichnisse in das Verzeichnis '/Backup_1' gesichert. Falls das Verzeichnis '/Backup_1' noch nicht existiert so wird es angelegt.
Ein Beispiel einer Netzwerksicherung könnte wie folgt aussehen:

rdiff-backup root@meridian::/home /BACKUP_2

In diesem Beispiel wird das Verzeichnis '/home' inklusiv aller Unterverzeichnisse vom Rechner 'meridian' als Benutzer 'root' in das Verzeichnis '/BACKUP_2' gesichert. Wie bei den andern Backup-Tools auch, die auf dieser Seite vorgestellt wurden, muss ein SSH-Zugang ohne Passwort gegeben sein.

Wird das 'rdiff-backup'-Kommando wie oben, zu einen späteren Zeitpunkt nochmals aufgerufen, so werden nur die Änderungen berücksichtigt.

In den Verzeichnissen '/BACKUP_1' bzw. '/BACKUP_2' befindet sich der komplette Stand der letzten Sicherung, zusätzlich wird ein Verzeichnis 'rdiff-backup-data/' angelegt, in dem sich Informationen zu jeder Backup-Session befinden. Die Informationen in den einzelnen, zum Teil gepackten Dateien, beinhalten beispielsweise wie viele neue Files dazugekommen sind, wie viele gelöscht wurden, wie viele MB übertragen wurden.
In den Verzeichnis 'rdiff-backup-data' befindet sich noch ein weiteres Verzeichnis 'increments', indem die verschiedenen inkrementellen Versionen der sich geänderten Files aufbewahrt werden.
Man kann jede dieser Versionen durch Angabe des Zeitpunkts wiederherstellen lassen.

Mit folgenden Kommando kann man sich die inkrementellen Sicherungen und deren Daten anzeigen lassen:

rdiff-backup -l /BACKUP_2

Um nun einen Stand wieder herzustellen, wie er zu einen Zeitpunkt ursprünglich war ist 'rdiff-backup' wie folgt anzuwenden: 'rdiff-backup -r  <Zeitpunkt> <QUELL-VERZEICHNIS> <ZIEL-VERZEICHNIS>'. Die Option '-r' (restore) steht für das wiederherstellen, dahinter muss ein Zeitpunkt von wann wieder hergestellt werden soll angegeben werden. Bezogen auf das Beispiel kann ein 'Restore' wie folgt aussehen:

rdiff-backup -r now /BACKUP_2 root@meridian::/home

Die Option '-r now' bedeutet, dass der Stand der letzten Sicherung, zum Wiederherstellen genommen wird. Alternativ können auch andere Zeiträume angegeben werden, z.B. die Angabe '-r 5D' berücksichtigt die Sicherung wie Sie vor fünf Tagen war. Weitere Möglichkeiten der Zeitangabe können der Manualseite zu 'rdiff-backup' entnommen werden.

Sinnig ist es natürlich Backups zyklisch auszuführen, hierzu kann das Kommando einfach als 'cron'-Job eingetragen werden:

Auszug aus: 'crontab -l'

# MIN:    HOUR:   DAY:    MONTH:  WEEKD:  COMMAND:
# 0-59    0-23    1-31    1-12    0-6     /command/to/execute
#-------------------------------------------------------------------------
# daily backup every day, at 02:05
  5       2       *       *       *       /usr/bin/rdiff-backup root@meridian::/home /BACKUP_2

In diesem Beispiel wird eine Sicherung mit 'rdiff-backup' jeden Tag um 2:00 Uhr ausgeführt.

'rdiff-backup' verfügt über sehr viele nützliche Optionen, wie z.B. das Ausklammern bestimmter Dateien anhand von Listen oder Ausgabe von Informationen bezüglich der Inkremente. Weitere Informationen kann der Manualseite bzw. die Homepage zu 'rdiff-backup' entnommen werden

Anmerkungen

Bei allen vorgestellten Mechanismen müssen auf beiden Seiten (Server und Client) die Pakete 'ssh' und 'rsync' installiert sein.

Bei Unix-Dateisystemen ist ein Dateiname nur ein Verzeichniseintrag, der in einem Verzeichnis gespeichert ist. Neben diesem Namen ist immer auch ein Verweis auf die 'Inode' gespeichert, die dann die eigentlichen Eigenschaften (Eigentümer, Gruppenmitgliedschaft, Zugriffsrechte, usw.) der Datei und ihre physikalischen Speicheradressen auf der Platte enthält. Bei einen so genannten 'Hardlink' handelt es sich um einen neuen Verzeichniseintrag auf eine schon bestehenden 'Inode'. Genau genommen ist es ein zweiter Dateinamen für eine Datei. Da die Zugriffsrechte, Eigentümer usw. in der 'Inode' stehen, haben alle 'Hardlinks' einer Datei die selben solchen Attribute.

Auch können die auf dieser Seite vorgestellten Tools zum Teil dazu genutzt werden ein Windows System zu sichern, dazu ist dann 'Cygwin' mit den entsprechenden Komponenten zu installieren.

Weitere Infos

Homepage: rsnapshot http://www.rsnapshot.org
Homepage: Dirvish http://www.dirvish.org/
Homepage: rdiff-backup http://www.nongnu.org/rdiff-backup/
System-Dokumentation: rsnapshot /usr/share/doc/rsnapshot
System-Dokumentation: dirvish /usr/share/doc/dirvish/
System-Dokumentation: rdiff-backup /usr/share/doc/rdiff-backup
Homepage: rsync http://samba.anu.edu.au/rsync/

Home ] Nach oben ] Grundlagen Backup ] Standard-Backup-Tools ] Backup im Netzwerk ] Bandlaufwerke ] [ rsnapshot / dirvish / rdiff-backup ] BackupPC ] Amanda ]

letzte Änderung: 08. Mai 2009

 

Copyright © 2004 Norbert Eusterholz