Zum Inhalt

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 Pi-hole läuft.

Das Skript kannst du in der aktuellsten Version von Codeberg herunterladen:

Codeberg

Zum imagebackup Skript

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 Shell Skript 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 externe Speichermedium nach getaner Arbeit wieder ausgeworfen

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 Hauptskript, 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 Shell Skripten 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.

Codeberg

Zum kalenderbackup Skript

Zum imagebackup Skript

Gib mir gerne einen Kaffee ☕ aus ❗️

Wenn dir meine Beiträge gefallen und geholfen haben, dann kannst du mir gerne einen Kaffee ☕️ ausgeben.

Donation via PayPalDonation via LiberaPay

Donation via Bitcoin
Bitcoin Address: bc1qfuz93hw2fhdvfuxf6mlxlk8zdadvnktppkzqzj

Weiterführende Links & Quellen

Photo by Markus Winkler on Unsplash