staging.inyokaproject.org

NFSv4

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:


Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.

Wiki/Icons/service.png Dieser Artikel behandelt den Umgang mit dem NFS (Network File System) in der Version 4 und stellt die Unterschiede gegenüber der älteren Versionen 2/3 heraus. Ein Artikel zu NFS im Allgemeinen (mit weiterführenden Details) findet sich in NFS.

Vorteil von NFSv4

Gegenüber der vorherigen Versionen bietet NFS in der Version 4 einige Verbesserungen und Vereinfachungen:

Der bemerkenswerteste Unterschied ist, dass NFSv4 mit einem einzelnen Protokoll auskommt. In früheren Varianten von NFS waren stattdessen immer mehrere Protokolle nötig, die vom sog. Portmapper bei jedem Neustart einen Port zugewiesen bekamen. Diese Neuerung macht es v.a. für die (Netzwerk-)Administration um einiges einfacher, da beispielsweise bei Firewall-Freigaben nur noch der NFS-Port 2049 berücksichtigt werden muss.

Weitere Unterschiede

  • NFSv4 kennt UTF-8, sodass es bei Dateinamen mit Sonderzeichen keine Probleme mehr geben sollte.

  • Das Caching wurde erheblich verbessert, dadurch ist NFSv4 einiges schneller.

  • Authentifizierung via Kerberos möglich. (Siehe separater Artikel Kerberos/NFS mit Kerberos sichern)

  • Das Standardprotokoll ist TCP statt UDP wie bei NFSv3.

  • Das File-Locking wurde verbessert. Dies bedeutet insbesondere weniger Probleme, falls ein und dieselben Ordner via Samba und NFS frei gegeben werden.

Anforderung an die Systemumgebung

Wie in den NFS-Versionen zuvor ist es für einen reibungslosen und sicheren Betrieb von Vorteil, wenn alle Benutzer im Netzwerk eindeutige UIDs haben. Alternativ können ab NFSv4 die Berechtigungen auch über die Linux-Benutzernamen gesteuert werden. Zur Autorisierung wird hierfür die Kombination aus Benutzernamen und DNS-Domäne des Rechners verwendet. Falls Server und Client unterschiedlichen DNS-Domänen angehören, kann eine gemeinsame Domäne in der Datei /etc/idmapd eingetragen werden. Weiteres gibt es dazu in der Manpage des idmapd.

Hinweis:

Es sollte darauf geachtet werden, dass Server und Client die gleiche NFS-Version sprechen, also entweder beide Version 3.x oder beide Version 4.x . Verbindet man einen NFS4-Client mit einem NFS3-Server, erhält man nicht immer eine Fehlermeldung. Im laufenden Betrieb stellen sich aber Probleme heraus, die sich nur durch das Angleichen der NFS-Versionen beheben lassen. siehe auch Problembehebung

Installation

Sollte NFS noch nicht vorhanden sein, lässt es nachträglich problemlos installieren. Folgende Pakete und deren Abhängigkeiten müssen über die Paketverwaltung [1] installiert werden.

Server

Wenn der Rechner als Server dienen soll, der Dateien bereitstellt:

  • nfs-kernel-server

Befehl zum Installieren der Pakete:

sudo apt-get install nfs-kernel-server 

Oder mit apturl installieren, Link: apt://nfs-kernel-server

Die unterstützten Protokollversionen des Servers können mit dem Befehl

sudo cat /proc/fs/nfsd/versions 

abgefragt werden.

Client

Wenn der Rechner nur als Client agieren soll, der auf andere Freigaben zugreift:

  • nfs-common

Befehl zum Installieren der Pakete:

sudo apt-get install nfs-common 

Oder mit apturl installieren, Link: apt://nfs-common

Freigaben

Gegenüber den Versionen 2/3 wird bei der Freigabe über NFSv4 ein sogenanntes "Pseudodateisystem" benötigt. Im Folgenden wird erklärt, was es damit auf sich hat:

Beispiel:

Als Hauptverzeichnis für die Freigaben auf dem Server soll /srv/nfsv4 dienen. Dazu wird zuerst ein Verzeichnis angelegt[2]:

sudo mkdir /srv/nfsv4 

Dieses Verzeichnis ist das Pseudodateisystem, das als Wurzelverzeichnis für die Freigaben dient. Darin enthalten sollen nun zwei einzelne Freigaben erstellt werden.

sudo mkdir /srv/nfsv4/freigabe1
sudo mkdir /srv/nfsv4/freigabe2 

Damit in diesen Verzeichnissen auch Daten erscheinen, müssen die Ziele dorthin eingebunden werden:

sudo mount --bind /das/freizugebende/Verzeichnis /srv/nfsv4/freigabe1
sudo mount --bind /noch/ein/freizugebendes/Verzeichnis /srv/nfsv4/freigabe2 

Hinweis: bei nfsvers=3 funktionieren symbolische Links (statt bind) ebenso.

Damit das nach einem Neustart automatisch geschieht, empfiehlt es sich, diese Information zur /etc/fstab hinzuzufügen:

/das/freizugebende/Verzeichnis        /srv/nfsv4/freigabe1  none  bind  0 0
/noch/ein/freizugebendes/Verzeichnis  /srv/nfsv4/freigabe2  none  bind  0 0

Die Freigaben selbst werden wie bei NFSv2/3 durch direkte Bearbeitung der Datei /etc/exports verwaltet. Dazu muss diese Datei angelegt und/oder bearbeitet werden. Zu Beachten ist hier die Angabe des Pseudodateisystems in der ersten Zeile.

