NFS-Server auf dem Raspberry Pi einrichten

Mit Raspbian Jessie geprüft.

NFS ist die Abkürzung von "Network File System". Das ist ein Dienst, der Verzeichnisse auf einem File-Server für andere Rechner übers Netzwerk freigibt bzw. exportiert. Andere Server oder auch Clients können diese Verzeichnisse mounten. Das heißt, in ihr Dateisystem einhängen. Das Einbinden eines von einem NFS-Server exportierten Verzeichnisses auf einem lokalen Client sieht für den Benutzer so aus, als ob sich dieses Verzeichnis auf seinem lokalen Rechner befindet.

Windows kennt etwas ähnliches. Hier handelt es sich um die Laufwerks- oder Ordner-Freigabe. Allerdings sind die NFS-Freigaben nicht so komfortabel zu benutzen. Denn bei Linux muss der Administrator eines Systems wissen, auf welchem Rechner sich die NFS-Freigaben befinden.

Der Vorteil von NFS ist, dass man den Speicherplatz von anderen Rechnern im Netzwerk verwenden kann, als wäre er lokal vorhanden. Wenn sich bestimmte Verzeichnisse zentral auf einem NFS-Server befinden, dann können diese gemeinsam gesichert werden. Dabei muss dieser Server allerdings zuverlässig sein und ständig laufen, um die Verfügbarkeit der freigegebenen Verzeichnisse zu gewährleisten.

In der Praxis unterscheidet man zwischen NFSv3 und NFSv4. Obwohl es NFSv4 gibt, ist NFSv3 nach wie vor eine gängige Version für NFS-Umgebungen. NFSv4 bringt zwar einige Vorteile mit, benötigt andererseits auch etliche weitere Dienste, die man zusätzlich einrichten muss, um in den Genuss der Vorteile von NFSv4 zu kommen.

Die folgende File-Server-Lösung sieht die Installation und Einrichtung des Dateizugriffs übers Netzwerk mit NFSv3 vor.

Aufgaben

  1. Installation des NFS-Servers.
  2. Grundkonfiguration des NFS-Servers.

Lösung: Installation des NFS-Servers

Es gibt zwei Möglichkeiten den NFS-Server zu betreiben. Entweder er läuft im User-Space oder im Kernel-Space. Ohne auf die Besonderheiten beider Varianten einzugehen, empfehlen wir hier die Installation des NFS-Servers für den Kernel-Space.

sudo apt-get update
sudo apt-get install nfs-kernel-server

Hierbei werden sehr viele Pakete geladen und installiert, was einige Zeit in Anspruch nehmen kann.

Lösung: Grundkonfiguration des NFS-Servers

Eine vollständige Konfiguration eines NFS-Servers ist äußerst umfangreich. Neben den Freigaben müssen auch Benutzer und Berechtigungen auf dem NFS-Server eingerichtet werden. Unter NFSv3 geht die meiste Zeit für das Einrichten von Benutzern und Benutzerrechten drauf, was reichlich kompliziert ist.
In Kürze: Ein Benutzer auf einem Linux-System wird durch seine UID und GID identifiziert. Mountet ein Benutzer auf einem Client mit der UID 1000 ein NFS-Verzeichnis, so erhält er in diesem Verzeichnis die Rechte, die der Benutzer mit der UID 1000 auf dem Server hat. Die Berechtigungen werden also nicht anhand des Benutzernamens übernommen, sondern anhand der UID.

Weil eine sinnvolle Beispiel-Konfiguration für einen NFS-Server auch eine zentrale Benutzerverwaltung umfassen müsste und deren Aufwand nicht zu unterschätzen ist, nehmen wir hier nur eine Grundkonfiguration vor, die ohne Benutzerverwaltung auskommen muss.

Hinweis: Die folgende Grundkonfiguration des NFS-Servers ist zum Testen und Ausprobieren gedacht. Der ernsthafte Betrieb eines NFS-Servers geht weit über diese Grundkonfiguration hinaus und sieht eine durchdachte Benutzerverwaltung vor.

Zuerst müssen wir auf dem Server ein Verzeichnis erstellen, das wir nachher exportieren bzw. freigeben wollen.

sudo mkdir /home/public

Anschließend müssten wir hier Berechtigungen für die Benutzer dieses Verzeichnisses setzen. Wir sparen uns den Aufwand und gehen an dieser Stelle den unverantwortlichen Schritt und geben in diesem Verzeichnis alles für alle frei.

sudo chmod ugo+rwx /home/public

An der Stelle noch mal der Hinweis, dass diese Vorgehensweise unsicher ist. Gemeint ist, dass "jeder" in diesem Verzeichnis "alles" tun darf.

Bei der Installation des NFS-Servers wurde die Datei "/etc/exports" erstellt, in der wir die zu exportierenden Verzeichnisse eintragen müssen.

sudo nano /etc/exports

