Serie: Raspi als NAS und Musikmaschine - Teil 2

Mi, 21. April 2021, Ralf Hersel

Meine alte NAS musste einer Raspi-basierten Lösung weichen, um als Allround-Gerät verschiedene Bedürfnisse zu erfüllen. Im ersten Teil dieser Serie habe ich die Hardware beschrieben, im zweiten Teil geht es um die Konfiguration des Raspberry Pi als File-Server.

Der Titel 'Raspi als NAS ...' ist nicht ganz korrekt, weil ein Raspi mit nur einem angehängten Massenspeicher eigentlich keine NAS ist. Ein solche hat in der Regel mehrere Massenspeicher, die üblicherweise (mehr oder weniger) gespiegelt werden (RAID). In meinem Fall spielte das keine Rolle, weil ich keine Speicherredundanz brauche und weil mir mehrere 2 TB SSDs zu teuer gewesen wären. Falls der M2-Stick den Geist aufgibt, kaufe ich einen neuen und spiele das Backup zurück.

Beim Netzwerk-Dateisystem habe ich mich für NFS entschieden, weil es einfach einzurichten ist, sehr schnell läuft und ich jahrelange gute Erfahrungen damit gemacht habe. Die Netzwerksicherheit spielt für mich eine untergeordnete Rolle, da die Lösung nur im heimischen Netzwerk läuft und ich keine Ports nach aussen geöffnet habe.

Installation des NFS-Servers

Zunächst habe ich den NFS-Server auf dem Raspi installiert. Das geht so:

sudo apt install nfs-kernel-server

Im nächsten Schritt erzeugen wir einen Mountpoint für den M2-Stick. Die SSD wird zwar automatisch als USB-Speicher gemounted, wir möchten aber einen richtigen Mount haben, der später in die FStab eingetragen werden kann.

sudo mkdir /mnt/nas

Das Verzeichnis muss existieren bevor der Speicher dorthin gemounted werden kann. In meinem Beispiel verwende ich überall den Namen 'nas' als Mountpoint; dieser kann aber beliebig genannt werden. Nun ermitteln wir den Storage Device Name und seine UUID:

lsblk -o UUID,NAME,FSTYPE,SIZE,MOUNTPOINT,LABEL,MODEL

pi@raspi4:~ $ lsblk -o UUID,NAME,FSTYPE,SIZE,MOUNTPOINT,LABEL,MODEL
UUID                                 NAME        FSTYPE  SIZE MOUNTPOINT LABEL    MODEL
eace7275-3e17-4e33-a761-54ab92988713 sda         ext4    1.8T /mnt/nas   wdblue   Tech

Im oben gezeigten Beispiel ist die 'wdblue' bereits gemounted. Bei euch wird das anders aussehen. Wichtig sind hier die Angaben zur UUID (eace7275...) und zum Storage Device Name (sda). Diese Werte lauten bei euch anders; bitte notieren. Nun wird die M2 in '/mnt/nas' gemounted:

sudo mount /dev/sd? /mnt/nas

Wichtig: Das ? in 'sd?' muss durch den richtigen Buchstaben ersetzt werden, also 'sda, sdb, sdc, ...'. Danach könnt ihr im Verzeichnis '/mnt/nas' nachsehen, ob der Speicher korrekt gemounted wurde. Als Nächstes vergeben wir User-Rechte auf den gemounteten Stick:

sudo chown -R pi:pi /mnt/nas
sudo find /mnt/nas/ -type d -exec chmod 755 {} \;
sudo find /mnt/nas/ -type f -exec chmod 644 {} \;

Nun wird ein Eintrag in der Filesystem-Table (fstab) benötigt, damit der Stick beim Booten des Raspberry Pi gemounted wird. Die FStab befindet sich hier: '/etc/fstab' und kann mit 'sudo nano /etc/fstab' bearbeitet werden. Der Eintrag am Ende der Datei sieht so aus und enthält einen Kommentar, um den Eintrag zuordnen zu können:

# Ralf: wdblue external m2 stick:
UUID=eace7275-3e17-4e33-a761-54ab92988713 /mnt/nas ext4 defaults,users,rw,nofail 0 0

Anstatt den Storage Device Name (sda, sdb, sdc, ...) zu verwenden, habe ich hier die UUID eingetragen. Der Vorteil ist, dass exakt dieses Gerät gemounted wird, und nicht irgendein zufälliges Gerät, das an einem USB-Port angeschlossen ist. Ausserdem ist zu bemerken, dass der M2-Stick als 'ext4' formatiert wurde. Wer ein anderes Dateisystem-Format bevorzugt (btrfs, ntfs, fat) sollte dies bei diesem Eintrag berücksichtigen und den Stick auch vorher entsprechend formatieren.

Was wurde bisher erreicht? Der NFS-Server ist installiert, der Mountpoint existiert, wir kennen die Adresse des Speichermediums und die User-Rechte wurden auf den Speicher vergeben. Somit ist der M2-Stick auf dem Raspberry Pi voll nutzbar. Was noch fehlt, ist die Konfiguration des NFS-Servers, damit der Speicher auch von allen anderen Geräten im Netzwerk erreicht werden kann. Dafür öffnet man die Datei '/etc/exports' und fügt ganz unten diese Zeile ein:

/mnt/nas *(rw,all_squash,insecure,async,no_subtree_check,anonuid=1000,anongid=1000)

