Automatisches Backup mit dem Raspberry Pi

Kein Backup – kein Mitleid

Hier ist der Plan: Ein Raspberry Pi ist zuständig für die Datensicherung. Auf die zu sichernden Daten wird über das lokale Netz zugegriffen, noch vor dem senden verschlüsselt, in die Cloud übertragen und somit off-site gespeichert.

Ok, ganz schön viel für zwei Sätze. Also nochmal im Detail, ganz langsam zum mitschreiben:

  • Ein Raspberry Pi läuft durchgehend im LAN und führt das Backup regelmäßig aus.
  • Es sollen Dokumente, Fotos, Videos und andere unwiederbringliche Daten gesichert werden, die auf dem NAS und anderen Geräten gespeichert sind.
  • Die gesicherten Daten sollen Off-Site, also nicht im selben Gebäude gespeichert werden für den Fall, dass der Blitz einschlägt, Hardware gestohlen wird oder die Bude abbrennt.
  • Bevor irgendwelche Daten das Haus verlassen, um irgendwo gelagert zu werden, müssen diese sicher verschlüsselt werden.
  • Die Datensicherung(en) sollen bequem über den Browser zu bedienen sein.
  • OpenSource; Keine proprietäre Software.
  • Die monatlichen Kosten sollten 3-5€ im Monat nicht überschreiten.

Nach langem Herumprobieren mit rsync, BorgBackup, duplicity, rsnapshot, Bacula, BackupPC, Amanda, Box Backup Tool, restic, BURP, UrBackup, Duplicity, und vielen anderen, bin ich für den Software Part bei Duplicati gelandet.

Für die off-site/Cloud Langzeit-Datenspeicherung kam es auf folgende Faktoren an:

  • Kompatibilität mit der Backup Software
  • Preis bei einer Datenmenge von dreistelligen Gigabytes
  • Verfügbarkeit der Daten im Ernstfall

Am Ende kristallisierten sich zwei Anbieter heraus: Amazon und Backblaze.

Amazon S3 ist schnell, aber zu teuer. Amazon Glacier ist zwar billig beim speichern und lagern der Daten, kann aber beim abrufen der Daten im Ernstfall entweder sehr lange dauern (Tage) oder recht teuer werden.

Backblaze – bekannt durch die regelmäßige Veröffentlichung der Festplatten-Zuverlässigkeits-Berichte – bietet zwar Backup-Lösungen mit eigener Software für private Computer (etwa 6€/Monat) und Business Backups für ca 60€/Monat pro Computer an, erfüllt aber mal so garnicht meine Anforderungen an Funktionalität, Software und Preis.
Allerdings bieten sie auch Backblaze B2 Cloud Storage an! Fast so billig wie Amazon Glacier und fast so schnell wie Amazon S3. Trifft genau den Sweet Spot.

Die Wahl fällt so auf den Backblaze B2 Cloud Storage Dienst.

  • 2-Faktor Authentifizierung für die Verwaltung
  • Einfache Verwaltung per Web-Interface
  • $0.005 pro Gigabyte pro Monat für die Lagerung
  • $0.01 pro Gigabyte bei herunterladen bzw. wiederherstellten der Daten

Hier eine Beispiel Rechnung für 500GB: Das lagern der Daten kostet im Monat $2,50 und das wiederherstellen im Notfall einmalig $5. Perfekt!

Duplicati 2.0

Duplicati ist in .Net geschrieben, braucht also eine Laufzeitumgebung. Unter Linux ist das Mono. Außerdem soll der Dienst automatisch starten und alle nötigen Rechte besitzen, um auf gemountete NAS Laufwerke zugreifen zu dürfen.

Wie auch sonst verwende ich die Debian bzw. Raspbian basierte Distribution DietPi. Was das genau ist, und wie man diese installiert und einrichtet, gibt’s im Blog Post DietPi: Klein, schlank und schnell zu lesen.

Los geht’s!

Mono installieren

apt update
apt install mono-devel ca-certificates-mono

Duplicati 2.0 installieren

mkdir /usr/lib/duplicati
cd /usr/lib/duplicati

Auf der Duplicati Releases Seite, den Link zur ZIP-Datei der neusten Version kopieren:

Duplicati Releases Seite auf GitHub
wget https://github.com/duplicati/duplicati/releases/download/v2.0.4.19-2.0.4.19_canary_2019-06-17/duplicati-2.0.4.19_canary_2019-06-17.zip
apt install unzip
unzip duplicati-*.zip
rm duplicati-*.zip

Duplicati Skripte erstellen

Duplicati Kommandozeilen-Skript duplicati-cli erstellen:

nano /usr/bin/duplicati-cli
#!/bin/bash
INSTALLDIR=/usr/lib/duplicati
export LD_LIBRARY_PATH="${INSTALLDIR}${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
export MONO_PATH=$MONO_PATH:${INSTALLDIR}
 
EXE_FILE=${INSTALLDIR}/Duplicati.CommandLine.exe
APP_NAME=Duplicati.CommandLine
 
exec -a "$APP_NAME" mono "$EXE_FILE" "$@"
chmod 755 /usr/bin/duplicati-cli

Duplicati Server-Skript duplicati-server erstellen:

nano /usr/bin/duplicati-server
#!/bin/bash
INSTALLDIR=/usr/lib/duplicati
export LD_LIBRARY_PATH="${INSTALLDIR}${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
export MONO_PATH=$MONO_PATH:${INSTALLDIR}
 
EXE_FILE=${INSTALLDIR}/Duplicati.Server.exe
APP_NAME=DuplicatiServer
 
exec -a "$APP_NAME" mono "$EXE_FILE" "$@"
chmod 755 /usr/bin/duplicati-server

