Einrichten von NFS-Server und -Client unter Raspbian


Prof. Jürgen Plate

Einrichten von NFS-Server und -Client unter Raspbian

Allgemeines

NFS steht für "Network File System". NFS ist die im UNIX-Bereich übliche Metode, Verzeichnisse zu exportieren bzw. zu importieren und dadurch auf mehreren Rechnern zu benutzen. Mittels NFS kann ein Client auf eine entferntes Verzeichnis auf einem NFS-Server (lesend, schreibend) zugreifen, als ob dieses auf der lokalen Festplatte wäre. Hier wird das Einrichten von NFS-Server und NFS-Client erklärt.

In den folgenden Beispielen werden zwei Systeme verwendet:

Installation des NFS-Servers

Zur Installation der notwendigen Software dient das Kommando:

apt-get -y install nfs-kernel-server nfs-common rpcbind

Nun müssen die gewünschten Verzeichnisse des Servers exportiert werden. Der Client soll auf die Verzeichnisse /home und /usr/local/global zugreifen können. Deshalb müssen sie auf dem Server exportiert werden. Wenn ein Client auf eine NFS Freigabe zugreift, passiert dies normalerweise als Benutzer nobody. Für gewöhnlich gehört /home dem root-User, und da auf das Verzeichnis lesend und schreibend zugegriffen werden soll, muss ein Zugriff als root-User freigegeben werden. Das Verzeichnis /usr/local/global existiert noch nicht, also wird es angelegt:

mkdir /usr/local/global
chown nobody:nogroup /usr/local/global
Alternativ könnte man auf dem Server auch den gleichen User wie auf dem Client einrichten - wobei es nicht auf einen identischen Usernamen, sondern auf die gleiche User-Id auf beiden Systemen ankommt. Das NFS-Verzeichnis wird dann diesem User und seiner Gruppe zugewiesen. In dem Fall kann dann auch nur dieser User auf das Verzeichnis und seine Dateien zugreifen - was die ganze Sache sicherer macht.

Nun werden in der Datei /etc/exports die NFS-Freigaben eingetragen. /home und /usr/local/global werden freigegeben (siehe man 5 exports):

# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5). # # Example for NFSv2 and NFSv3: # /srv/homes hostname1(rw,sync) hostname2(ro,sync) # # Example for NFSv4: # /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt) # /srv/nfs4/homes gss/krb5i(rw,sync) # /home 10.1.1.20(rw,sync,no_root_squash) /usr/local/global 10.1.1.20(rw,sync)
Grundsätzlich werden alle Freigabe-Optionen in Klammern hinter der IP-Adresse angegeben und es darf kein Leerzeichen zwischen IP-Adresse und Optionen stehen. Mehrere Optionen werden durch Kommata voneinander getrennt.

Die Option no_root_squash bewirkt, dass auf /home als root zugegriffen werden kann. Nachdem /etc/exports bearbeitet wurde, muss dies dem NFS-Daemon per Kommando exportfs -a mitgeteilt werden. Wollen Sie mehr über /etc/exports und verfügbare Optionen erfahren, hilft die Manualpage (man 5 exports) weiter. Wichtig: Es dürfen keine Unterverzeichnisse von exportierten Verzeichnissen freigegeben werden. Falsch wäre beispielsweise eine Freigabe von /usr/local als Readonly (ro) und dann /usr/local/global als Readwrite (rw). In manchen Fällen kann es auch notwendig sein, dass alle Userzugriffe auf die anonyme User- und GruppenID abgebildet werden. Dafür gibt es die Option all_squash. Weiter ist es möglich, festzulegen, welche UID und GID als anonyme IDs verwendet werden sollen. Dazu werden die Optionen anonuid=... und anongid=... verwendet.

Statt der IP-Adresse eines einzelnen Rechners wie oben kann auch ein IP-Adressbereich angegeben werden. In diesem Fall werden die Netzwerkadresse und die Netzmaske angegeben. Um beispielsweise alle Rechner aus dem Netz 10.1.1.0 freizugeben, muss der Eintrag für die IP-Adresse 10.1.1.0/255.255.255.0 lauten.