Hier fügen wir folgende Zeile ein, wenn das Verzeichnis ausschließlich "read-only" sein soll:

/home/public *(ro,sync,no_subtree_check,all_squash)

Hier fügen wir folgende Zeile ein, wenn das Verzeichnis für Lesen und Schreiben freigegeben sein soll:

/home/public *(rw,sync,no_subtree_check,all_squash)

Eine Export-Zeile besteht immer aus dem Verzeichnis, dass exportiert werden soll. Danach folgt durch einen "Tabulator" getrennt, die IP-Adresse oder der Hostname des Hosts oder Clients. Ein Asterisk ("*") steht in diesem Fall für "alle". Man kann hier auch eine IP-Adresse, eine IP-Netzadresse oder einen Hostnamen angeben.
Direkt danach folgt ohne Leerzeichen in Klammern die gewünschte Berechtigung. "ro" steht für read-only, "rw" für Lesen und Schreiben.
"sync" steht für sofortiges Schreiben der Veränderungen an Dateien und Verzeichnissen. Ansonsten werden die Dateien zunächst gepuffert und evt. erst zu einem späteren Zeitpunkt geschrieben.
Die Angabe "no_subtree_check" ist notwendig, wollen sie aber an dieser Stelle nicht weiter behandeln.

Nach jeder Änderung an der Datei "/etc/exports" muss diese bekannt gemacht und anschließend der NFS-Server neu gestartet werden.

sudo exportfs -ra
sudo service nfs-kernel-server restart

Wenn Meldungen beim Ausführen dieser Kommandos kommen, muss das kein ernsthaftes Problem sein. Trotzdem sollte man dem nachgehen. In der Regel handelt es sich um ein Konfigurationsproblem.

Mit dem Befehl "rpcinfo" erfährt man, welche RPC-Dienste aktuell auf dem Server laufen.

sudo rpcinfo -p

Korrekt sind folgende Services: portmapper, status, nfs, nlockmgr und mountd, jeweils mehrfach.

Erweiterung: NFS-Freigaben auf dem Client mounten/einhängen

Prinzipiell besteht eine NFS-Freigabe immer aus zwei Seiten. Die Server-Seite und die Client-Seite. Der NFS-Server wurde im Optimalfall erfolgreich konfiguriert. Jetzt geht es um die Einrichtung bzw. das automatische Einhängen (Mount) des freigegebenen Verzeichnisses in das lokale Dateisystem eines Clients oder eines anderen Servers.

Troubleshooting bei NFS

Bei Problemen mit NFS möchte man meist lieber schreiend davonlaufen. Um dem Problem auf die Spur zu kommen, sollte man grundsätzlich immer Netzwerk-Probleme ausschließen können. Wenn nicht lohnt sich die Fehlersuche bei NFS nicht.

Sind Netzwerk-Probleme beseitigt oder ausgeschlossen, dann prüft man als erstes, ob der NFS-Server richtig läuft.

sudo service nfs-kernel-server status

Mit dem Befehl "rpcinfo" erfährt man, welche RPC-Dienste aktuell auf dem Server laufen.

sudo rpcinfo -p

Alternativen zu NFS

Die Einrichtung von NFS-Freigaben ist nicht immer ganz einfach. Wenn es mal funktioniert, dann funktioniert es gut. Doch Fallstricke und Fehlerquellen gibt es viele. Die reichen von unterschiedlichen NFS-Versionen auf Client und Server, instabile Netzwerk-Verbindungen und fehlerhafte Konfigurationen.
Gerade dann, wenn die Erstkonfiguration zur Tortur wird, sieht man sich schnell nach Alternativen um. Mögliche Alternative für den Zugriff auf Dateien und Verzeichnisse auf entfernten Rechnern bieten FTP und Samba.

Weitere verwandte Themen:

Frag Elektronik-Kompendium.de

Netzwerktechnik-Fibel

Alles was Sie über Netzwerke wissen müssen.

Die Netzwerktechnik-Fibel ist ein Buch über die Grundlagen der Netzwerktechnik, Übertragungstechnik, TCP/IP, Dienste, Anwendungen und Netzwerk-Sicherheit.

Das will ich haben!

Elektronik-Set Raspberry Pi Edition
Elektronik-Set Raspberry Pi Edition

Elektronik erleben mit dem Raspberry Pi mit Python und GPIO Zero

  • Leichter Einstieg ins Hardware-nahe Programmieren mit Python und GPIO Zero
  • Experimentieren und Programmieren ohne Vorkenntnisse
  • Sofort Loslegen mit All-in-one-Set

Elektronik-Set jetzt bestellen

Netzwerktechnik-Fibel

Alles was Sie über Netzwerke wissen müssen.

Die Netzwerktechnik-Fibel ist ein Buch über die Grundlagen der Netzwerktechnik, Übertragungstechnik, TCP/IP, Dienste, Anwendungen und Netzwerk-Sicherheit.

Das will ich haben!