Hetzner Backup Space / Storage Box: inkrementelles Backup mit rsnapshot

Mit etwas Aufwand lässt sich auch im Hetzner Backup Space (Storage Box) ein inkrementelles Backup mit rsnapshot einrichten.

Dieser Artikel beschreibt die Einrichtung eines inkrementellen Backups mit rsnapshot auf einer Hetzner Storage Box.
Hierzu wird der Backup Space per SSHFS gemounted. Um auch die Benutzerrechte setzen zu können wird ein Image auf der Storage Box abgelegt.
Die Einrichtung erfolgte unter Ubuntu 20.04 .

Storage Box per SSHFS mounten

SSH Key generieren und hochladen

Zunächst erstelle ich einen SSH Key und lade diesen auf den Backupspace, damit ich mich vom Server aus automatisiert einloggen kann:

 

# SSH Key generieren, alles akzeptieren, kein Passwort
$ ssh-keygen -t rsa -b 4096
# Quelle: wiki.hetzner.de/index.php/Backup_Space_SSH_Keys
$ cat /root/.ssh/id_rsa.pub >> storagebox_authorized_keys
$ echo -e "mkdir .ssh \n chmod 700 .ssh \n put storagebox_authorized_keys .ssh/authorized_keys \n 
# [BENUTERNAME] bitte entsprechend durch den Benutzernamen ersetzen.
chmod 600 .ssh/authorized_keys" | sftp [BENUTERNAME]@[BENUTERNAME].your-storagebox.de
$ sftp -P23 -i ~/.ssh/id_rsa [BENUTERNAME]@[BENUTERNAME].your-storagebox.de

 

Image erstellen und hochladen

 

$ apt install sshfs
$ fallocate -l 100G backup.img
$ mkfs.ext4 backup.img
$ mkdir /mnt/backup/
$ mount -t fuse sshfs#[BENUTERNAME]@[BENUTERNAME].your-storagebox.de:/home/ /mnt/backup/ -o port=23 -o debug
$ mv backup.img /mnt/backup/

 

Wer auf Nummer Sicher gehen möchte, kann das Image dann auch gleich mit cryptsetup/LUKS verschlüsseln.

Mount-Einträge in fstab schreiben

 

$ vim /etc/fstab

 

sshfs#[BENUTERNAME]@[BENUTERNAME].your-storagebox.de:/home/ /mnt/backup fuse uid=0,gid=0,umask=0007,port=23,reconnect,BatchMode=yes,_netdev 0 0
/mnt/backup/backup.img /var/cache/rsnapshot/ ext4 loop 0 0

 


$ mkdir -p /var/cache/rsnapshot/
$ mount /var/cache/rsnapshot/

 

Rsnapshot installieren & konfigurieren

 

$ apt install rsnapshot

 

Vorbereitung für MySQL-Backups

Da der Backup-Speicherplatz meistens eher knapp bemessen ist, komprimiere ich die Datenbank, wodurch im Normalfall sehr viel Speicherplatz eingespart werden kann.

 

$ cp /usr/share/doc/rsnapshot/examples/utils/backup_mysql.sh /usr/local/bin/
$ echo "gzip mysqldump_all_databases.sql" >> /usr/local/bin/backup_mysql.sh
$ chown root:root /usr/local/bin/backup_mysql.sh
$ chmod 755 /usr/local/bin/backup_mysql.sh

 

Vorbereitung für PostgreSQL-Backups (optional)

Auch für PostgreSQL bietet rsnapshot bereits ein Beispiel-Script an

 

$ cp /usr/share/doc/rsnapshot/examples/utils/backup_pgsql.sh /usr/local/bin/
$ echo "gzip pg_dumpall.sql" >> /usr/local/bin/backup_pgsql.sh
$ chown root:root /usr/local/bin/backup_pgsql.sh
$ chmod 755 /usr/local/bin/backup_pgsql.sh

 

Rsnapshot Konfiguration

Mein bevorzugter Kommandozeilen-Editor ist vim, dieser ist aber so eingestellt, dass Tabs mit Leerzeichen ersetzt werden. Bei rsnapshot muss man aber unbedingt auf die Tabs achten, daher verwende ich zum Bearbeiten der Konfiguration den Editor nano:

 

$ nano /etc/rsnapshot.conf

 

Im folgenden werden nur die geänderten Zeilen abgebildet.
Unbedingt auf die Tabs achten!

 

snapshot_root	/var/cache/rsnapshot

verbose	4
loglevel	4
logfile	/var/log/rsnapshot.log

retain	daily	7
retain	weekly	4
retain	monthly	6

rsync_long_args	--stats --delete --numeric-ids --relative --delete-excluded

backup	/etc/	web/
backup	/var/www/example.com/	web/	exclude=var/log,exclude=var/session
backup_script	/usr/local/bin/backup_mysql.sh	web/mysql/
backup_script	/usr/local/bin/backup_pgsql.sh	web/mysql/

 

Test und initiales Backup

Damit ich auch über den Backup-Status informiert werde, richte ich hier gleich noch rsnapreport ein und lasse mir eine Zusammenfassung per Mail senden.

 

# Test-Durchlauf
$ rsnapshot -t daily
# Repots einrichten
$ cp /usr/share/doc/rsnapshot/examples/utils/rsnapreport.pl /usr/local/bin/rsnapreport
$ chown root:root /usr/local/bin/rsnapreport
$ chmod 755 /usr/local/bin/rsnapreport
# Initiales Backup
# backup@example.com durch die eigene Mail-Adresse ersetzen!
$ rsnapshot daily 2>&1 | rsnapreport | mail -s"Backup srv001.example.com" backup@example.com

 

Cronjobs einrichten

Abschließend richte ich noch Cronjobs ein, damit das Backup künftig automatisch läuft

 

$ crontab -e

 

 Die Zeiten können selbstverständlich angepasst werden.

 

# täglich um 03:30
30 3 * * *  rsnapshot daily 2>&1 | /usr/local/bin/rsnapreport | mail -s"Backup srv001.example.com" backup@example.com
# Jeden 1. Tag der Woche um 06:30
30 6 * * 1  rsnapshot weekly 2>&1
# Jeden 1. Tag des Monats um 07:30
30 7 1 * *  rsnapshot monthly 2>&1

 

Quellen:

Update 21.09.2020: Backup Space -> Storage Box, Ubuntu 20.04

Wird der Speicherplatz eng, so kann auf ein größeres Paket umgestiegen werden. In diesem Fall muss auch das Backup-Image verößert werden. Für ein Fallbeispiel nehmen wir an, dass von 100 GB auf 1TB vergrößert wird.

Hierzu muss das Loop-Device zunächst ausgehängt werden:

$ umount /var/cache/rsnapshot

Im Anschluss wird die Image-Datei vergrößert, wieder eingehängt und das Dateisystem vergrößert:

# 1TB = 1024*1024 MB
$ dd if=/dev/zero of=/mnt/backup/backup.img bs=1M count=0 seek=1048576
$ mount /var/cache/rsnapshot
$ resize2fs /mnt/backup/backup.img

Kommentare und Antworten

×

Name ist erforderlich!

Geben Sie einen gültigen Namen ein

Gültige E-Mail ist erforderlich!

Gib eine gültige E-Mail Adresse ein

Kommentar ist erforderlich!

Captcha Code Kann das Bild nicht gelesen werden? Klicken Sie hier, um zu aktualisieren

Captcha ist erforderlich!

Code stimmt nicht überein!

* Diese Felder sind erforderlich.

Bemerkungen :

  • user
    Theo 13.03.2024 um 07:18
    expert system dissertation dissertation problem statement
    sample