NFSv4

Die Hauptunterschiede zwischen NFSv3 (und älter) und NFSv4 sind:

Leider macht das das ganze komplexer und schwieriger einzurichten.

NFSv4 Client einrichten

Auf dem Client muss rpc.gssd laufen (sonst geht Kerberos nicht). Für dinit habe ich mir ein passendes service init gebaut rpc-gssd-dinit

Das Dateisystem kann dann wie folgt gemountet werden:
root@osiris:~# mount -t nfs -o nfsvers=4 yourserver:/freigabe /mnt/nfs4/
oder, mit Verwendung von Kerberos, so:
root@osiris:~# mount -t nfs -o nfsvers=4,sec=krb5 yourserver:/freigabe /mnt/nfs4/

In die fstab kann man das so eintragen:

/etc/fstab
nfsserver:/freigabe /nfs/mountpoint nfs noauto,nfsvers=4,proto=tcp 0 0 rpc_pipefs /var/lib/nfs/rpc_pipefs rpc_pipefs defaults 0 0
Laut manpage ist der Filesystemtyps "nfs4" "deprecated" (veraltet). Verwende stattdessen den Typ "nfs" und die Option "nfsvers=4"

In der /etc/idmapd.conf *MUSS* als Domain der DNS domain name gesetzt sein (NICHT der Realm). Nach Änderungen muss man nfsidmap -c aufrufen Danach NFS dateisysem unmounten und neu mounten

NFSv4 Server setup

Folgendes braucht es:

Da meine Server alle unter Artix Linux mit dem dinit laufen, habe ich dafür ein passendes service file gemacht nfsv4-server-dinit.

Configuration of a NFSv4-only server

/etc/fstab
rpc_pipefs /var/lib/nfs/rpc_pipefs rpc_pipefs defaults 0 0 nfsd /proc/fs/nfsd nfsd defaults 0 0

Wichtig ist, dass in der /etc/fstab der fstype auf nfs ist, und keinesfalls nfs4 - die version muss (wenn überhaupt) zwingend per parameter nfsvers gesetzt werden.

Konfiguration des idmap

/etc/idmapd.conf
[General] Verbosity = 0 Domain = localdomain [Mapping] Nobody-User = nobody Nobody-Group = nogroup

Ab kernel Version ?.?.? muss auf dem Client der nfsidmapd nicht mehr laufen (auf dem Server aber der rpc.idmapd sehr wohl). Ob das mapping funktioniert, kann man mit

grep id_resolv /proc/keys dmesg |grep id_resolver

überprüfen.

Debugging

Informationen über den laufenden NFS daemon findet man in /proc/fs/nfsd

For debugging or finding why NFS mount fails on server side, you need to enable debugging to get relevant infos to the system log like so:

root@server:~# rpcdebug -m nfsd -c all # clear all flags to stop logging them root@server:~# rpcdebug -m nfsd -s auth proc # set the auth and proc flags instead of logging all flags

on systems with systemd, you will then find debugging infos e.g. with journalctl -b -r

rpc.idmapd started nicht richtig, wenn /proc/net/rpc/nfs4.nametoid/channel
        nicht existiert. wer öffnet das ?
rpc.gssd started nicht richtig, wenn ??? fehlt