Rsnapshot
K |
|||
(4 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
+ | [[Category:Linux]] | ||
Es erstellt versionierte Backups und kann mehrere lokale und entfernte Quellen via rsync + ssh sichern. | Es erstellt versionierte Backups und kann mehrere lokale und entfernte Quellen via rsync + ssh sichern. | ||
Zeile 31: | Zeile 32: | ||
Da die Basiskonfiguration von rsnapshot direkt in /etc liegt, legen wir für weitere Dateien das Verzeichnis '''/etc/rsnapshot.d''' an. | 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. | 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! | In weiteren Konfigurationen muß auf jeden Fall ein abweichendes '''snapshot_root''' verwendet werden! | ||
Zeile 47: | Zeile 56: | ||
~# ssh-copy-id -i /etc/rsnapshot.d/id_rsa root@srv01 | ~# 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. | ü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: | 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,\ | 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 | + | 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 | Die Angabe des Servernamens im from="..." ermittelt man am Besten mit | ||
~# host $BACKUPSERVER_IP | ~# host $BACKUPSERVER_IP | ||
auf dem zu sichernden Server. | 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 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. |
Aktuelle Version vom 7. Februar 2012, 18:50 Uhr
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.