So automatisieren Sie die Sicherung des Raspberry Pi per Skript

Dieser Post beschreibt, wie Sie einen laufenden Raspberry Pi automatisch als Image-Datei auf einem NAS im Netzwerk sichern.

Für mehr Posts über den Raspberry Pi siehe: Raspberry Pi

Einer meiner Raspberry Pis ist essentiell in meinem Home-Setup. Er hostet git, meinen Jenkins, meinen VPN Server und vieles mehr. Ich würde Tage brauchen (zum Beispiel falls die SD-Karte versagt) alles wieder zum Laufen zu bringen. Also habe ich ein automatisches Backup eingerichtet, das den aktuellen Stand als Image-Datei auf mein NAS kopiert. Damit kann ich im Notfall eine neue SD Karte flashen und alles funktioniert wieder.

Das Backup läuft einmal pro Woche, ausgelöst durch meinen Jenkins-Server. Aber ein Cronjob würde es auch tun.

Page Contents

Das Script

Alles wird in einem Skript erledigt, das von jenkins gestartet wird, der Inhalt ist folgender:

sudo mount -t nfs -o soft 192.168.2.132:/path/on/nas /home/user1/nas
sudo dd if=/dev/mmcblk0 of=/home/user1/nas/pi.img bs=1M
sudo pishrink.sh -z /home/user1/nas/pi.img
sudo mv /home/user1/nas/pi.img.gz /home/user1/nas/pi_`date +"%F"`.img.gz
umount -f -l /home/user1/nas

Die erste Zeile mountet einen Ordner um das Image zu speichern auf dem NAS. Wenn das NAS dauerhaft auf dem Pi gemountet ist kann dieser Schritt übersprungen werden.

Die zweite Zeile kopiert die gesamte SD Karte in ein Image in den gemounteten Ordner. Dies würde bereits für die Sicherungs- / Wiederherstellungsprozedur ausreichen.

Die dritte Zeile verkleinert das neu erstellte Image mit einem netten Script, das hier verfügbar ist: https://github.com/Drewsif/PiShrink

Dadurch wird das Image deutlich kleiner.

In the fourth line the newly created verkleinerte Image umbenannt damit es das Backup Datum enthält.

Finally the nas mount is removed again.

Das Verfahren ist das gleiche, wenn Sie ein Image für eine schnellere Einrichtung von Raspberry Pis erstellen möchten, siehe auch Erstelle dein eigenes Image für den Raspberry Pi.

Verhalten

Der PI enthält eine 64 GB SD-Karte, von der derzeit 12 GB verwendet werden. Die Größe des verkleinerten Images beträgt 5,9 GB.

Die Ausführung des Skripts dauert ungefähr 58 Minuten (dies kann für die Jenkins-Timeout-Konfigurationen wichtig sein).

5 Comments

Marty

You could dramatically improve efficiency and more than half total bits transferred over the network by piping the workload with the following command to replace the last 3 lines in your original script:

dd if=if=/dev/mmcblk0 | bzip2 –best > /home/user1/nas/pi_`date +”%F”`.img.bz2

or if you are more fond of gzip (for lesser but faster compression) by:

dd if=if=/dev/mmcblk0 | gzip –fast > /home/user1/nas/pi_`date +”%F”`.img.gz

Good luck and let me know how you fare?

Reply
Marty

Hi Benni,

I revisited your imaging script which is started by Jenkins.

My previous advice will not work with “prishrink.sh”. It shrinks the filesystem in the image filedown to the actually populated part of the the filesystem. It can’t do that on a gzip’ed image file. Therefor your image took around 900MB more space.

I assume that the script is executed on your RPi and I assume it’s a multicore Pi (version 4?).
Is that correct?

The best strategy to speed things up is to reduce wire time (bits in transit over the 100Mbit network connection to the NAS).

Does your Pi have enough storage space (flash drive etc.) to operate on the image of your entire microSD card?

Let me know, then I can work out a faster strategy.

Reply

Schreibe einen Kommentar

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