rsnapshot

zur automatisierten Datensicherung

Ralph Lindner

www.hadiag.com

Dieser Vortrag wurde für das Workshop-Weekend der www.lusc.de am 2008-10-08 vorbereitet. Er findet sich online unter http://www.hadiag.com/service/rsnapshot.html
Tel. +49 911 2879779
Dies ist eine nicht angezeigte Anmerkung zur Folie.

Welche Gefahren drohen?

  • Hardwarefehler z.B. Ausfall einer Festplatte oder eines Controllers
  • Benutzerfehler (versehentliches Löschen von Daten und Sabotage)
  • Softwarefehler (bzw. Schadsoftware, Cracker etc.)
  • höhere Gewalt (Brand, Wasser, Blitzschlag)
  • Diebstahl (Einbruch)
Verschiedene Risiken erfordern verschiedene Maßnahmen, 
z.B. Bei versehentlichem Löschen einer Datei durch einen Benutzer hilft kein RAID-System.
oder das schönste Backup nützt nichts, wenn ein unterbrechungsfreier Betrieb gewährleistet sein muss,
oder das beste Backup auf einer zweiten Platte nützt nichts, wenn der komplette Computer gestohlen wird, abfackelt oder unter Wasser steht.
		

Was ist rsnapshot?

  • rsnapshot ist eine Sammlung von perl-Skripten,...
  • ...die Unix-Standardmechanismen (wie z.B. rsync, ssh und hardlinks) nutzt um eine ...
  • ...frei konfigurierbare automatisierte Kopie von Daten vorzunehmen.

Vorteile und Einsatz von rsnapshot

  • rsnapshot KOPIERT Dateien von localhost oder einen fremden Computer (mit SSH)
  • rsnapshot erstellt mehrere (mehrer tägliche, wöchentliche, monatliche) "Schnappschüsse"
  • völlig Hard- und Softwareunabhängig (basiert komplett auf Standard GPL-Software)
  • ist schnell
  • ist effektiv, da nur eine physikalische Kopie einer jeden Daten erfolgt (hardlinks)
  • ist transparent: alle Dateien in einem "Original"-Verzeichnisbaum

Die Installation

rsnapshot ist unter der GPL lizensiert

rsnapshot kann als fertiges Paket (deb, rpm) oder von den Quellen installiert werden.

Das Debian-Paket von http://www.rsnapshot.org/downloads.html ist nicht aktuell, weshalb im folgenden die Installation von den Quellen beschrieben wird.

aptitude update&& aptitude install rsnapshot
installiert derzeit (2008-08-09) Version 1.2.9
laut http://sourceforge.net/project/showfiles.php?group_id=88546 Versionsstand (2008-08-09)
2006-05-23 Version 1.2.9
2006-10-20 Version 1.3.0

Da kein aktuelles Debian-Paket für Ubuntuu verfügbar ist, Installation von den Quellen:
wget http://downloads.sourceforge.net/rsnapshot/rsnapshot-1.3.0.tar.gz?modtime=1161453320&big_mirror=0
...entpacken... 

ralph@lina:~/rsnapshot-1.3.0$ ./configure --sysconfdir=/etc make
configure: WARNING: you should use --build, --host, --target
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for gawk... no
checking for mawk... mawk
checking whether make sets $(MAKE)... yes
checking whether make sets $(MAKE)... (cached) yes
checking for a BSD-compatible install... /usr/bin/install -c
checking for perl... /usr/bin/perl
checking for rsync... /usr/bin/rsync
checking for cp... /bin/cp
checking for rm... /bin/rm
checking for ssh... /usr/bin/ssh
checking for logger... /usr/bin/logger
checking for du... /usr/bin/du
configure: creating ./config.status
config.status: creating Makefile
config.status: creating rsnapshot
config.status: creating rsnapshot-diff
config.status: creating rsnapshot.conf.default
config.status: creating t/support/etc/configtest.conf
config.status: creating t/support/etc/rsync.conf
config.status: creating t/support/etc/gnu_cp.conf
config.status: creating t/support/etc/relative_delete_bugfix.conf
config.status: creating t/configtest.t
config.status: creating t/rsync.t
config.status: creating t/gnu_cp.t
config.status: creating t/relative_delete_bugfix.t

Now type  "make test"    to run the regression test suite.
Then type "make install" to install the program.

After rsnapshot is installed, don't forget to copy
/etc,/rsnapshot.conf.default to /etc,/rsnapshot.conf

ralph@lina:~/rsnapshot-1.3.0$ make test
/usr/bin/perl -MTest::Harness -e 'runtests(glob "t/*.t")';
t/configtest................ok
t/gnu_cp....................ok
t/relative_delete_bugfix....ok
t/rsync.....................ok
All tests successful.
Files=4, Tests=5,  1 wallclock secs ( 0.46 cusr +  0.09 csys =  0.55 CPU)
ralph@lina:~/rsnapshot-1.3.0$