Um diesen Eintrag zu aktivieren, muss der NFS-Server neu gestartet werden. Der Befehl dazu lautet:

sudo systemctl restart nfs-kernel-server

Nun sind alle Einstellungen auf dem Raspi erledigt, sodass die Clients darauf zugreifen können.

Konfiguration der NFS-Clients

Um auf den File-Server zugreifen zu können, sind einige wenige Einstellungen auf den Client-Computern nötig. Selbstverständlich muss NFS auf dem Client installiert werden (Beispiel für Debian-basierte Systeme):

sudo apt install nfs-common

Als Nächstes wird wiederum ein Eintrag in der 'fstab' benötigt, um den Netzwerk-Speicher zu mounten. Mit dem Befehl 'sudo nano /etc/fstab' kann die Datei bearbeitet werden:

# Ralf: mount M2-Stick from Raspi4
192.168.1.49:/mnt /mnt nfs rw,hard,intr,rsize=8192,wsize=8192,timeo=14 0 0

Zu diesem Eintrag gibt es ein paar Bemerkungen. Zuvorderst steht die IP-Adresse des Raspberry Pi im eigenen Netzwerk. Falls jemand nicht weiss, wie man diese Adresse ermittelt, verweise ich auf diesen Artikel. Beim Mountpoint muss nur '/mnt' angegeben werden; das Unterverzeichnis '/nas' wird automatisch eingefügt. Nun kann man den PC neu starten, um zu überprüfen, ob das Laufwerk korrekt eingehängt wird. Das kann dann so aussehen:

Das ist der Punkt, an dem die Probleme beginnen. Der Eintrag in die 'fstab' ist der bevorzugte Weg, um externe Laufwerke in ein Linux-Dateisystem einzubinden. Nachdem man sich für die richtige der hundert möglichen Einstellungen entschieden hat, stellte ich fest, dass mein Notebook nun in die (systemd-bedingte) maximale Shutdown-Zeit von 90 Sekunden fällt. Ich habe an den fstab-Einstellung herumgeschraubt und keine Lösung dafür gefunden. Stattdessen hat mich eine seit 10 Jahren bewährte Lösung für das Einbinden von Laufwerken gerettet, nämlich autofs. Das Problem gab es nur bei meinem Notebook; auf meinem Desktop-PC funktioniert der fstab-Eintrag einwandfrei und verlängert nicht die Shutdown-Zeit.

Autofs to the rescue

Autofs löst viele Probleme im Zusammenhang mit dem Einbinden von externen Laufwerken. Sei es eine schlafende NAS, deren Festplatten zur Bootzeit nicht zur Verfügung stehen, oder ein Notebook, welches nicht rechtzeitig die WLAN-Verbindung aufbauen kann. Autofs hilft in diesen Fällen fast immer. Bei meiner fest verbundenen Raspi-SSD hätte ich gar keine Probleme erwartet. WLAN liegt bei meinem Notebook an, bevor die Platten gemountet werden und der Raspi ist sowieso immer bereit. Na ja, falsch vermutet.

Wenn ihr autofs verstehen möchtet, lest euch bitte die Beschreibungen dazu durch. Das tl;dr dazu lautet so:

/etc/auto.master:
/mnt /etc/auto.nfs --timeout=0 --ghost

/etc/auto.nfs:
nas 192.168.1.49:/mnt/nas/

Wie vorher beschrieben, müsst ihr die IP-Adresse eures Raspis entsprechend anpassen. Wichtig sind auch die Mountpoints; wenn ihr dieses Beispiel nachbauen möchtet, müsst ihr euch konsequent an die Pfade halten, nämlich: /mnt/nas

Es geht bestimmt noch besser

Einige Wochen nachdem dieser Artikel geschrieben wurde, haben sich neue Erkenntnisse zum Einbinden eines Netzwerklaufwerks ergeben. Dazu lest ihr mehr in diesem Artikel: Mounten mit Manjaro

Quellen:

https://pimylifeup.com/raspberry-pi-nfs/
https://www.raspberrypi.org/documentation/configuration/nfs.md
https://desertbot.io/blog/headless-raspberry-pi-4-external-ssd
https://www.raspberrypi.org/documentation/configuration/external-storage.md
https://wiki.ubuntuusers.de/Autofs/

Ralf Admin
Geschrieben von Ralf am 22. April 2021

Danke für die Hinweise auf Openmediavault. Ich nehme das deshalb nicht, weil es eine Appliance ist. Ich brauche den Raspi jedoch noch für viele andere Dinge.

Didi
Geschrieben von Didi am 21. April 2021

Das dürfte alles viel zu kompliziert sein. Mein Vorschlag: Openmediavault mit dem Plugin Rsnapshot. Das funktioniert bei mir seit langer Zeit einwandfrei. Zwei Sticks anschließen und bei Rsnapshot festlegen, welcher auf welchem gesichert werden soll. OMV sichert automatisch nachts. Man könnte auch daran denken, mit entsprechendem Plugin ein RAID zu erstellen. Das funktioniert aber nur mit Festplatten und nicht mit Sticks. OVM zeigt an, Sticks seien zu unsicher. Siehe folgende Anleitung (ohne Rsnapshot; das Plugin ist selbsterklärend): https://bitreporter.de/raspberrypi/raspberry-pi-nas-mit-openmediavault-5-selber-bauen/

Stanok
Geschrieben von Stanok am 21. April 2021

Wieso machst das nicht mit OpenMediaVault?