Backup des Raspberry Pi im laufenden Betrieb

Auf meinem Raspberry Pi läuft die Hausautomatisierung FHEM. Diese kann von Haus aus schon Backups von sich selbst anlegen, allerdings laufen auf meinem Raspberry noch weitere Dinge im Hintergrund die ich garantiert bei einem Wechsel der SD-Karte vergessen würde neu aufzusetzen. Und dann sitz ich wieder da, mache dicke Backen und weiß nicht warum der Quark nicht läuft.

Also habe ich für mich beschlossen dass ich liebe die komplette SD-Karte als Backup ablege. Das kann man nun mit verschiedenen Methoden veranstalten. Einerseits könnte man mit Software wie Win32 Disk Imager an einem Windows PC die Karte klonen wozu ich aber jedes Mal den Raspberry herunter fahren müsste, die SD-Karte raus pfriemeln und ins Lesegerät stecken müsste.
Praktischerweise kann so ein Raspberry mit dem “dd Kommando”  sich auch selber klonen und das Backup auf einen externen USB-Stick, oder wie in meinem Fall, dieses auf ein externes NAS legen.

“dd” würde ein Image auf der SD-Karte anlegen was aber totaler Quatsch wäre, wie käme man bei einem Defekt dann an die Daten? 😉
Also müssen wir ein externes Laufwerk “mounten”. Das bedeutet, wir gaukeln dem Raspberry vor dass das externe Laufwerk, welches wir beim Mounten verknüpfen ein Verzeichnis auf dem Raspberry sei.

Und das geht so:
Mit Putty auf dem Raspberry einloggen.
Als erstes legen wir nun das Verzeichnis an welches als Verbindungspunkt laufen soll.

sudo mkdir /backup

Als nächstes folgt die Verknüpfung mit dem externen Laufwerk. In meinem Fall ein externes NAS im Keller welches Benutzername und Passwort benötigt, die Backups sollen später im Verzeichnis “backup” abgelegt werden (muss schon existieren):

sudo mount -t cifs -o user=meinBenutzername,pass=MeinBenutzerPasswort //192.168.178.123/backup //backup

Dabei muss dann entsprechend Benutzername, Passwort und IP-Adresse bei Euch angepasst werden.

Damit bei jedem Neustart des Raspberry das Laufwerk auch wieder neu gemounted wird muss noch per Crontab ein Job angelegt werden. Dazu gehe ich aber später ein, wir müssen eh noch im Crontab einen Job anlegen.

Nachtrag vom 16.12.2020:
Das mit dem Crontab kann man sich getrost schenken wenn man den Mount-Prozess in fstab einträgt. Dazu weiter unten mehr.

Um einen USB-Stick zu mounten muss man etwas anders vorgehen, da hängt es unter anderem davon ab welchen Typ man benutzt. Da verweise ich auf dieses Tutorial, es würde hier zu lang werden.

Nun benutzen wir ein Script welches recht komfortabel die Backups erstellt und, wenn eine bestimmte Anzahl an Backups vorhanden ist, das älteste löscht.
Dazu einfach den Editor nano starten:

sudo nano /home/pi/Backup.sh

Hier nun das Script (Quelle:  Raspberry-tips) hinein kopieren und folgende Variablen anpassen:

  • BACKUP_PFAD – Pfad zum verknüpften Laufwerk (in unserem Fall /backup)
  • BACKUP_ANZAHL – Wieviele Backups sollen aufbewahrt werden?
  • BACKUP_NAME – Name der Sicherung
  • DIENST_START_STOP – Dienste die vor dem Backup gestoppt und dann wieder gestartet werden. Das ist zum Beispiel ziemlich wichtig wenn u.a. ein MySQL-Server mit drauf läuft, es gibt sonst korrupte Datenbankeinträge. Hat man keine wichtigen Dienste laufen kann man die Zeilen 11 und 17 mit einer Raute auskommentieren.
#!/bin/bash
 
# VARIABLEN - HIER EDITIEREN
BACKUP_PFAD="/pfad/zum_backup_order"
BACKUP_ANZAHL="5"
BACKUP_NAME="RaspberryPiBackup"
DIENSTE_START_STOP="service mysql"
# ENDE VARIABLEN
 
# Stoppe Dienste vor Backup
${DIENSTE_START_STOP} stop
 
# Backup mit Hilfe von dd erstellen und im angegebenen Pfad speichern
dd if=/dev/mmcblk0 of=${BACKUP_PFAD}/${BACKUP_NAME}-$(date +%Y%m%d-%H%M%S).img bs=1MB
 
# Starte Dienste nach Backup
${DIENSTE_START_STOP} start
 
# Alte Sicherungen die nach X neuen Sicherungen entfernen
pushd ${BACKUP_PFAD}; ls -tr ${BACKUP_PFAD}/${BACKUP_NAME}* | head -n -${BACKUP_ANZAHL} | xargs rm; popd

Abspeichern mit STRG+X, Y und Enter. Das Script muss nun ausführbar gemacht und verschoben werden:

sudo chmod 755 /home/pi/Backup.sh
sudo mv /home/pi/Backup.sh /usr/local/bin/Backup.sh

Kommen wir nun zum Crontab. Mit Crontabs können zeitgesteuert Prozesse gestartet werden.
Dazu den Crontab-Editor öffnen mit:

sudo crontab -e

Unter der letzten Zeile einen neuen Job anlegen mit

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