ralph@lina:~/rsnapshot-1.3.0$ sudo make install
[sudo] password for ralph:
/usr/bin/pod2man -c '' -n 'rsnapshot' -r '' rsnapshot > rsnapshot.1
make[1]: Entering directory `/home/ralph/rsnapshot-1.3.0'
test -z "/usr/local/bin" || mkdir -p -- "/usr/local/bin"
 /usr/bin/install -c 'rsnapshot' '/usr/local/bin/rsnapshot'
 /usr/bin/install -c 'rsnapshot-diff' '/usr/local/bin/rsnapshot-diff'
test -z "/etc," || mkdir -p -- "/etc,"
 /usr/bin/install -c -m 644 'rsnapshot.conf.default' '/etc,/rsnapshot.conf.default'
test -z "/usr/local/man/man1" || mkdir -p -- "/usr/local/man/man1"
 /usr/bin/install -c -m 644 './rsnapshot.1' '/usr/local/man/man1/rsnapshot.1'
make[1]: Leaving directory `/home/ralph/rsnapshot-1.3.0'
ralph@lina:~/rsnapshot-1.3.0$

root@lina:/home/ralph/rsnapshot-1.3.0# cp rsnapshot.conf.default /etc/rsnapshot.conf

Die Datei rsnapshot.conf

  • enthält alle Einstellungen zu rsnapshot,
  • befindet sich in /etc
  • wird mit root-Rechten bearbeitet
  • muss als Feldtrenner Tabs enthalten, keine Leerzeichen!
  • Jetzt von der Präsentationsdarstellung mit t in die Outline-Darstellung umschalten - und zurück!
Anpassen der /etc/rsnapshot.conf

1) Angeben, wohin das Backup kopiert werden soll
snapshot_root   /.snapshots/
(Das Backup sollte auf jeden Fall auf eine andere Festplatte erfolgen.)

2) Das Backup-Verzeichnis soll NICHT angelegt werden, falls nicht vorhanden, damit im Falle eines nicht gemounteten Backupmediums kein Backup direkt in den /mnt-Pfad erstellt wird.
no_create_root  1
 
3) unter Linux
cmd_cp          /bin/cp

4) falls auch Backup über ssh geplant ist:
cmd_ssh /usr/bin/ssh

5) Pfadeermitteln (z.B. mit 'whereis du') und Einträge ändern
cmd_du          /usr/bin/du
cmd_rsnapshot_diff      /usr/local/bin/rsnapshot-diff

Falls vor oder nach der Ausführung von rsnapshot ein Skript ausgeführt werden soll, z.B. um ein Backupmedium zu mounten oder zu überprüfen, können die Skripte wie folgt aufgerufen werden:
cmd_preexec    /path/to/preexec/script
cmd_postexec   /path/to/postexec/script


Backup-Intervalle definieren
...

Umfang der Systemmeldungen und Logdateieinträge definieren, 

Falls Probleme auftreten, empfiehlt es sich den Umfang der Hinweise zu erhöhen um mehr aussagekräftige Hinweise zu finden. Üblich ist:
verbose 2 

Nicht nur der Umfang der Hinweise, sondern auch der Umfang der Logfileeinträge kann angepasst werden:
loglevel 3

Damit überhaupt eine Logdatei geschrieben werden kann, sollte der logfile-Eintrag aktiviert werden:
logfile /var/log/rsnapshot


...
Parameter für ssh, du
....

includes und excludes

überprüfen ob installiertes rsync link-dest unterstützt und dann ggf. aktivieren
rsync link-dest

link_dest       1

Üblicherweise entfernt rsnapshot nach dem Start zunächst das älteste Backup. Je nach Umfang des Backups kann dies auch länger dauern. So lange ist rsnapshot blockiert. Wenn man den Ablauf beschleunigen möchte, kann man use_lazy_deletes aktivieren. Dies führt dazu, dass das zu löschende Backup zunächst in *name*.delete umbenannt wird. Weitere rsnapshot-Prozesse können also gestartet werden, bevor das finale Löschen des ältesten Backups fertiggestellt ist. Diese Einstellung bedeutet einen zusätzlichen Bedarf an Speicherplatz für dieses zusätzliche temporäre Backup.

exclude-Anweisungen
Es ist nicht sinnvoll Cache-Dateien von Browsern, temporäre Dateien etc. zu sichern.
Solche Verzeichnisse und Dateien kann man mit einer exclude-Anweisung ausschließen. Die Syntax entspricht der exclude-Anweisung von rsync.
Beispiele:
exclude	/Cache
exclude	.cache
exclude .bak
exclude .Papierkorb
exclude /unsicher 

Mehrere Snapshotversionen per cronjob erstellen

