Imagebackup-Skript – Optimiert

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 Pihole 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

kalenderbackup.sh

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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.