Datensicherung für die Nextcloud mit BorgBackup

Bevor es los geht, nein der Name Borg hat nichts mit den Borg aus dem Star Trek Universum zu tun. Der Name leitet sich vom Entwickler Jonas Borgström ab.

Aber nun zum Backup-Tool.

BorgBackup ist ein Deduplikationsbackupprogramm. Ganz grob gesagt bas bedeutet, dass Daten, die mehrmals auf dem Quelllaufwerk vorhanden sind, nur einmal auf dem Backup-Laufwerk abgespeichert werden.

Das spart im ganzen Prozess Zeit für die Übertragungen der Daten und auch Platz auf dem Backup-Laufwerk. BorgBackup zerlegt zu diesem Zweck das Backup in kleinere Teile, um diese zu vergleichen. Sind die Daten bereits im Backup vorhanden, werden sie nicht nocheinmal abgespeichert. Das spart vorallem bei sehr großen Dateien viel Zeit, wie bei Abbildern von virtuellen Maschinen.

BorgBackup bietet weitere nützliche Features an, wie z.B. eine komplette Verschlüsselung der Backup-Daten.

Bei mir verwende ich BorgBackup um eine Datensicherung meiner Nextcloud-Instanz auf ein openmediavault zu erstellen. Dazu habe ich auf dem Nextcloud-Server ein kleines Shell-Skript angelegt, um die Datensicherung (fast) automatisch durchzuführen.

Auch openmediavault hat eine Erweiterung, die BorgBackup unterstützt. Die habe ich aber in diesem Fall bewusst nicht genommen, sondern ich wollte den gesamten Backup-Prozess vom Nextcloud-Server aus starten.

openmediavault

In openmediavault ist das NFS-Laufwerk einzurichten, damit ihr das bei eurem Nextcloud-Server einbinden könnt.

openmediavault - NFS-Freigabe
openmediavault – NFS-Freigabe

Im Artikel ➡ openmediavault – NAS mit einem Raspberry Pi 4 findet ihr weitere Informationen zur Konfiguration von openmediavault.

Nextcloud

Das folgende Skript kann an die eigenen Bedürfnisse angepasst werden. Ich habe versucht Variablen zu verwenden, um die Konfiguration recht einfach zu gestallten.
Bei mir auf dem Nextcloud-Server habe ich zwei Skripte angelegt:

  • das erste Skript sichert die Nextcloud Configuration, z.B. borgbackup-nextcloud-config.sh
  • das zweite Skript sichert den kompletten Nextcloud-Daten, z.B. borgbackup-nextcloud-data.sh

Beide Skripte habe ich auf meinem Nextcloud-Server im Verzeichnis “/etc/skripte” abgespeichert.

Dieses Skript sichert das Verzeichnis /mnt/data, dass sämtliche Daten meiner Nextcloud enthält. Weiterführende Informationen dazu findet ihr in meinem Artikel
Nextcloud auf dem Raspberry Pi

Für die Anleitung nenne ich das Skript borgbackup-nextcloud-data.sh

#!/bin/bash

# Skript erstellt von strobelstefan.org
# Datensicherung für die Nextcloud mit BorgBackup
# https://strobelstefan.org/?p=8073

# Skriptvorlage BorgBackup
# https://wiki.ubuntuusers.de/BorgBackup/
# https://borgbackup.readthedocs.io/en/stable/


##############################
# BorgBackup Konfiguration
##############################

# Hier Pfad zum Sicherungsmedium angeben.
zielpfad="/mnt/openmediavault/Nextcloud-Backup/borgbackup"

# Hier Namen des Repositorys angeben.
repository="nextcloud-data"

# Hier eine Liste mit den zu sichernden Verzeichnissen angeben
sicherung="/mnt/data/"

# Hier die Art der Verschlüsselung angeben
# Bitte BorgBackup für weitere Informationen zur Verschlüsselung anschausen
# --> https://readthedocs.org/projects/borgbackup/downloads/
verschluesselung="repokey"

# Hier die Art der Kompression angeben
# Bitte BorgBackup für weitere Informationen zur Verschlüsselung anschausen
# --> https://readthedocs.org/projects/borgbackup/downloads/
kompression="lz4"

