Wie ich meine Docker-Container auf dem Raspberry Pi sichere!

Viele kennen sicherlich Tassen, T-Shirts oder Blechschilder mit dem folgenden Aufdruck: Kein Backup? Kein Mitleid! Und da dem nichts hinzuzufügen ist, machte ich mir mal ein paar Gedanken dazu, wie ich die Docker-Container auf meinem heimischen Raspberry Pi schnell und einfach sichern könnte. Ziel sollte ein komprimiertes Backup auf einer NAS-Freigabe sein.

Gerade meinen DNS-Server und Adblocker PiHole möchte ich nach einem Festplattencrash nämlich so schnell wie nur möglich wieder in Betrieb nehmen. Die Motivation war also groß. Herausgekommen ist ein kleines Script, welches die meisten Anforderungen von Heimanwendern und Raspberry Pi Bastlern wie mich selbst abdecken sollte.

Um das Skript erfolgreich einsetzen zu können, muss man lediglich die ersten 3 Variablen oder genauer gesagt deren Inhalt anpassen. Dann kann es auch schon los gehen. Damit das kleine Programm auch wirklich benutzt werden kann, darf man natürlich nicht das kleine x für executable in den Dateiberechtigungen vergessen. Hinzufügen lässt sich dieses einfach mit chmod +x /Pfad/zum/Skript

#!/bin/bash

# Autor: Fabian Wüst
# Erstellung: 26.09.2022
# Aktualisierung: 27.09.2022
# Aufgabe: Erstelle ein Backup aller Container-Verzeichnisse.

# IP-Adresse + NFS-Freigabe (bitte anpassen):
nas="192.168.x.y:/mnt/deinPool/deineFreigabe"

# Einhängepunkt des über NFS freigegebenen Ordners (bitte anpassen):
nas_mountpoint="/mnt/deinOrdner"

# Zu sichernde Verzeichnisse (bitte anpassen):
zu_sichernde_verzeichnisse="/deinOrdner"

# Den Variableninhalt in ein Array umwandeln:
docker+=($zu_sichernde_verzeichnisse)

# Datum im deutschen Format:
datum=$(date +%d-%m-%Y-%H:%M)

# Hostnamen des Servers ermitteln:
hostname=$(hostname -s)

# Eindeutigen Archivnamen für das Backup erstellen:
name_sicherung="$hostname-$datum.tgz"

# Prüfen, ob Einhängepunkt existiert oder angelegt werden muss:

if [ ! -d $nas_mountpoint ]

then

	sudo mkdir -p $nas_mountpoint
	echo
	echo "Das Verzeichnis $nas_mountpoint existierte nicht und wurde deshalb erstellt."

fi

# Mounten des NFS-Shares:
sudo mount -t nfs $nas $nas_mountpoint

# Prüfen, ob die Freigabe gemountet werden konnte:
mount_test=$(df -h | grep -i $nas_mountpoint | awk '{print $6}')

# Überprüfung, ob es ein eingehängtes Dateisystem unter dem Mountpoint gibt:

if [ $nas_mountpoint == $mount_test ]

then 

        # Betroffene Dockercontainer werden gestoppt:
        echo
        echo "Alle zu sichernden Container werden heruntergefahren:"
	echo
	for ((u=0; u<${#docker[*]}; u++))

        do 

        cd ${docker[$u]}
        docker-compose down

        done

        # Bildschirmausgabe:	
	echo
	echo "Es wird mit der Erstellung eines komprimierten Tar-Verzeichnisses begonnen:"
	echo

	# Erstellung der komprimierten Sicherung:
	sudo tar vczf $nas_mountpoint/$name_sicherung $zu_sichernde_verzeichnisse
        echo

	# Bildschirmausgabe:
        echo "Das Backup aller Container und deren Daten wurde erfolgreich erstellt."
        echo

	# Neustart aller gesicherten Container wird ausgeführt:
        echo "Alle Container werden wieder gestartet:"
	echo

	for ((u=0; u<${#docker[*]}; u++))

        do

        cd ${docker[$u]}
        docker-compose up -d

        done

        # In das Nas-Verzeichnis wechseln:
        cd $nas_mountpoint
	
        # Alte Backups löschen bzw. nur die neuesten 5 behalten:
	ls -tp | grep -v '/$' | tail -n +6 | sudo xargs -d '\n' -r rm --
	
        # Nas-Freigabe aushängen nach getaner Arbeit:
        cd / && sudo umount $nas_mountpoint

else

	# Bildschirmausgabe und Beendigung mit Exit-Code 1:
	echo
        echo "Das Programm wird beendet, da der NFS-Share unter $nas_mountpoint nicht eingehängt werden konnte!"
        echo
        exit 1;

fi 

Von Fabian Wüst

Er ist leidenschaftlicher Open-Source-Benutzer und ein begeisterter Technologie-Enthusiast. Als kreativer Kopf hinter Homelabtopia bringt Fabian hier seine umfangreiche Erfahrung als Linux-Admin ein. Um sicherzustellen, dass du aus seinen Beiträgen den größtmöglichen Nutzen ziehen kannst, führt er ausgiebige Tests durch und errichtet dafür immense Setups.

Schreibe einen Kommentar

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