Zwar wird bei der Installation versucht, den NFS-Daemon zu starten, was aber fehlschägt, wenn /etc/exports noch keine Freigaben enthält. Gegebenenfalls müssen jetzt die Dienste nochmals angestartet werden:

/etc/init.d/nfs-common restart
/etc/init.d/nfs-kernel-server restart
Um zu überprüfen, ob die Verzeichnisse auch exportiert werden, kann man den folgenden Befehl absetzen:
showmount -e

Das Kommando nfsstat liefert statistische Informationen über den lokalen NFS-Server, kann also nur auf dem Serverrechner selbst aufgerufen werden. Das Programm listet Informationen über die client- und serverseitigen Aktivitäten, darunter Angaben, wieviele (und wieviel Prozent) bestimmte Aktionen wie read, write, create, rename, ... ausgeführt wurden.

Installation des NFS-Clients

Zur Installation der notwendigen Software dient das Kommando:

apt-get -y install nfs-common rpcbind
Nun müssen die Freigaben des Servers beim Client eins Dateisystem eingehängt werden. Zuerst werden die Verzeichnisse erstellt, in denen die NFS-Freigaben eingehängt werden sollen, z.B.:
mkdir -p /nfs/home
mkdir -p /nfs/global

Danach können sie versuchsweise eingehängt werden:

mount 10.1.1.10:/home /nfs/home
mount 10.1.1.10:/usr/local/global /nfs/global
(Statt der IP-Adresse kann natürlich auch der Rechnername verwendet werden, sofern ein DNS-Server erreichbar ist oder der Name in /etc/hosts eingetragen wurde.)

Nun sollte man zwei NFS-Freigaben in der Ausgabe des Kommandos df -h sehen:

Dateisystem           Size  Used Avail Use% Eingehängt auf
/dev/sda1              65G  6,8G   55G  12% /
tmpfs                1014M     0 1014M   0% /lib/init/rw
udev                 1009M   96K 1009M   1% /dev
tmpfs                1014M     0 1014M   0% /dev/shm
10.1.1.10:/usr/local/global
                      536G  6,5G  519G   2% /nfs/global
10.1.1.10:/home    324G  12,2G 312G   4% /nfs/home
Auch das mount-Kommando zeigt die neuen NFS-Freigaben:
   ...
10.1.1.10:/home on /nfs/home type nfs (rw,addr=10.1.1.10)
10.1.1.10:/usr/local/global on /nfs/global type nfs (rw,addr=10.1.1.10)
   ...
Auf dem Client kann nun versucht werden, Testdateien auf den NFS-Freigaben anzulegen, die dann auf dem Server sichtbar werden.

Natürlich ist es nicht sinnvoll, die NFS-Freigaben auf dem Client immer manuell einzuhängen. Deshalb werden die Freigaben in der Datei /etc/fstab eingetragen, damit sie automatisch eingehängt werden, wenn der Client startet.

   ...
10.1.1.10:/home              /nfs/home    nfs   rw,sync,soft,intr  0  0
10.1.1.10:/usr/local/global  /nfs/global  nfs   rw,sync,soft,intr  0  0
   ...
Mehr über verfügbare Optionen (oben rw,sync,soft,intr) liefert die Manpage (man nfs). Beim nächsten Restart des Client-Systems sollten die Freigaben automatisch aktiv sein.

NFS trägt unter anderem auch zur Schonung der SD-Karte bei. Wenn man nämlich schreib- und leseintensive Verzeichnisse per NFS von einem Server (der eine normale Festplatte hat) importiert, fallen Schreiben und Lesen auf der SD-Karte weg. So läuft bei mir ein RasPi mit Kamera, der die alle 10 Minuten aufgenommenen Bilddaten per NFS auf einem Server ablegt und somit nicht auf die SD-Karte schreiben muss.

Copyright © Hochschule München, FK 04, Prof. Jürgen Plate
Letzte Aktualisierung: , Webseite: