Backup des Raspberry Pi 3 erstellen über das Netzwerk

Wenn man seinen Raspberry Pi durchkonfiguriert hat, möchte man ja auch mal ein Backup erstellen. Eine Möglichkeit ist es die SD-Karte zu nehmen und davon am PC ein Image zu schreiben. Es ist aber auch möglich, ein Image auf ein Netzlaufwerk abzulegen. Weiters dazu gibt es dort.

Sehr gut eignet sich dazu natürlich ein NAS-System. Ich selber besitze eine DS412+ von Synology und schreibe nun bei Bedarf meine Backups auf das NAS.

Konfiguration der Synology

Auf der Synology muss der NFS Dienst aktiviert werden:

Zusätzlich muss für einen Gemeinsamen Ordner die NFS Berechtigung gesetzt werden.

Installation der Backup-Software

Nun kann die Backupsoftware, weitere Dienste und der Backupordner installiert, bzw. erstellt werden. Wir erzeugen einen Ordner /backup in dem später das NFS-Verzeichnis der Synology gemountet wird. (Anmerkung: Den Dienst nfslock gibt es anscheinend nicht mehr, es funktioniert aber trotzdem)

 curl -s -L -O https://www.linux-tips-and-tricks.de/raspiBackupInstall.sh && sudo bash raspiBackupInstall.sh  
 sudo mkdir /backup  
 sudo apt-get install nfs-common -y  
 sudo systemctl start rpcbind  
 sudo systemctl enable rpcbind  
 sudo systemctl start nfslock  
 sudo systemctl enable nfslock  

Das Konfigurationsfile liegt unter /usr/local/etc/raspiBackup.conf. Hier sollte der DEFAULT_BACKUPPATH überprüft werden und DEFAULT_STOPSERVICES und DEFAULT_STARTSERVICES angepasst werden. Meine Datei dient nur als Beispiel, ihr solltet schon selber wissen welche Dienste ihr am laufen habt.

 # path to store the backupfile  
 DEFAULT_BACKUPPATH="/backup"  
 # how many backups to keep  
 DEFAULT_KEEPBACKUPS="5"  
 # type of backup: dd, tar or rsync  
 DEFAULT_BACKUPTYPE="dd"  
 # zip tar or dd backup (0 = false, 1 = true)  
 DEFAULT_ZIP_BACKUP="0"  
 # commands to stop services before backup separated by &  
 DEFAULT_STOPSERVICES="systemctl stop grafana-server && systemctl stop telegraf && systemctl stop influxdb && systemctl stop unifi && systemctl stop homebridge"  
 # commands to start services after backup separated by &  
 DEFAULT_STARTSERVICES="systemctl start unifi && systemctl start influxdb && systemctl start telegraf && systemctl start grafana-server && systemctl start homebridge"  

So sieht es bei mir aus. Die Services solltet ihr natürlich an eure Gegebenheiten anpassen.

Ein erstes Backup erstellen

 sudo mount 10.10.66.100:/volume1/daten/backup/pi /backup/  
 sudo raspiBackup.sh -m detailed  
 sudo umount /backup  

Damit mountet ihr euer Verzeichnis, startet ein Backup und unmountet das Verzeichnis wieder. Bei mir dauert es für die 32GB knapp eine Stunde.
Solltet ihr das Unmounten vergessen und eure NAS herunterfahren, wird euer Pi es euch mit einer erhöhten Last danken 😉

Natürlich könnt ihr auch das Backup automatisieren und einen Cronjob erstellen. Meine NAS läuft aber nicht immer, also mache ich es nach Bedarf.

 sudo crontab -e  
 #am Ende einfügen  
 00 23 * * 1 /usr/local/bin/raspiBackup.sh  
Damit würde jeden Montag um 23:00 ein Backup erstellt.

Restore eines Backups

Ein Restore ist einfach gemacht. Ihr schaltet den Pi aus und entnehmt seine SD-Karte. Anschließend schreibt ihr das Image wieder auf die Karte. Ich verwende dazu Etcher, welcher sehr einfach zu bedienen ist. Danach kommt die Karte wieder in den Raspberry und ihr könnt ihn starten. Nach dem ersten Start würde ich eurem Raspberyy Pi noch einen Reboot gönnen, damit auch wirklich alles sauber läuft.

20 Gedanken zu „Backup des Raspberry Pi 3 erstellen über das Netzwerk“

  1. Hallo und danke für die Anleitung

    Leider bekomme ich bei:
    sudo systemctl start nfslock
    sudo systemctl enable nfslock

    folgendes Feedback:
    Failed to start nfslock.service: Unit nfslock.service failed to load: No such file or directory.

    Hast du eine Idee woran es liegen könnte bzw. wie ich das Problem behebe?
    Rasbian is up to date auf einem 3er PI.

    Danke

    Antworten
      • Das kann ich bestätigen. Auch bei mir lief es durch. Weißt du was dieser Dienst vorher gemacht hat?

        Ich werde das Backup heute versuchen zu installieren und danach einen Job einrichten um es automatisch durchführen zu lassen.

        Was mich noch interessieren würde:
        Könntest du für deine Leser kurz die Services beschreiben, die du beim Start des Backups beendest? Ich habe nur Homebridge drin gelassen. Die anderen sagen mir nichts. Was sollte man hier beenden wenn man ein anderes Setup hätte?

        Was ist der Vorteil das Mappen den Laufwerks über NFS zu machen und nicht über einen User mit SFTP oder anderen Freigaben?

        Außerdem wäre es richtig cool, wenn du noch auf die unterschiedlichen Settings von Backups eingehen könntest (dd, rsync, tar oder zippen).

        Aber auch ohne diese Erweiterungen ein richtig gute Anleitung. Merci

        Antworten
        • Hi,

          der Dienst ist eigentlich dafür zuständig das ein NFS Client den Zugriff auf eine Datei sperren kann, welche er gerade bearbeitet. Wenn ich es richtig verstanden habe ist es aber ein Dinst der auf dem Server laufen muss, also nicht auf dem Raspberry. Eventuell war der Dienst vorher schon nicht nötig.

          Deine Services muss du selber im Blick haben, meine sollen nur ein Beispiel darstellen. Es handelt sich dabei um Grafana, Telegrtaf, InfluxDB un eine Unifi Controller, damit sammel ich Daten meiner Netzwerkkomponenten. Es sind also keine Standarddienste. Je nachdem was dein Raspi macht, solltest du die entsprechenden Dienste dort eintragen, aber das kannst halt nur du wissen.

          Gute Frage, ich habe NFS als erste versucht und es hat funktioniert. Ich bin dabei geblieben.

          dd hat den Vorteil das ich es mit einem Windows Rechner wiederherstellen kann. Ansonsten würde ich auf der Seite des Tools schauen.

          Antworten
  2. Hallo.
    Danke für die Anleitung nur habe ich ein Problem mit dem mounten der NAS.
    Alles so gemacht wie oben beschrieben, aber wenn ich „sudo mount 192.168.168.16:/volume1/netbackup /backup/“ eingebe bekomme ich die Meldung:
    mount.nfs: access denied by server while mounting 192.168.168.16:/volume1/NetBackup

    Kann machen was ich will, ich bekomme einfach keinen Zugriff und blicke langsam auch nicht mehr durch was da falsch ist.
    Vllt kannst Du mir weiterhelfen.

    Gruß
    Ralf

    Antworten
    • Hey, es hat sich erledigt, Fehler gefunden. Bei NFS Berechtigung auf der NAS darf nicht einfach nur die IP 192.168.168.16 stehen sondern 192.168.168.16/24 und dann funktioniert es.

      Gruß
      Ralf

      Antworten
  3. Hallo Björn,
    danke für deine Anleitung… bei mir wills nur leider noch nicht.
    Ich bekomm folgenden Output:

    pi@phoniebox:~ $ sudo raspiBackup.sh -m detailed
    — RBK0009I: phoniebox: raspiBackup.sh V0.6.4.3 (2d927a2) Wed Jul 10 21:15:01 BST 2019 gestartet.
    — RBK0128I: Logdatei ist /backup/phoniebox/phoniebox-dd-backup-20190710-211500/raspiBackup.log.
    — RBK0116I: Konfigurationsdatei /usr/local/etc/raspiBackup.conf wird benutzt.
    ??? RBK0019E: Option -a und -o nicht angegeben.
    — RBK0032I: Bitte warten bis aufgeräumt wurde.
    — RBK0043I: Unvollständiges Backup /backup/phoniebox/phoniebox-dd-backup-20190710-211500 in wird gelöscht. Das wird etwas dauern. Bitte Geduld.
    — RBK0049I: Meldungen wurden in /home/pi/raspiBackup.msg gesichert.
    — RBK0026I: Debug Logdatei wurde in /home/pi/raspiBackup.log gesichert.
    ??? RBK0005E: Backup fehlerhaft beendet. Siehe vorhergehende Fehlermeldungen.
    — RBK0010I: phoniebox: raspiBackup.sh V0.6.4.3 (2d927a2) Wed Jul 10 21:15:10 BST 2019 beendet.

    Hast du da eine Idee worans liegen könnte?

    Antworten
    • Hallo Georg,

      eigentlich ganz einfach. Der Entwickler schreibt selbst dazu folgendes:

      RBK0019E: Option -a und -o nicht angegeben.

      Ursache:

      raspiBackup erlaubt ein laufendes System zu sichern. Vor dem Backup sollten alle wichtigen laufenden Services gestoppt und am Ende wieder gestartet werden um kein inkonsistentes Backup zu erstellen. Mit den beiden Optionen wird definiert was gestoppt und gestartet werden soll.

      Weitere Aktionen:

      Die beiden Optionen mit entsprechenden Parametern müssen beim Aufruf mitgegeben werden. Details dazu finden sich auf der FAQ Seite.

      Hier der Loink zur FAQ

      Du musst also in deiner Config (/usr/local/etc/raspiBackup.conf) folgende Zeilen befüllen:
      # commands to stop services before backup separated by &&
      DEFAULT_STOPSERVICES=“systemctl stop unifi“

      # commands to start services after backup separated by &&
      DEFAULT_STARTSERVICES=“systemctl start unifi“

      Der Dienst unifi ist hier nur ein Beispiel, es kommt halt darauf an , was dein Pi macht.

      Grüße,
      Björn

      Antworten
  4. Danke für die Erklärung! Leider funktioniert die Steuerung über die crontab Funktion nicht. Meine Vermutung ist, dass ich das mount and umount noch irgendwo unterbringen muss und es mit dem Einfügen unter crontab nicht erledigt ist.

    Jemand Erfahrung dazu?

    Antworten
    • Bevor das Backup über den crontab ausgeführt werden kann, muss natürlich mittels mount das Laufwerk eingebunden werden.
      Mit dem File /etc/fstab kann das Laufwerk beim Boot gemountet werden.

      Mit folgender zusätzlichen Zeile wird z.B. das NFS-Verzeichnis auf meiner Nas in der Ordner Backup gemountet:
      10.10.66.100:/volume1/data/backup/ /backup/ nfs defaults 0 0

      Antworten
      • Gibt es auch eine Möglichkeit den NAS erst zum Backup zu mounten und nach Abschluss des Backups zu unmounten? Mein NAS startet jede Nacht neu, mein Pi nicht.

        Antworten
        • Dazu müsstest du ein Script schreiben welches erst mountet,dann das Backup startet und anschließend wieder unmountet.
          Das Script würdest du dann über den crontab starten lassen.

          Antworten
  5. Hallo zusammen, bei mir wird folgende Fehlermeldung ausgegeben -> Option -a und -o nicht angegeben. Was mache ich da? (siehe unten)

    pi@starryray:~ $ sudo raspiBackup.sh -m detailed
    — RBK0009I: starryray: raspiBackup.sh V0.6.4.3 (2d927a2) Fr 7. Feb 18:42:56 CET 2020 gestartet.
    — RBK0128I: Logdatei ist /backup/starryray/starryray-ddz-backup-20200207-184256/raspiBackup.log.
    — RBK0116I: Konfigurationsdatei /usr/local/etc/raspiBackup.conf wird benutzt.
    ??? RBK0019E: Option -a und -o nicht angegeben.
    — RBK0032I: Bitte warten bis aufgeräumt wurde.
    — RBK0043I: Unvollständiges Backup /backup/starryray/starryray-ddz-backup-20200207-184256 in wird gelöscht. Das wird etwas dauern. Bitte Geduld.
    — RBK0049I: Meldungen wurden in /home/pi/raspiBackup.msg gesichert.
    — RBK0026I: Debug Logdatei wurde in /home/pi/raspiBackup.log gesichert.
    ??? RBK0005E: Backup fehlerhaft beendet. Siehe vorhergehende Fehlermeldungen.
    — RBK0010I: starryray: raspiBackup.sh V0.6.4.3 (2d927a2) Fr 7. Feb 18:43:11 CET 2020 beendet.

    Antworten
    • Hier der Link zur FAQ

      Du musst also in deiner Config (/usr/local/etc/raspiBackup.conf) folgende Zeilen befüllen:
      # commands to stop services before backup separated by &&
      DEFAULT_STOPSERVICES=“systemctl stop unifi“

      # commands to start services after backup separated by &&
      DEFAULT_STARTSERVICES=“systemctl start unifi“

      Der Dienst unifi ist hier nur ein Beispiel, es kommt halt darauf an , was dein Pi macht.

      Grüße,
      Björn

      Antworten
    • Du musst einen stop und Start Dienst angeben. Was läuft auf deinem pi was du vor dem Backup stoppen kannst und danach wieder starten musst.
      -a -o sagt aus das du keine Bedingung für stop Start angegeben hast. Wenn die vorhanden sind klappt auch das Backup

      Antworten
  6. Zu Deiner Beschreibung

    „Ein Restore ist einfach gemacht. Ihr schaltet den Pi aus und entnehmt seine SD-Karte. Anschließend schreibt ihr das Image wieder auf die Karte. “

    moechte ich anmerken dass das mit Vorsicht zu geniessen ist. Wenn die SD Karte defekt ist macht es aber keinen Sinn den Backup auf diese Karte zu restoren. Wer auf Nummer sicher gehen will restored immer auf eine neuen SD Karte.

    Antworten
  7. Hallo, danke sehr für den Beitrag. Bei mir läuft schon das erste Backup zur Zeit.

    Eine Frage zum Beenden der Dienste vor dem Backup. Müssen hier ALLE Dienste angeführt werden oder nur die „Wichtigsten“?

    derzeit habe ich Influxdb, Homegear, Openhab2, Mosquitto, Grafana, Nodered, Zigbee2mqtt

    Danke

    Antworten
    • eventuell habe ich mich zu undeutlich ausgedrückt. Ich habe die angeführten Dienste im Skript inkludiert. Es laufen aber noch viele weitere kleine Dienste.

      Antworten
  8. Super Beschreibung! Echt Spitze
    Bei mir funktioniert alles perfekt.
    Ich habe einen raspberry Pi der mein komplettes Aquarium steuert diesen wollte ich komplett sichern weil mir schon einmal die Micro SD karte kaputt gegangen ist. Daraufhin musste ich sehr kompliziert den iobroker aus einer backup datei wiederherstellen. mit dem image ist es eine perfekte Lösung. nur könnte man noch eine telegram Meldung ausgeben die informiert das dass Backup erfolgreich installiert wurde mit der gespeicherten image größe und das die start optionen ausgegeben werde also zB iobroker wurde neu gestartet.
    Das wäre noch das I tüpfelchen

    Antworten

Schreibe einen Kommentar