Raspberry Pi  -  Sicherung erstellen / wiederherstellen

Auf dieser Seite zeige ich Dir was Du tun musst, damit der Raspberry von sich selbst Sicherungen erstellt und auf Dein NAS abelegt. Diese Sicherung kannst Du im Notfall auf eine neue SD-Karte spielen und Dein Pi funktioniert wieder wie zuvor.

Da die Sicherungen kleinstmöglich abgelegt werden, kannst Du diese auch auf ggf. kleinere SD-Karten wieder zurückspielen. Nach dem Zurückspielen steht dennoch automatisch wieder der gesamte Speicherplatz der neuen SD-Karte zur Verfügung.

Ich selbst besitze eine Synology DS119j. Diese hat nur 1 Festplatte und wird für Dinge genutzt, die keine hohe Datensicherheit benötigen, aber dennoch zentral im Heimnetz zur Verfügung stehen sollen. Für das Ablegen von Backups, die täglich durchgeführt werden reicht diese vollkommen aus. Das diese Platte und die Raspberry-SD-Karte gleichzeitig versagen, ist eher unwahrscheinlich.

NAS mounten

Auf dem NAS habe ich eine NFS-Freigabe für die IP4-Adresse des Raspberry eingerichtet. Wie das funktioniert findet Ihr im Netz. Meine Freigabe lautet "volume1/Pi_Sicherungen". Mein NAS hat die statische IP4-Adresse 192.168.159.70

Auf dem Raspberry legen wir nun einen Ordner an, auf den dann die NAS-Freigabe gemountet wird:

sudo mkdir -p /mnt/nasSicherungen

Um NFS-Freigaben mounten zu können, benötigen wir die nfs-common. Wir stellen mit folgendem Befehl sicher, dass diese vorhanden sind (es dürfte schon die aktuelle Version vorhanden sein):

sudo apt install nfs-common

Damit die NAS-Freigabe auch nach einen Neustart des Raspberry wieder gemountet wird, editieren wir die Datei "fstab" mit diesem Befehl und tragen folgenden Inhalt ein:

sudo nano /etc/fstab
192.168.159.70:/volume1/Pi_Sicherungen /mnt/nasSicherungen nfs x-systemd.automount,noauto,nofail,retry=0,x-systemd.idle-timeout=60,nolock,rw,soft,timeo=5,retrans=1,x-systemd.device-timeout=5 0 0

Achtung: diesen Teil ersetzen durch Deine NAS-Freigabe:

  192.168.159.70:/volume1/PI_Sicherungen

Das sieht dann wir folgt aus:

Mit "Strg + O" und dann "Enter" können wir die Änderung speichern. Mit "Strg + X" verlassen wir danach den Editor.

Wir machen einen Reboot:

sudo reboot

Und schauen ob das Laufwerk gemountet ist, in dem wir in folgendes Verzeichnis wechseln:

cd /mnt/nasSicherungen

Und uns den Inhalt mit folgendem Befehl auflisten lassen:

ls

Wenn wir den Inhalt des NAS-Laufwerks sehen, dann ist alles in Ordnung (innerhalb meiner NAS-Freigabe gibt es den Unterordner "Webserver"):

Sicherung-Skripte erstellen

Wir nutzen u. a. das Script PiShrink, um die Sicherung so klein wie möglich zu halten. Das hat den Vorteil, dass die Sicherung auch auf kleinere SD-Karten zurückgespielt werden kann.

Wir wechseln zunächst in folgenden Ordner:

cd /tmp/

Danach laden wir uns PiShrink herunter:

wget https://raw.githubusercontent.com/Drewsif/PiShrink/master/pishrink.sh

Wir machen die Datei ausführbar:

chmod +x pishrink.sh

Wir verschieben die Datei:

sudo mv pishrink.sh /usr/local/bin

Wir erzeugen uns nun im tmp-Verzeichnis eine neue Datei mit dem Namen "backup.sh" und folgendem Inhalt:

nano backup.sh
#!/bin/bash

# VARIABLEN
PFAD="/mnt/nasSicherungen/Webserver"
NAME="PiWebserverSicherung"
FILE=${NAME}"_"$(date +%Y%m%d-%H%M%S)".img"
BEHALTE="3"