# Hier angeben, ob vor der Ausführung von BorgBackup auf vorhandene Root-Rechte geprüft werden soll
# z.B. rootuser="ja" oder rootuser="nein"
rootuser="nein"

# Hier angeben nach welchem Schema alte Archive gelöscht werden sollen.
# Die Vorgabe behält alle Sicherungen des aktuellen Tages. Zusätzlich das aktuellste Archiv der
# letzten 7 Sicherungstage, der letzten 4 Wochen sowie der letzten 12 Monate.
pruning="--keep-within=1d --keep-daily=7 --keep-weekly=4 --keep-monthly=12"

##############################
# Nextcloud Konfiguration
##############################

#Name der Nextcloud
NEXTCLOUD="nextcloud"

# E-Mail Adress an die der Status gesendet werden soll
EMAIL="email@adresse.de"

##############################
#BorgBackup Passphrase
##############################
# Das Passwort wird benötigt, wenn BorgBackup automatisch über ein Script ausgeführt werden soll
# Zum Schutz sollte deshalb das BorgBackup-Skript noch besonders geschützt werden
# sudo chown root:root
# sudo chmod 0600
export BORG_PASSPHRASE="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"


##############################
#Mount the NFS share where the backup should be saved to
##############################
# Der Pfad muss bereits manuell mit "sudo mkdir" angelegt worden sein
# In der /etc/fstab wurde der Mount Point nicht gesetzt, weshalb das Skript diesen beim ausfuehren automatisch einbindet
sudo mount 192.168.178.3:Nextcloud-Backup /mnt/openmediavault


###################################################################################################

repopfad="$zielpfad"/"$repository"

# check for root
if [ $(id -u) -ne 0 ] && [ "$rootuser" == "ja" ]; then
  echo "Sicherung muss als Root-User ausgeführt werden."
  exit 1
fi

# Init borg-repo if absent
if [ ! -d $repopfad ]; then
  borg init --encryption=$verschluesselung $repopfad
  echo "Borg-Repository erzeugt unter $repopfad"
fi

# backup data
SECONDS=0
echo "Start der Sicherung $(date)."

borg create --compression $kompression --exclude-caches \
			--exclude '/mnt/data/*/cache' \
			--exclude '/mnt/data/*/files_trashbin' \
			--exclude '/mnt/data/*/upload' \
			--one-file-system -v --stats --progress \
            $repopfad::'{hostname}-{now:%Y-%m-%d-%H%M%S}' $sicherung

echo "Ende der Sicherung $(date). Dauer: $SECONDS Sekunden" | mutt ${EMAIL} -s "BorgBackup completed for "${NEXTCLOUD}

# prune archives
borg prune -v --list $repopfad --prefix '{hostname}-' $pruning


##############################
# Unmounts the NFS share
##############################

sudo umount /mnt/openmediavault


###################################
# Sends E-Mail to Defined Address
###################################
# Sends LOGFILE and compressed rsync log file vie e-mail to defined address

#echo $(date +%Y-%m-%d_%H-%M-%S) " - BorgBackup completed for "${NEXTCLOUD} | mutt ${EMAIL} -a ${LOGFILE} -s "BorgBackup completed for "${NEXTCLOUD}

Das Einbinden des openmediavault-Laufwerks wird durch das Skript automatisch durchgeführt. Ihr müsst jedoch darauf achten, dass der hier angegebenen Ordner auf dem Nextcloud-Server bereits vorhanden ist! Den Ordner legt ihr sonst mit dem Befehlt an:

sudo mkdir /mnt/openmediavault

Das Skript enthält die BorgBackup-Passphrase die besonders zu schützen ist, damit unbefugte Dritte nicht auf die Datensicherung zugreifen können. Deshalb ist die Datei noch gesondert zu sichern.

cd /etc/skripte
sudo chown root:root
sudo chmod 0600

Das Skript kann schnließend manuell gestartet werden:

sudo ./borgbackup-nextcloud-data.sh

Weiterführende BorgBackup Links

Meine verwendete Hardware

Bei den nachfolgenden Links handelt es sich um Amazon Affiliate Links.

openmediavault

Nextcloud

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.