Format/Syntax des Files /etc/exports

<pseudo-dateisystem> <rechneradresse>(<optionen>,fsid=0)
<pfad1>   <rechneradresse>(<optionen>)
<pfad2>   <rechneradresse>(<optionen>)

Man beachte die spezielle Option vom Pseudo-Dateisystem 'fsid=0'. Diese markiert das oberste Verzeichnis für alle Freigaben zusammen. Um die oben angelegten Verzeichnisse frei zu geben, werden beispielsweise folgende Zeilen benötigt:

/srv/nfsv4   192.168.2.0/24(rw,sync,root_squash,no_subtree_check,fsid=0)
/srv/nfsv4/freigabe1  192.168.2.0/24(rw,sync,root_squash,no_subtree_check)
/srv/nfsv4/freigabe2  192.168.2.0/24(rw,sync,root_squash,no_subtree_check)

Achtung!

Als Rechneradresse kann neben einer IP-Adresse oder eines IP-Bereiches auch ein Rechnername oder ein DNS-Domainname angegeben werden. Allerdings müssen im Gegensatz zu IP-Adressangaben diese Namen bereits beim Systemboot richtig aufgelöst werden können, was nicht immer der Fall sein muss. Kann der Name beim Booten nicht aufgelöst werden, wird die Freigabe nicht erstellt. Dies kann zu erheblichen Problemen führen.

Nun muss der NFS-Server noch dazu veranlasst werden, die /etc/exports neu einzulesen.

sudo service nfs-kernel-server reload 

Ein Test auf dem Server zeigt die Freigaben:

sudo exportfs -v 

Einhängen der Freigaben am Client

Um zu testen, ob sich die Freigaben am Client fehlerfrei einbinden lassen, hängt man die Verzeichnisse einmal direkt via Kommandozeile ein. Zu beachten ist hier, dass das Pseudodateisystem das Wurzelverzeichnis der Freigabe definiert - / bei der Angabe der Freigabe entspricht also /srv/nfsv4 auf dem NFS-Server.

Zuerst wird der Mountpoint für die Freigaben erstellt:

sudo mkdir /mnt/nfsv4-test 

Dann wird die erste Freigabe in das Verzeichnis eingehängt:

sudo mount -t nfs -o nfsvers=4 <nfs-server>:/freigabe1 /mnt/nfsv4-test 

Stattdessen kann auch das ganze Wurzelverzeichnis eingehängt werden:

sudo mount -t nfs -o nfsvers=4 <nfs-server>:/ /mnt/nfsv4-test 

Wenn bis hierher alles geklappt hat, kann man sich alle Mountpoints noch mit dem Befehl

mount 

anzeigen lassen.

Wenn alles geklappt hat, kann man die NFS-Freigabe in die fstab eintragen, z.B.

 <nfs-server>:/ /mnt/nfsv4-test nfs nfsvers=4,rw 0 0

Wenn man eine höhere NFS-Version als 4.0 verwenden möchte, kann man dies mit der Mount-Option minorversion= angeben. Der fstab-Eintrag

 <nfs-server>:/ /mnt/nfsv4-test nfs nfsvers=4,minorversion=2,rw 0 0

hängt die Freigabe mit der NFS-Version 4.2 ein.

Problembehebung

eingehängte Dateien gehören nobody

Problembeschreibung

Wenn die eingehängten Daten am Client dem Benutzer nobody gehören und sich dies auch nicht ändern lässt, ist das ein Zeichen dafür, dass hier mit einem NFS4-Client auf eine NFS3-Freigabe zugegriffen wird. Die Ursache ist in der Regel

a) Die Serverkonfiguration wurde nach der NFSv3-Syntax gebaut, es fehlt die Angabe des Pseudodateisystems mit fsid=0

b) Der NFS-Server unterstützt kein NFSv4. Dies ist zum Beispiel bei Storage-Systemen mit integriertem NFS-Server der Fall. *)

# ls -la
total 17
drwxr-xr-x  2 nobody 4294967294  3 Apr 22  2021 ./
drwxrwxr-x 19 nobody service    19 Apr 22  2021 ../
-rw-r--r--  1 nobody 4294967294  0 Apr 22  2021 file
# sudo chown service file
# ls -la
total 17
drwxr-xr-x  2 nobody 4294967294  3 Apr 22  2021 ./
drwxrwxr-x 19 nobody service    19 Apr 22  2021 ../
-rw-r--r--  1 nobody 4294967294  0 Apr 22  2021 file

Lösung

  1. Sicherstellen, dass der NFS-Server das Protokoll in der Version 4 verwendet. Sollte dies nicht möglich sein

  2. Client-seitig die Version3 verwenden. Dies geschieht durch die Angabe der Version3 im Mount-Befehl:

sudo mount -t nfs -o nfsvers=3 <nfs-server-version3>:/freigabe1 /mnt/nfsv4-test 

Intern

  • NFS – Grundartikel zu NFS (hauptsächlich Version 2/3)

  • Serverdienste – Übersichtsartikel

  • Heimnetzwerk – Einführender Artikel; betrifft vor allem einfache Anwendungen

  • Autofs – Erlaubt auch die Auswahl ("browse") und das Einbinden von NFS-Freigaben

Extern

Diese Revision wurde am 30. Juni 2021 15:27 von rjm erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Netzwerk, Server, Freigaben