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.
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
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
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
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.
Für diese Präsentation wurde "S5 reloaded" http://www.netzgesta.de/S5/ verwendet