Das Skript imagebackup.sh
ermöglicht es dir automatisiert und in regelmäßigen Abständen ein komplettes Image der SD-Karte deines Raspberry Pis als Backup auf ein externes Speichermedium zu schreiben. Ich nutze das für meine beiden Pis auf denen eine Nextcloud und Pi-hole läuft.
Das Skript kannst du in der aktuellsten Version von Codeberg herunterladen ➡ https://codeberg.org/strobelstefan.org/imagebackup
Vor einiger Zeit hatte ich ein Problem mit einem USB-Stick an meinem Nextcloud-Pi, den ich als externes Speichermedium für einen Backup-Job verwendet habe. Der Speicher war irgendwann defekt und hat den Bootprozess des Pis gestört und der kleine PC startete nicht mehr.
Die ganze Geschichte gibt es ➡ hier
Das Problem war, dass der USB-Stick bereits beim Start über die /etc/fstab
eingebunden wurde. Da der Speicher aber nicht gemounted war, ging der Pi in den Recovery Mode und die Nextcloud war nicht erreichbar
Der Eintrag in der /etc/fstab
sah so aus:
UUID=xxxxxxxxxxx /mnt/usbbackup ntfs defaults,auto,umask=000,users,rw 0 0
Das auto
versucht den Stick bereits während des Bootens einzubinden.
Um das Problem nachhaltig zu lösen, lasse ich den USB-Stick nicht mehr automatisch beim Booten einbinden, sondern mounte den Speicher über ein Shellskript bei Bedarf.
Der Eintrag in der /etc/fstab
ist nur geringfügig anders, aber mit einer großen Wirkung.
UUID=xxxxxxxxxxx /mnt/usbbackup ntfs defaults,noauto,umask=000,users,rw 0 0
Durch noauto
wird der Stick nicht mehr automatisch beim Starten eingebunden, sondern nur noch nach dem Aufruf des Befehls sudo mount mnt/usbbackup
.
Auf meinem Pi laufen neben dem imagebackup.sh
noch weitere Skripte, die Datensicherungen auf weitere externe Speicher erstellen. Diese Storages können natürlich ebenfalls defekt sein und den Bootprozess beeinträchtigen. Deshalb werden die mit noauto
in der /etc/fstab
eingetragen.
Da ich aber nicht in jedem Skript den mount und umount-Prozess verwalten möchte, habe ich nun jeweils ein neues Skript erstellt, um
- das externe Speichermedium zu mounten
- das externen Speichermedium nach getaner Arbeit wieder
auszuschmeißen
Da diese beiden Skripte keine eigenen Variablen enthalten, sondern diese von übergeordneten Skripten, wie z.B. imagebackup.sh
erhalten, können sie von auch von anderen Skripten genutzt werden.
Am Beispiel von imagebackup.sh
zeige ich das Vorgehen auf.
imagebackup.sh
ist das Haupskript, indem die Variablen definiert werden und die durchzuführenden Operationen aufgerufen werden.
Es werden die Unter-Skripte storage-mount.sh
und storage-umount.sh
aufgerufen.
Da die beiden Skripte von anderen Shellskripten auch verwendet werden sollen, dürfen dort keine Variablen fest hinterlegt sein. Diese sind ausschließlich im Hauptdokument imagebackup.sh
definiert.
Bei Aufruf des jeweiligen Unter-Skripts werden die notwendigen Variablen übergeben.
Der Aufruf erfolgt mit
/bin/bash ${SCRIPTPWD}storage-mount.sh „${MOUNTPOINT}“ „${EMAIL}“ „${LOGFILE}“ „${MAINSCRIPT}“ >> ${LOGFILE}
Eine genaue Beschreibung findest du in meinem Beitrag oder der README.md im Git Repository auf Codeberg.
Die beiden Unter-Skripte verwende ich u.a. noch
Die aktuellste Version von imagebackup.sh
gibt es auf Codeberg:
➡ https://codeberg.org/strobelstefan.org/imagebackup
Das gesamte Skript gibt es in der aktuellsten Version auf Codeberg:
➡ https://codeberg.org/strobelstefan.org/imagebackup
Photo by Markus Winkler on Unsplash

ist absolut technik-begeistert und großer Fan von Linux und Open Source. Raspberry Pi Bastler der ersten Stunde und nach wie vor begeistert von dem kleinen Stück Hardware, auf dem er tolle Projekte umsetzt. Teilt hier seine Erfahrungen mit Nextcloud, Pi-hole, YubiKey, Synology und openmediavault und anderen spannenden IT-Themen. Nutzt Markdown und LaTeX zum Dokumentieren seiner Projekte und Gitea zum Versionieren. Sitzt vor einem 49“ Monitor, nutzt Windows und MacOS zum Arbeiten, Linux auf seinen Servern und virtuellen Maschinen und hört dabei Spotify und MP3s und Radio-Streams über seinen RadioPi.