Duplicati Konfiguration

useradd duplicati --gid backup --system --home /mnt/dietpi_userdata/duplicati
mkdir /mnt/dietpi_userdata/duplicati
chown -R duplicati:backup /mnt/dietpi_userdata/duplicati
nano /etc/default/duplicati
# Defaults for duplicati initscript
# sourced by /etc/init.d/duplicati

#
# This is a POSIX shell fragment
#

# Additional options that are passed to the Daemon.
DAEMON_OPTS="--webservice-port=8200 --webservice-interface=any --webservice-allowed-hostnames=* --server-datafolder=/mnt/dietpi_userdata/duplicati"
nano /etc/systemd/system/duplicati@.service
[Unit]
Description=Duplicati web-server
After=network.target

[Service]
User=%I
EnvironmentFile=-/etc/default/duplicati
ExecStart=/usr/bin/duplicati-server $DAEMON_OPTS

[Install]
WantedBy=multi-user.target
systemctl enable duplicati@duplicati
service duplicati@duplicati start

Unter der Adresse http://servername:8200 sollte im Browser die Benutzeroberfläche erscheinen.

Backblaze B2 Cloud Storage

Um ein „Bucket“, also ein Lagerplatz für die Daten einzurichten, muss man nur darauf achten, dass man das Konto für den korrekten Backblaze Dienst anlegt.

Das anlegen des Kontos, und die ersten 10GB sind kostenlos. Danach kann man seine Kreditkarte dort hinterlegen oder einfach per Rechnung die Kosten begleichen.

Das Konto wollen wir für den B2 Cloud Storage Service anlegen.
Wir werden nur B2 Cloud Storage Buckets verwenden, und ignorieren den kompletten „Computer Backup“ Abschnitt!

Ein Bucket erstellen

Hier erstellen wir einen privaten „Bucket“ mit einem einmaligen Namen. Darin können wir Ordner anlegen und Dateien speichern.

Nach dem erstellen, müssen wir noch einstellen, dass nicht alle Dateien in allen Varianten für immer gespeichert werden sollen. Stattdessen wollen wir nur die letzte Version einer Datei behalten. Duplicati kümmert sich bereits um solche Details.

In den Lifecycle Settings kann man einstellen wieviele Versionen einer Datei gespeichert bleiben sollen.

Den Bucket Namen werden wir nachher in Duplicati benötigen.

Im Bucket können wie noch Verzeichnisse anlegen, um unsere Datensicherung aufzuteilen und zu strukturieren, damit wir später mehrere kleine Backup Jobs, statt eines großen ausführen können.

Anwendungs-Schlüssel erstellen

Das erstellen des Anwendungs-Schlüssels ist der letzte Schritt in Backblaze. Der Application Key ist vergleichbar mit Zugangsdaten für eine Software, um auf die Daten im Bucket zugreifen zu dürfen.

Hat alles geklappt, bekommen wir eine keyID und applicationKey. Diese beide Zeichenketten bitte unbedingt irgendwo speichern. Wir brauchen diese Informationen gleich beim einrichten der Backup Jobs.

Der war das letzte Puzzlestück, um mit Duplicati unsere Backups im Backblaze B2 Cloud Storage zu speichern.

Backup Jobs einrichten

Duplicati, unter der Adresse http://servername:8200

Einen neuen Backup Job erstellen wir mit „Sicherung hinzufügen“. Nun werden wir durch einen Assistenten geführt:

1. Allgemein

Wichtig ist hier eine Verschlüsselung von AES-256 auszuwählen, und eine sichere Passphrase (Passwort) zu nehmen. Das Passwort sollte besser irgendwo „offline“ hinterlegt werden, da ohne dieses Passwort, die Daten nicht wiederhergestellt werden können!

2. Ziel

Als Sicherungsziel wählen wir B2 Cloud Storage. Bucket Name und Ordnerpfad sollten selbsterklärend sein – hier eintragen, was in Blackblaze zuvor konfiguriert wurde.

B2 Application ID und B2 Application Key entsprechen den beiden Zeichenketten keyID und applicationKey, die uns vorhin einmalig in Backblaze angezeigt wurden.

3. Quelldaten

Hier kann alles gewählt werden, was über das Dateisystem zugreifbar ist.

Um z.B. Daten des NAS zu sichern, muss dieses gemountet, also eingebunden werden.

Unter DietPi gibt es dafür den dietpi-drive_manager. Wurde damit nun ein externes Laufwerk eingebunden, müssen wir die Rechte anpassen, damit unser Duplicati Dienst darauf zugreifen kann:

nano /etc/fstab

In der Datei dann nach dem Eintrag suchen und den Benutzer und die Gruppe anpassen. uid und gid sollten folgendermaßen gesetzt sein:

uid=duplicati,gid=backup

4. Zeitplan

Zeitplan ist Geschmacksache. Bei mir laufen täglich Nachts ab 3:00 die Datensicherungen.

5. Optionen

Das einzig interessante hier ist die Sicherungs-Aufbewahrung. Normalerweise auf eine konkrete Anzahl der Backups von exact 1 konfiguriert, behalte ich für den relativ kleinen Backup Job der Dokumente zwei Backups.

Fazit

Bei mir läuft dieses Setup seit über zwei Monaten problemlos.

Wie sichert ihr eure Daten? Habt Ihr Vorschläge zur Verbesserung oder zu Alternativen? Ich freu mich auf eure Kommentare.

Wenn der Post nützlich für euch war, könnt ihr mir gerne einen Kaffee spendieren 😉

Spendier' mir 'nen KaffeeSpendier‘ mir ’nen Kaffee

Be excellent to each other!

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

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.