# Stoppe Dienste vor Backup
sudo service tomcat stop
sudo service mysql stop

# Lösche Logfiles älter als 2 Tage (txt/log), (out) immer
sudo find /opt/tomcat/home/logs/ -name "*.txt" -mtime +2 -type f -delete
sudo find /opt/tomcat/home/logs/ -name "*.log" -mtime +2 -type f -delete
sudo find /opt/tomcat/home/logs/ -name "*.out" -type f -delete

# Backup mit Hilfe von dd erstellen und im angegebenen Pfad speichern
sudo dd if=/dev/mmcblk0 of=${PFAD}/${FILE} bs=1MB

# Backup mit Hilfe von PiShrink verkleinern
sudo /usr/local/bin/pishrink.sh ${PFAD}/${FILE}

# Anzahl X an Sicherungen behalten
ls -tr ${PFAD}/${NAME}* | head -n -${BEHALTE} | xargs rm

#Reboot
sudo reboot

Achtung: PFAD ggf. anpassen, wenn Du keinen Unterordner "Webserver" innerhalb Deiner NAS-Freigabe hast oder haben möchtest! Alle sonstigen Pfade basieren auf den vorherigen HowTows von Raspberry Pi als Webserver aufbauen dieser Webseite.

Der Pi sichert sich damit selbst. Er stoppt die Dienste mysql und tomcat. Löscht ältere Logfiles vom Tomcat, erstellt die Sicherung, welche logischerweise die Größe Deiner SD-Karte haben wird und shrinkt das Image im Anschluss so weit wie möglich (wie Daten vorhanden). Im Anschluss löscht er alle älteren Sicherungen außer die aktuellsten (Anzahl unter BEHALTE).

Ich selbst möchte im Anschluss ein Neustart, deshalb das "sudo reboot". Wer möchte kann auch einfach die Dienste mysql und tomcat wieder starten.

Das sieht dann wie folgt aus:

Mit "Strg + O" und dann "Enter" können wir die Änderung speichern. Mit "Strg + X" verlassen wir danach den Editor.

Nun machen wir das Script noch ausführbar:

chmod +x backup.sh

Und verschieben die Datei:

sudo mv backup.sh /usr/local/bin

Nun testen wir, ob das mit der Sicherung läuft. Das wird ein paar Minuten in Anspruch nehmen, je nachdem wie groß Deine SD-Karte ist. 16 GB dauern bei mir ca. 6 Minuten. Wir starten nun das Script wie folgt:

sudo /usr/local/bin/backup.sh

Im Anschluss habe ich eine 3.4GB große Sicherung des Pi auf meinem NAS liegen. Das sieht wie folgt aus:

Tägliche Sicherung einrichten

Wenn der Test des Skripts funktioniert hat, richten wir noch einen Cronjob ein, der das Script täglich ausführt:

crontab -e

Nach dem Neuaufbau haben wir noch keine crontab und erstellen eine leere. Editieren wollen wir mit nano und bestätigen die Abfrage mit 1:

Am Ende fügen wir nun folgenden Inhalt ein:

00 01 * * * /usr/local/bin/backup.sh

Das sieht dann wie folgt aus:

Mit "Strg + O" und dann "Enter" können wir die Änderung speichern. Mit "Strg + X" verlassen wir danach den Editor.

Damit sind wir fertig!

Der Raspberry ist nun als Webserver aufgebaut, stellt einen MariaDB-Datenbank-Dienst zur Verfügung und sichert sich täglich selbst.

Sicherung wiederherstellen

Die Sicherung wird exakt so wiederhergestellt, als würde man ein neues Betriebssystem aufgespielen.

Schau also bitte bei Pi Betriebssystem, nur dass Du nicht wie dort beschrieben das Raspbian auf die SD-Karte schreibst, sondern Dein Sicherungs-Image auswählst und dieses schreibst.

Ist der Schreibvorgang erfolgreich beendet, legst Du die neue SK-Karte in Deinen Pi ein und schon funktioniert alles wieder.