Damit wird jeden Tag um 1 Uhr früh ein Backup gestartet.
Wer sich selber andere Zeiten oder nur für bestimmte Tage die Woche ein Backup anlegen möchte schaut sich mal den crontab guru an, da kann man sich seinen Zeitplan recht komfortabel zusammenstellen und dann die Zeile kopieren.

Nun noch speichern mit STRG+X, Y und Enter und schon laufen zur gewünschten Zeit die Backups.
Für meine 8 GB SD-Speicherkarte dauert ein Backup etwa 9 Minuten. Ich lasse die Backups 2x wöchentlich laufen jeweils morgens um 3 Uhr.
Mein Job dazu sieht dann wie folgt aus:

00 03 * * 1,5 /usr/local/bin/Backup.sh

Ich sprach ja vorhin davon dass wir bei den Crontabs noch einen weiteren Job wegen des Mounts anlegen müssen. In eine weitere Zeile fügt ihr folgendes ein:

@reboot mount -t cifs -o user=meinBenutzername,pass=MeinBenutzerPasswort //192.168.178.123/backup //backup

Passt auch hier wieder ggf. Eure IP, Pfade und Name/Passwort an.

Nachtrag vom 16.12.2020:
Ich erwähnte ja weiter oben schon dass man sich den Quatsch mit dem mounten per Crontab schenken kann. Dazu muss der Mount nur in die Datei /etc/fstab eingetragen werden. Dann wird der Mount bei jedem Neustart ausgeführt.

sudo nano /etc/fstab
dort in die unterste Zeile folgenes eintragen:
//192.168.178.xx/Backup /Ordner/fuer/NASVerbindung cifs username=HorstKevin,password=meingeheimesPasswort,uid=1000,gid=1000,dir_mode=0700,file_mode=0600,nounix,vers=1.0 0 0

Achtung! Diese Zeile passt nur für mein System, bei Euch müssen ggf noch Änderungen vorgenommen werden wie IP, Dateipfad, Username, Passwort, Filetyp etc.
Das hier ist auf ein Sambashare auf meinem Synology-Laufwerk ausgelegt. NFS würde vermutlich komfortabler laufen, funktioniert bei mir derzeit nur nicht so recht. Da bin ich noch auf der Fehlersuche.
Um das mit dem fstab besser zu verstehen verweise ich auf eine deutschsprachige Hilfeseite zum Thema:
https://wiki.ubuntuusers.de/fstab/ 

 

 

Und was macht man nun im Fall des Falles um das Backup zurück zu spielen?

Einfach das Image vom NAS mit dem Programm Win32 Disk Imager (oder einer anderen Software zum Bespielen von Images auf SD-Karten) auf eine frische Speicherkarte spielen, einstecken, Rasperry booten, fertig.

 

+++++++++++++++++++++++++++++++++++++++++++++
Update vom 26.12.19
Vor einiger Zeit hat jemand nach der Möglichkeit der Mailbenachrichtigung gefragt. Ich hab das mal hinzugefügt. Wie das geht findet man in diesem Artikel.
+++++++++++++++++++++++++++++++++++++++++++++
Und noch ein Update:
Wer seine Archive gezippt ablegen möchte tauscht einfach die Zeile

dd if=/dev/mmcblk0 of=${BACKUP_PFAD}/${BACKUP_NAME}-$(date +%Y%m%d-%H%M%S).img bs=1MB


gegen diese aus:

dd if=/dev/mmcblk0 bs=1MB status=progress | gzip > ${BACKUP_PFAD}/${BACKUP_NAME}-$(date +%Y%m%d).img

Zurückspielen kann man das mit:

gunzip -c ${BACKUP_PFAD}/${BACKUP_NAME}-$(date +%Y%m%d).img | dd of=/dev/mmcblk0

+++++++++++++++++++++++++++++++++++++++++++++
Update vom 16.12.20
Ich hab den Beitrag etwas editiert, das Mounten per Crontab ist Unfug. das kann man besser per fstab erledigen.

Treiber für Arduino Nano Clones

469521107_1280x720Wer sich beim “Chinamann” (z.B. Aliexpress oder Banggood) Arduino Nano Clones kauft steht recht flott vor dem Problem dass diese Clones nicht vom PC erkannt werden.
Das liegt daran dass dort statt der FTDI-Chips die deutlich preiswerteren CH340G USB 2 Serial Chips verbaut wurden.
Dies führt beim Upload von Sketches auf den Arduino zu Fehlermeldungen.
Die Clones benötigen einen eigenen Treiber. Diesen findet man kostenlos im Netz unter dem Namen CH340SER.EXE oder auch unter dem Namen CH341SER.EXE.

Ich habe für mich den Treiber hier im Blog als Backup gespeichert. Dieser funktioniert bei mir hervorragend, ich übernehme dafür allerdings weder Garantie noch Haftung. Der Download erfolgt auf eigenes Risiko.

Bevor man den Arduino mit dem PC verbindet:

  • Treiber downloaden (und ggf entzippen)
  • Setup starten
  • Die Software fragt dann nach ob sie den Treiber CH341SER.INF für den Chip CH340 (Version 11/04/2011, 3.3.2011.11) installieren darf, ‘INSTALL’ klicken
  • Nach Installation erfolgt noch eine Windows-Meldung dass der Treiber erfolgreich installiert wurde
  • Den Arduino Nano per USB verbinden
  • Im Gerätemanager findet man dann den Eintrag “USB-SERIAL CH340 (COM XX)” bei XX steht dann welcher COM-Port benutzt wird
  • In der Arduino Software entsprechend den COM-Port einstellen, fertig