rsnapshot – Finn Christiansen https://blogarchive.finnchristiansen.de Softwareentwickler mit einer Vorliebe für freie Software und GNU / Linux Sat, 08 Dec 2018 16:50:58 +0000 de-DE hourly 1 https://wordpress.org/?v=5.1.1 https://blogarchive.finnchristiansen.de/wp-content/uploads/2017/01/cropped-FinnsBlog512-32x32.png rsnapshot – Finn Christiansen https://blogarchive.finnchristiansen.de 32 32 Inkrementelle Remote-Backups mit rsnapshot https://blogarchive.finnchristiansen.de/2016/03/27/inkrementelle-remote-backups-mit-rsnapshot/ https://blogarchive.finnchristiansen.de/2016/03/27/inkrementelle-remote-backups-mit-rsnapshot/#comments Sun, 27 Mar 2016 08:45:47 +0000 https://www.finnchristiansen.de/?p=26 Continue reading ]]> Dass regelmäßige Backups unerlässlich sind, ist kein neues Thema. Seit mehreren Jahren setze ich das zuverlässige rsnapshot ein, welches mit Hilfe von rsync und SSH inkrementelle, rotiernde Backups anderer Server ausführen kann. Ein einziges regelmäßiges Voll-Backup ist keine gute Idee, da eine zu wiederherstellende Datei vielleicht zu spät bemerkt und in das Backup übernommen wird. Der zusätzliche benötigte Speicherplatz hält sich in Grenzen, da rsnapshot unveränderte Dateien nicht erneut sichert, sondern einen Hardlink erzeugt. Ich zeige euch kurz meine Konfiguration, welche Backups per SSH ausführt und jeweils Backups der Tage, Wochen und Monate aufhebt.

Der Backup-Server selbst läuft mit Ubuntu 14.04 LTS, die übrigen Server sind Debian 8 Server. Es gibt leider ein kleines Problem mit rsnapshot bei Ubuntu 14.04, weshalb die manuelle Installation der aktuelleren rsnapshot Version ignoriert werden kann, falls kein Ubuntu 14.04 als Backup Server eingesetzt wird. Die Befehle und Konfiguration sollten aber im Prinzip ziemlich identisch bzw. austauschbar sein. Alle folgenden Befehle werden als Root ausgeführt.

Konfiguration des Backup-Servers

Serverseitig sind abgesehen von der Installation und Konfiguration von rsnapshot weniger Vorbereitungen notwendig.

# rsnapshot installieren (oder manuell installieren, falls vom Bug in rsnapshot 1.3.1-4 betroffen)
apt-get install rsnapshot
# SSH Schlüsselpaar erzeugen
ssh-keygen
# Falls vom rsnapshot Bug betroffen, aktuellere Version installieren
wget https://launchpad.net/ubuntu/+archive/primary/+files/rsnapshot_1.4.0-1_all.deb
dpkg -i rsnapshot_1.4.0-1_all.deb
# rsnapshot Konfiguration vornehmen ...
vim /etc/rsnapshot.conf

Ich habe aus meiner rsnapshot.conf mal alle Kommentare und leere Zeilen entfernt, so dass die wesentliche Konfiguration übrig bleibt. Ein paar Zeilen habe ich zwecks Erläuterung wieder kommentiert:

config_version	1.2
snapshot_root	/home/rsnapshot/
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
# Die Bezeichnungen daily, weekly und monthly dienen nur der besseren Zuordnung.
# Die regelmäßige Ausführung wird über einen entsprechenden Cronjob erreicht.
retain		daily	7
retain		weekly	4
retain		monthly	3
verbose		2
loglevel	3
logfile		/var/log/rsnapshot.log
lockfile	/var/run/rsnapshot.pid
# rsync soll auf den Backup-Clients mit sudo aufgerufen werden.
rsync_long_args		-evpE --rsync-path='sudo rsync'
# Der SSH Schlüssel des root Benutzer soll verwendet werden
ssh_args	-i /root/.ssh/id_rsa
# Die zu sichernden Server / Verzeichnisse (nur ein paar Beispiele)
# Format: backup Quelle Ziel (Ziel = snapshot_root + [daily|weekly|monthly] + Pfad)
backup	rsnapshot@mail.finnchristiansen.de:/etc/	mail.finnchristiansen.de/etc/
backup	rsnapshot@mail.finnchristiansen.de:/home/	mail.finnchristiansen.de/home/
# Einzelne Verzeichnisse können ignoriert werden
backup	rsnapshot@mail.finnchristiansen.de:/var/	mail.finnchristiansen.de/var/	+rsync_long_args=--exclude=/var/cache/ --exclude=/var/lock/ --exclude=/var/run/
backup	rsnapshot@data.finnchristiansen.de:/etc/	data.finnchristiansen.de/etc/

Vorbereitungen auf dem zu sicherenden Server (Backup-Client)

Rsnapshot führt die Sicherung per SSH durch, weshalb ein User angelegt werden muss. Dieser wird sich einloggen und rsync mit sudo aufrufen, weshalb noch ein entsprechender sudoers Eintrag erforderlich ist.

# Falls noch nicht geschehen, sudo installieren
apt-get install sudo
# Nutzer für das Backup anlegen
useradd -m -s /bin/bash rsnapshot
# Dem Nutzer erlauben, rsync mit sudo aufzurufen
echo "rsnapshot ALL=NOPASSWD: /usr/bin/rsync" > /etc/sudoers.d/rsnapshot
# Anmeldung per SSH-Schlüssel ermöglichen
mkdir /home/rsnapshot/.ssh
# Auf dem Backup-Server mit "cat /root/.ssh/id_rsa.pub" den öffentlichen Schlüssel anzeigen und kopieren (da rsnapshot als root ausgeführt wird)
echo "<Öffenterlicher Schlüssel des root-Nutzers des Backup-Servers>" >> /home/rsnapshot/.ssh/authorized_keys
# Eigentümer und Berechtigungen des .ssh Verzeichnisses und der Datei authorized_keys anpassen
chown -R rsnapshot: /home/rsnapshot/.ssh/
chmod 700 /home/rsnapshot/.ssh/
chmod 600 /home/rsnapshot/.ssh/authorized_keys

Zurück zum Backup-Server

Nachdem die Vorbereitungen auf den Backup-Clients vorgenommen wurde, wird der SSH Fingerprint des Backup-Clients zur Liste bekannter Hosts hinzugefügt, rsnapshot einmal manuell getestet und anschließend ein Cronjob angelegt.

# SSH Login testen und SSH Fingerprint mit "yes" bestätigen, mit "exit" Verbindung wieder trennen
ssh rsnapshot@server.tld
# rsnapshot manuell testen
rsnapshot daily
# Wenn rsnapshot fehlerfrei ausgeführt wird, Cronjob erstellen:
vim /etc/cron.d/rsnapshot
# und folgenden Inhalt einfügen
30 3 1 * * root /usr/bin/rsnapshot monthly
40 3 * * 0 root /usr/bin/rsnapshot weekly
50 3 * * * root /usr/bin/rsnapshot daily

Bei Backups ist es wichtig, dass der Backup-Server unabhängig von den zu sichernden Servern ist. Zu Hause erledigt die Backups ein auf OpenMediaVault basierendes NAS mit RAID5, hier setze ich jetzt auf einen Strato vServer, um die anderen vServer bei active-servers oder Hetzner zu sichern.

]]>
https://blogarchive.finnchristiansen.de/2016/03/27/inkrementelle-remote-backups-mit-rsnapshot/feed/ 1