RaspberryPi während des Betriebs sichern
Nachdem meine beiden Raspberry Pis lange untätig in der Ecke lagen, habe ich nun für beide eine sinnvolle Aufgabe gefunden. Mit diesem „Produktiveinsatz“ steht man natürlich vor der Frage: wie sichere ich meine Geräte und Daten?
Die Variante, dass die SD-Karte bei Bedarf gesichert wird, ist nun nicht keine Option mehr. Das Backup muss im laufenden Betrieb erfolgen und dabei so konsistent wie möglich. Da ich mit meinem Synology NAS DS713+ ein ideales Ziel für ein solches Backup habe, soll die Sicherung auf ein NFS-Volume erfolgen. Anschließend geht dieses Backup im Rahmen meiner Backupstrategie seinen Weg.
Das Tolle am Internet ist die Tatsache, dass man selten der Erste und schon gar nicht der Einzige ist, der ein Problem oder eine Anforderung hat. So bin ich auch in diesem Fall fündig geworden. Das Einbinden des NFS-Volumes fehlte mir noch zum Glück und so habe ich die Vorlage noch ein wenig verfeinert und nutze nun das folgende Skript für ein Live-Backup meiner RasPis.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
#!/bin/bash ##################################################################### # Konfiguration ##################################################################### # Name des PIs SUBDIR=rpi # NFS-Freigabe NFSVOL=192.168.1.1:/volume1/backup # Mountpoint für das NFS-Volume NFSMOUNT=/home/pi/nas ##################################################################### # Skript ##################################################################### DIR=$NFSMOUNT/$SUBDIR echo "Starte RaspberryPi-Backup! $(date +%H:%M:%S)" echo "NFSVOL=$NFSVOL" echo "DIR=$DIR" # Vorsichtshalber einmal unmounten umount $NFSMOUNT # NFS-Volume mounten mount -t nfs $NFSVOL $NFSMOUNT # Checken, ob das Zielverzeichnis existiert if [ ! -d "$DIR" ]; then echo "Backupverzeichnis existiert nicht. Abbruch!" umount $NFSMOUNT exit 1 fi # Dateinamen zusammenbauen OFILE="$DIR/backup_$(date +%Y%m%d_%H%M%S).img" # Daten aus dem Arbeitsspeicher auf die SD-Karte schreiben sync; sync # Manche Dienste herunterfahren, um konsistente Daten zu erhalten echo "Dienste werden beendet." service apache2 stop service cron stop # Alte(s) Backup(s) löschen rm -f $DIR/backup_*.img # Nun wird das eigentliche Backup geschrieben echo "Image wird erstellt. Das kann jetzt dauern..." SDSIZE=`/sbin/blockdev --getsize64 /dev/mmcblk0`; pv -tpreb /dev/mmcblk0 -s $SDSIZE | dd of=$OFILE bs=1M conv=sync,noerror iflag=fullblock # Ergebnis abfragen RESULT=$? # Gestoppte Dienste wieder starten echo "Dienste werden wieder gestartet." service apache2 start service cron start if [ $RESULT = 0 ]; then umount $NFSMOUNT echo "Backup erfolgreich beendet. $(date +%H:%M:%S)" exit 0 else # evtl. ein angefangenes Backup löschen, wenn es fehlschlägt rm -f $OFILE echo "Backup fehlgeschlagen! $(date +%H:%M:%S)" umount $NFSMOUNT exit 1 fi |
Das Skript läuft nun als Cronjob jede Nacht. Dieser letzte Schritt war schwieriger als erwartet, da das Skript wunderbar funktionierte, wenn es manuell auf der Konsole gestartet wurde, aber den Dienst verweigerte, wenn es per Cron laufen sollte.
Ursache war aber nur eine fehlende Pfadangabe, was sich dank ein paar heller Köpfe auf Twitter lösen ließ 🙂
Hallo,
vielen Dank für das super Script. dd arbeitet aber nicht inkrementell, oder? Das dauert dann natürlich immer sehr lange.
Wie stellt man denn das Ganze wieder her?
Die SD Karte muss dann genauso groß sein?
Mfg, Apropo
Das Skript macht immer eine Vollsicherung. Wiederherstellung erfolgt auch mit dd. Oder evtl. auch mit WinImage oder Etcher. Mit den GUI-Tools habe ich es nie getestet…
Hallo,
Was mich interessieren würde, wäre welche Dienste für das ‚Live-Backup‘ gestoppt werden müssten?
Hallo Malte, da gibt es eine klare Antwort: „das kommt drauf an“ 😉
Je nach dem was auf deinem Pi läuft, musst du wissen, welche Dienste aktiv sind, z.B. nginx oder Apache etc.
Diese Dienste stoppst du dann und startest sie wieder nach dem Backup