Rsnapshot

Aus ConfigWiki
Wechseln zu: Navigation, Suche

Es erstellt versionierte Backups und kann mehrere lokale und entfernte Quellen via rsync + ssh sichern.

Die einzelnen Quellen werden sequenziell abgearbeitet, sodaß einerseits keine zu hohe Last auf dem System entsteht, andererseits langsame Verbindungen den Prozeß stark in die Länge ziehen können. Um dies zu verhindern, können mehrere Konfigurationen angelegt werden, die durch separate Cronjobs getrennt aufgerufen werden.

Wichtige Anpassungen in der Konfiguration /etc/rsnapshot.conf:

snapshot_root	/srv/backup/
rsync_short_args	-av
rsync_long_args	--delete --numeric-ids --relative --delete-excluded
ssh_args	-C -i /etc/rsnapshot.d/id_rsa
exclude_file	/etc/rsnapshot.d/exclude.list

logfile	/var/log/rsnapshot.log
lockfile	/var/run/rsnapshot.pid

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

backup_script	/bin/date "+ backup of LOCALHOST started at %c"	unused0
backup	/home/		localhost/
backup	/etc/		localhost/
backup	/root/		localhost/
backup	/var/backups/	localhost/

backup_script	/bin/date "+ backup of SRV01 started at %c"	unused1
backup	root@srv01:/home/ :/var/backups/ :/etc/ :/root/	srv01/	exclude_file=/etc/rsnapshot.d/exclude-srv01.list

backup_script	/bin/date "+ backup ended at %c"	unused9

Da die Basiskonfiguration von rsnapshot direkt in /etc liegt, legen wir für weitere Dateien das Verzeichnis /etc/rsnapshot.d an. Darin werden der SSH-Key (id_rsa), die exclude.list für localhost, weitere exclude-*.list für externe Backupquellen, sowie später weitere *.conf für eigene Prozesse abgelegt.

exclude.list:

*/tmp/*
*/sess_*
*.tmp
*.bak
*.log
*.log.1

In weiteren Konfigurationen muß auf jeden Fall ein abweichendes snapshot_root verwendet werden!

Da jeder Backuplauf die darin enthaltenen Verzeichnisse rotiert, würde dies zu häufig geschehen und ältere Backups früher als geplant gelöscht. Es entstehen u.U. auch Lücken in den Backups, falls sich die Intervalle unterscheiden. Das hat wiederum zur Folge, daß unnötige Vollbackups gezogen werden. Dadurch steigt sowohl die übertragene Datenmenge als auch der benötigte Festplattenplatz enorm an.

Damit die Backupprozesse unabhängig voneinander laufen können, benötigt jeder ein eigenes lockfile.

Bei Bedarf kann auch ein eigenes logfile und ggf. auch ein eigener SSH-Key angegeben werden. Das exclude_file ist bei zusätzlichen Konfigurationen nicht nötig, da es hier in dem Backup-Aufruf als exclude_file=... angegeben wird.

Den SSH-Key erzeugen wir mit

~# ssh-keygen -C rsnapshot@backup-server -f /etc/rsnapshot.d/id_rsa

und geben kein Passwort an.

Danach kann dieser mit

~# ssh-copy-id -i /etc/rsnapshot.d/id_rsa root@srv01

übertragen werden. Dazu wird aber ein Login per Passwort bei root auf srv01 oder besser ein dort hinterlegter Key benötigt, der per ForwardAgent in der aktuellen Sitzung aktiv ist. Sonst muß der Key per scp übertragen und lokal an die authorized_keys angefügt werden.

Falls der Key nicht per ssh vom Backupserver zum Backupclient übertragen wird, ist zumindest eine SSH-Testverbindung zu diesem aufzubauen, da sonst das Backup aufgrund fehlendem Hostkey abbricht.

Mehrere zu sichernde entfernte Verzeichnisse werden mit einem ":" beginnend angegeben (siehe auch man rsync). Diese Verzeichnisse tauchen auch in der Zeile des Backup-Keys in der authorized_keys des zu sichernden Servers auf:

from="backup-server",no-pty,no-port-forwarding,no-X11-forwarding,no-agent-forwarding,\
command="rsync --server --sender -vlogDtprRe.iLsf --numeric-ids . /home/ /var/backups/ /etc/ /root" \
ssh-rsa AAA...Bw1 rsnapshot@backup-server

(alles in einer Zeile, vor command darf kein Leerzeichen stehen, die \ stehen für das Zeilenende und sind inkl. Zeilenumbruch wieder zu entfernen)

Die Angabe des Servernamens im from="..." ermittelt man am Besten mit

~# host $BACKUPSERVER_IP

auf dem zu sichernden Server.

Falls jedoch beim SSH-Server des Clients die Option UseDNS no in der sshd_config gesetzt ist, so ist an dieser Stelle die IP-Adresse einzutragen, da die Verbindung sonst abgelehnt wird.

Die rsync-Optionen korrespondieren mit denen aus der rsnapshot-Konfiguration. Anpassungen müssen auf beiden Seiten erfolgen. Stimmt der Aufruf nicht überein, schlägt rsync fehl, wird ein Verzeichnis nur in der .conf am Ende ergänzt, wird dieses ignoriert. Zu beachten ist der fehlende "/" hinter der letzten Pfadangabe.

Die date-Aufrufe sind nur informativ, um den zeitlichen Ablauf in der Status-Mail zu sehen. Das dahinter angegebene unused* darf in einer Konfiguration nicht mehrfach verwendet werden, da es als Dummy für das Backup-Target steht. Ein mehrfach verwendetes Backup-Target verhindert die Ausführung des Backups.

Ein eigener Prozeß für das mit einer langsamen Leitung angeschlossene Büro würde etwa so aussehen:

/etc/rsnaphot.d/buero.conf

snapshot_root	/srv/backup_buero/
rsync_short_args	-av
rsync_long_args	--delete --numeric-ids --relative --delete-excluded
ssh_args	-C -i /etc/rsnapshot.d/id_rsa

logfile	/var/log/rsnapshot-buero.log
lockfile	/var/run/rsnapshot-buero.pid

#interval	hourly

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

backup_script	/bin/date "+ backup of BUERO started at %c"	unused1
backup	root@srv01:/home/ :/var/backups/ :/etc/ :/root/	srv01/	exclude_file=/etc/rsnapshot.d/exclude-buero.list

backup_script	/bin/date "+ backup ended at %c"	unused9

Für den eigenen Cronjob wird /etc/cron.d/rsnapshot kopiert:

~# cp /etc/cron.d/rsnapshot /etc/cron.d/rsnapshot-buero

und angepaßt:

#10 1-23/4 * * *		root	/usr/bin/rsnapshot -c /etc/rsnapshot.d/buero.conf hourly
35 1  	* * *		root	/usr/bin/rsnapshot -c /etc/rsnapshot.d/buero.conf daily
5  1  	* * 1		root	/usr/bin/rsnapshot -c /etc/rsnapshot.d/buero.conf weekly
35 0  	1 * *		root	/usr/bin/rsnapshot -c /etc/rsnapshot.d/buero.conf monthly

Die stündliche Sicherung wird sowohl in der buero.conf, als auch im Cronjob deaktiviert, damit das Backup den Internetzugang tagsüber nicht lahmlegt.

Meine Werkzeuge