ralph@lina:/.snapshots$ ls -l
total 84
drwxr-xr-x 3 root root  4096 2008-10-04 00:00 daily.0
drwxr-xr-x 3 root root  4096 2008-10-03 00:00 daily.1
drwxr-xr-x 3 root root  4096 2008-10-02 00:01 daily.2
drwxr-xr-x 3 root root  4096 2008-10-01 00:00 daily.3
drwxr-xr-x 3 root root  4096 2008-09-30 00:00 daily.4
drwxr-xr-x 3 root root  4096 2008-09-29 00:00 daily.5
drwxr-xr-x 3 root root  4096 2008-09-28 00:00 daily.6
drwxr-xr-x 3 root root  4096 2008-10-05 12:00 hourly.0
drwxr-xr-x 3 root root  4096 2008-10-05 08:00 hourly.1
drwxr-xr-x 3 root root  4096 2008-10-05 04:00 hourly.2
drwxr-xr-x 3 root root  4096 2008-10-05 00:00 hourly.3
drwxr-xr-x 3 root root  4096 2008-10-04 20:00 hourly.4
drwxr-xr-x 3 root root  4096 2008-10-04 16:00 hourly.5
drwx------ 2 root root 16384 2008-08-09 17:27 lost+found
drwxr-xr-x 3 root root  4096 2008-09-26 00:01 weekly.0
drwxr-xr-x 3 root root  4096 2008-09-19 00:00 weekly.1
drwxr-xr-x 3 root root  4096 2008-09-02 00:00 weekly.2
drwxr-xr-x 3 root root  4096 2008-08-25 00:00 weekly.3
	
root$ crontab -e

#   * * * * * auszuführender Befehl
#   - - - - -
#   ¦ ¦ ¦ ¦ ¦
#   ¦ ¦ ¦ ¦ +---- Wochentag (0-7) (Sonntag =0 oder =7)
#   ¦ ¦ ¦ +------ Monat (1-12)
#   ¦ ¦ +-------- Tag (1-31)
#   ¦ +---------- Stunde (0-23)
#   +------------ Minute (0-59)

20 20 20 * *      /usr/local/bin/rsnapshot monthly
21 21 * * 5       /usr/local/bin/rsnapshot weekly
23 23 * * *       /usr/local/bin/rsnapshot daily
0 */4 * * *       /usr/local/bin/rsnapshot hourly

Einstellungen testen

  • rsnapshot configtest
  • rsnapshot daily aufrufen
  • .snapshots untersuchen

		

was sollte man sonst noch sichern?

  • z.B. Datenbanken
    1. Erstellen eines Scriptes, das einen Dump bzw. ein Datenbankbackup erzeugt.
    2. Mit dem Parameter backup_script das Script beim rsnapshot-Lauf aufrufen.
Der Parameter backup_script
Als erster Parameter wird der komplette Pfad zum auszuführenden Skript angegeben. 
Als zweiter Parameter wird der lokale Zielpfad angegeben.
z.B. backup_script /usr/local/bin/backup_pgsql.sh localhost/postgres/

Bei obigem Beispiel wird rsnapshot das Skript /usr/local/bin/backup_pgsql.sh in einem temporären Verzeichnis ausführen und dann die Ausgabe im Verzeichnis localhost/postgres/ unter dem  Verzeichnis .snapshot/ speichern.
Das Beispielskript backup_pgsql.sh zum Sichern von PostgreSQL-Backups befindet sich im Verzeichnis utils/ der Quellcodedistribution.

Grundsätzlich gilt: Das Backupscript muss die zu sichernden Dateien im aktuellen Verzeichnis erstellen. Es ist egal wie und wieviele Dateien erzeugt werden, aber es darf kein Pfad für die Ausgabe vordefiniert werden, da rsnapshot ein temporäres Verzeichnis anlegt, dorthin wechselt, das Skript ausführt und dann den gesamten Inhalt des temporären Verzeichnisses in den localen Pfad kopiert, der als dritter Parameter definiert wurde.

Typisch ist z.B. ein Backupscript zur Sicherung von mysql-Datenbanken, es könnte so aussehen:

#!/bin/sh
/usr/bin/mysqldump -uroot mydatabase > mydatabase.sql
/bin/chmod 644 mydatabase.sql

Im Verzeichnis utils/ der rsnapshot Quelldistribution befinden sich weitere Beispiele.

Make sure the destination path you specify is unique. The backup script will completely overwrite anything
in the destination path, so if you tried to specify the same destination twice, you would be left with
only the files from the last script. Fortunately, rsnapshot will try to prevent you from doing this when it
reads the config file.

SICHERHEITSHINWEIS:
Da die Skripte mit den Benutzerrechten dessen ausgeführt werden, der rsnapshot startet, muss sichergestellt sein, dass der Eigentümer der Backup-Skripte der rsnapshot-Benutzer (üblicherweise root) ist und für niemanden sonst ein Schreibzugriff erlaubt ist. Falls dies versäumt wird kann jeder Benutzer mit Schreibzugriff auf die Backupskriptdatei odort Kommandos eintrage, die dann mit root-Rechten ausgeführt werden.

Cronjob einrichten


		

Daten von entferntem Server sichern

  • ssh-key generieren

		

Daten auf externer Platte sichern

  • überprüfen ob Medium gemounted ist
  • wenn ja, Backup auf Medium sichern und "Erfolgsmail" versenden
  • wenn nein, Logeintrag vornehmen

		

sonstiges

  • rsnapshot als root ausführen?
  • Sicherungsmedium mounten - unmounten?
  • rsnapshot du .snapshots
  • Windows mit rsnapshot sichern?

		

weiterführende Links

credits

Für diese Präsentation wurde "S5 reloaded" http://www.netzgesta.de/S5/ verwendet