NFS-Server auf dem Raspberry Pi einrichten

ELektronik-KOmpendium.de
Online

Preis auf Anfrage
Vergleichen Sie diesen Kurs mit ähnlichen Kursen
Mehr ansehen

Wichtige informationen

  • Kurs
  • Online
Beschreibung

NFS-Server auf dem Raspberry Pi einrichten 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.

Wichtige informationen

Themenkreis

Aufgaben
  1. Installation des NFS-Servers.
  2. Grundkonfiguration des NFS-Servers.
  3. Einrichten des NFS-Clients.
  4. Automatisches Einhängen des freigegebenen Ordners auf dem Client.
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.

Lösung: NFS-Client konfigurieren

Prinzipiell besteht ein NFS-Export immer aus zwei Seiten. Die Server-Seite und die Client-Seite. Den NFS-Server haben wir konfiguriert. Jetzt geht es um die Einrichtung bzw. das Einhängen (Mount) des exportierten Verzeichnisses in das lokale Dateisystem eines Clients oder eines anderen Servers.

Dazu müssen wir auf dem Client bzw. Server ein paar Pakete installieren. Weil NFS unter Linux-Distributionen weit verbreitet ist, kann es natürlich sein, dass die NFS-Pakete schon installiert sind.

sudo apt-get update sudo apt-get install nfs-common

Anschließend müssen wir auf dem Client ein lokales Verzeichnis erstellen, das später als Mountpoint dient, um das entfernte Verzeichnis einzuhängen.

sudo mkdir -p /home/nfs/public

Bevor wir ein Verzeichnis einhängen schauen wir, ob es überhaupt vom NFS-Server exportiert wurde. Hierfür brauchen wir die IPv4-Adresse des NFS-Servers. In diesem Beispiel hat der NFS-Server die IPv4-Adresse "192.168.1.2".

showmount -e 192.168.1.2

Wird dort das Verzeichnis "/home/public" angezeigt, dann können wir es auf dem Client manuell einhängen.

sudo mount -t nfs -o soft 192.168.1.2:/home/public /home/nfs/public

Der Default-Wert des Parameters "-o" ist "hard". Das führt dazu, dass ein Programm, das auf ein NFS-Verzeichnis zugreift, nicht mehr reagiert, wenn der NFS-Server nicht verfügbar sein sollte. Damit das nicht passiert, wählen wir "soft".

Wenn das Kommando ohne Fehler durchgegangen ist, testen wir die Freigabe bzw. den Export.
Dazu erstellen wir auf dem NFS-Server eine Datei und prüfen, ob sie vorhanden ist.

touch /home/public/test ls /home/public

Wenn ja, dann testen wir die Freigabe auf dem Client und löschen die Datei.

ls /home/nfs/public rm /home/nfs/public/test

Wenn die Datei anschließend auf dem Server weg ist, dann hat alles wie gewünscht funktioniert.
Leider ist das NFS-Verzeichnis nur temporär eingehängt. Das heißt, bei einem Reboot ist es wieder weg und muss erneut manuell eingehängt werden.

Lösung: NFS-Verzeichnis dauerhaft auf dem Client einrichten

Das Ziel ist das exportierte Verzeichnis permanent auf dem Client verfügbar zu machen. Normalerweise würde man dazu die Datei "/etc/fstab" so modifizieren, dass das NFS-Verzeichnis beim Systemstart automatisch eingebunden wird. Allerdings hat "fstab" den Nachteil, dass das Mounten misslingt, wenn beim Systemstart noch kein Netzwerk verfügbar ist. Meist erstellt man dann ein Script, dass das Verzeichnis erst dann einhängt, wenn eine Netzwerkverbindung festgestellt werden konnte. Oder man trägt das Mount-Kommando in der Datei "/etc/rc.local" ein.

Wir wollen aber eine Lösung, die auch wirklich funktioniert und gleichzeitig fehlerträchtige Klimmzüge vermeiden. Die Einrichtung von NFS scheitert häufig daran, weil man die Freigaben auf den Clients nicht dauerhaft eingebunden bekommt. Deshalb binden wir das exportierte Verzeichnis mit dem Tool "autofs" ein.

Hinweis: "autofs" verwendet "automount". Außerdem wird das exportierte Verzeichnis immer erst beim ersten Zugriff gemountet und nicht automatisch beim Systemstart. Das ist insofern kein Problem, weil es beim ersten Zugriff nur eine kurze Verzögerung gibt.

Zuerst müssen wir "autofs" auf dem Client installieren:

sudo apt-get install autofs

Dann erstellen wir eine Map-Datei:

sudo nano /etc/auto.nfs

Dort tragen wir das exportierte Verzeichnis ein:

public -fstype=nfs,rw,retry=0 192.168.1.2:/home/public

Anschließend die Datei speichern und schließen.
Dann öffnen wir die Master-Datei, in der die Map-Dateien eingetragen sind.

sudo nano /etc/auto.master

Am Ende der Datei fügen wir folgende Zeile hinzu:

/home/nfs /etc/auto.nfs

Anschließend die Datei speichern und schließen.

Dann muss die veränderte Map-Datei durch einen Restart von "autofs" neu geladen werden. Sie wird beim zukünftigen Einbinden berücksichtigt.

sudo service autofs restart

Jetzt kann man testen, ob das exportierte Verzeichnis eingebunden ist.

mount

Ansicht des Verzeichnisses:

ls /home/nfs/public

Hier sollte der Inhalt des exportierten Verzeichnisses vom Server angezeigt werden. Man sollte sicherstellen, dass sich darin zumindest eine Datei befindet, damit man auf dem Client sieht, ob das Einbinden funktioniert hat. Wenn das Verzeichnis auf dem Server leer ist, kann man auf dem Client den Unterschied zwischen eingehängt und nicht eingehängt nicht erkennen.

Ob "autofs" auch wirklich funktioniert, kann man nur durch den Neustart des Clients prüfen.

sudo reboot

In der Regel sollte das freigegebene Verzeichnis nach dem ersten Zugriff eingebunden zur Verfügung stehen.

ls /home/nfs/public 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 Troubleshooting auf dem NFS-Client

Wenn das Einbinden der exportierten Verzeichnisse nicht funktioniert, prüft man, ob überhaupt NFS-Freigaben zur Verfügung stehen.

showmount -e 192.168.1.2

Wenn ja, dann gibt es eventuell ein Problem mit "autofs". Dazu prüft man die syslog-Datei, in der sich vielleicht Fehlermeldungen zu "automount" finden.

sudo cat /var/log/syslog | grep -i automount 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.

  • FTP-Server auf dem Raspberry Pi einrichten
  • Samba-Server auf dem Raspberry Pi einrichten
Weitere verwandte Themen:
  • Schritt für Schritt den Raspberry Pi als Server einrichten
  • Raspberry Pi als Server im Dauerbetrieb (24/7, headless)
  • File-Server auf dem Raspberry Pi einrichten
  • DHCP-Server auf dem Raspberry Pi einrichten
  • Print-Server mit CUPS und AirPrint auf dem Raspberry Pi einrichten

Hinweis: Dieses Tutorial ist Teil einer Aufgaben und Übungen mit dem Raspberry Pi-Reihe, die für Lern- und Ausbildungszwecke erstellt wurde. Die dargestellte Lösung ist Teil einer konkreten Aufgabenstellung, die Schüler, Auszubildende und Studenten, lösen sollen. Deshalb muss der hier aufgezeigte Weg nicht der Optimalfall sein.


Vergleichen Sie diesen Kurs mit ähnlichen Kursen
Mehr ansehen