NFSv4 ne peut pas définir de sockets pour nfsd sans exécuter rpcbind

8

Selon Red Hat docs, «rpcbind» n'est plus requis:

Étant donné que la prise en charge du protocole a été intégrée au protocole v4, NFSv4 n'a aucune interaction avec les démons portmap, rpc.lockd et rpc.statd. NFSv4 écoute sur le port TCP bien connu 2049, ce qui élimine le besoin d'interaction avec le portmap. Les protocoles de montage et de verrouillage ont été intégrés au protocole V4, ce qui élimine le besoin d'interaction avec rpc.lockd et rpc.statd. Le démon rpc.mountd est toujours requis sur le serveur, mais n'est impliqué dans aucune opération over-the-wire.

mais je ne peux pas démarrer le démon NFS lorsque le service 'rpcbind' n'est pas en cours d'exécution:

# service nfs start
Starting NFS services:                                     [  OK  ]
Starting NFS quotas: Cannot register service: RPC: Unable to receive; errno = Connection refused
rpc.rquotad: unable to register (RQUOTAPROG, RQUOTAVERS, udp).
                                                           [FAILED]
Starting NFS mountd:                                       [  OK  ]
Starting NFS daemon: rpc.nfsd: writing fd to kernel failed: errno 111 (Connection refused)
rpc.nfsd: unable to set any sockets for nfsd
                                                           [FAILED]

J'ai désactivé NFS v2 et v3:

# grep -v "^#" /etc/sysconfig/nfs
MOUNTD_NFS_V2="no"
MOUNTD_NFS_V3="no"
RPCNFSDARGS="-N 2 -N 3"

Pourriez-vous s'il vous plaît confirmer quels services sont requis / essentiels sur le serveur et le client parmi ceux énumérés ci-dessous (en gros, je voudrais désactiver les services qui ne sont pas nécessaires):

# rpm -ql nfs-utils | grep 'init.d'
/etc/rc.d/init.d/nfs
/etc/rc.d/init.d/nfslock
/etc/rc.d/init.d/rpcgssd
/etc/rc.d/init.d/rpcidmapd
/etc/rc.d/init.d/rpcsvcgssd
HTF
la source
Avez-vous configuré votre pare-feu pour autoriser nfs?
user9517
Oui, je peux monter des exportations NFS sur le client mais je me demande pourquoi je dois encore utiliser rpcbindavec v4
HTF
3
NFSv4 ne nécessite pas rpcbind. Mais il existe des clients et des outils qui dépendent toujours de ces informations, par exemple «showmount». De plus, Linux nfsd utilise le fichier / proc / fs / nfsd / portlist pour communiquer le numéro de port à rpcbind, et ce fichier dépend en quelque sorte de l'exécution du processus rpcbind.
kofemann
Je peux vérifier ce problème sur Debian 7 avec le noyau 3.3.2 en ajoutant -N 2 -N 3à rpc.nfsddans le script de démarrage et en obtenant la même erreur "impossible de définir des sockets pour nfsd"
Tankman

Réponses:

10

Il s'agissait d'un bogue dans le module du noyau du serveur NFS. Il a été corrigé en décembre 2013.

À partir du noyau 3.14, il rpcbindn'est plus nécessaire d'exécuter le serveur NFS dans le noyau.

(en supposant que le serveur est configuré pour utiliser uniquement NFSv4 et supérieur)

http://lxr.free-electrons.com/source/net/sunrpc/svc.c?v=3.14#L966

Vous pouvez trouver plus d'informations sur ce changement dans ce fil:

http://www.spinics.net/lists/linux-nfs/msg41053.html

Par conséquent, votre configuration:

MOUNTD_NFS_V2="no"
MOUNTD_NFS_V3="no"
RPCNFSDARGS="-N 2 -N 3"

devrait maintenant fonctionner sans rpcbind.

Lorsque vous utilisez uniquement NFSv4, aucun de ces services n'est requis:

/etc/rc.d/init.d/nfslock
/etc/rc.d/init.d/rpcgssd
/etc/rc.d/init.d/rpcidmapd
/etc/rc.d/init.d/rpcsvcgssd
Piotr Jurkiewicz
la source
rpc.idmapdn'est requis que pour NFSv4. GSS est également requis pour la sécurité Kerberos. Bien que les deux soient facultatifs.
Irfan Latif
0

La documentation citée de RedHat était erronée et a été corrigée par le bogue 521215 : rpc.mountddoit toujours être utilisé pour configurer NFSv4, mais à proprement parler, il n'est pas nécessaire de l'exécuter après cela.

  • nfs: Serveur pour toutes les versions de NFS: v2, v3, v4, v4.1
  • rpcbind/ portmapper: Serveur , strictement uniquement pour NFS <= v3. Mais aussi pour NFS v4 car le serveur NFS du noyau Linux essaie de s'enregistrer et ne démarre pas s'il rpcbindn'est pas en cours d'exécution.
  • rpc.mountd: Serveur , strictement uniquement pour NFS <= 3. Mais aussi pour NFS v4 car le noyau Linux l'utilise pour vérifier si le client qui se connecte est autorisé à se connecter.
  • nfslock: Serveur uniquement pour NFS <= v3
  • rpc.idmapd: Serveur en option (et anciens clients ) pour NFS v4
  • rpc.quotad: Serveur pour utiliser le quota de disque
  • rpc.statd: Serveur uniquement pour NFS <= v3

Lorsque vous utilisez Kerberos ( sec=krb/ krb5i/ krb5p), les services suivants sont requis:

  • rpc.gssd: Client
  • rpc.svcgssd: Serveur

Veuillez noter que même s'ils portent rpc.leur nom, ils utilisent le mécanisme interne du noyau Linux rpc_pipefpour la communication entre le noyau Linux et l'assistant de l'espace utilisateur; donc rpcbindAKA portmappern'est pas nécessaire pour eux.

pmhahn
la source
-3

Vérifiez le service rpcbind. S'il a cessé de fonctionner, essayez de démarrer le service nfs.

service rpcbind start
service nfs start
Kathirvel
la source
Cette réponse est de très mauvaise qualité. OP a déclaré que rpcbind n'était pas requis depuis nfsv4. La question a déjà été répondue: c'était un bug du noyau.
bgtvfr