NFSv4 no puede establecer ningún socket para nfsd sin ejecutar rpcbind

8

Según los documentos de Red Hat, 'rpcbind' ya no es necesario:

Debido a que el soporte de protocolo se ha incorporado al protocolo v4, NFSv4 no tiene interacción con los demonios portmap, rpc.lockd y rpc.statd. NFSv4 escucha en el conocido puerto TCP 2049, que elimina la necesidad de interacción con el mapa de puertos. Los protocolos de montaje y bloqueo se han incorporado al protocolo V4, lo que elimina la necesidad de interacción con rpc.lockd y rpc.statd. El demonio rpc.mountd todavía se requiere en el servidor, pero no está involucrado en ninguna operación por cable.

Sin embargo, no puedo iniciar el demonio NFS cuando el servicio 'rpcbind' no se está ejecutando:

# 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]

He desactivado NFS v2 y v3:

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

¿Podría confirmar qué servicios son necesarios / esenciales en el servidor y el cliente de los que se enumeran a continuación (básicamente me gustaría deshabilitar los servicios que no son necesarios):

# 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
fuente
¿Configuraste tu firewall para permitir nfs?
user9517
Sí, puedo montar exportaciones NFS en el cliente, pero me pregunto por qué todavía necesito usar rpcbindcon v4
HTF
3
NFSv4 no requiere rpcbind. Pero existen clientes y herramientas que aún dependen de esa información, por ejemplo, 'showmount'. Además, Linux nfsd usa el archivo / proc / fs / nfsd / portlist para comunicar el número de puerto a rpcbind, y este archivo de alguna manera depende de la ejecución del proceso rpcbind.
kofemann
Puedo verificar este problema en Debian 7 con el kernel 3.3.2 agregando -N 2 -N 3al rpc.nfsdscript de inicio y obteniendo el mismo error "no se puede establecer ningún socket para nfsd"
Tankman 六四

Respuestas:

10

Este fue un error en el módulo del kernel del servidor NFS. Se parchó en diciembre de 2013.

A partir del kernel 3.14, rpcbindya no es necesario para ejecutar el servidor NFS en el kernel.

(suponiendo que el servidor esté configurado para usar solo NFSv4 y superior)

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

Puede encontrar más información sobre ese cambio en este hilo:

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

Por lo tanto, su configuración:

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

Ahora debería funcionar sin rpcbind.

Cuando usa solo NFSv4, ninguno de estos servicios es necesario:

/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
fuente
rpc.idmapdsolo se requiere para NFSv4. GSS también es necesario para la seguridad de Kerberos. Aunque ambos son opcionales.
Irfan Latif el
0

La documentación citada de RedHat era incorrecta y fue corregida por el error 521215 : rpc.mountdaún debe usarse para configurar NFSv4, pero estrictamente hablando no es necesario que se ejecute después de eso.

  • nfs: Servidor para todas las versiones de NFS: v2, v3, v4, v4.1
  • rpcbind/ portmapper: Servidor , estrictamente solo para NFS <= v3. Pero también para NFS v4, ya que el servidor Linux Kernel NFS intenta registrarse y no se inicia si rpcbindno se está ejecutando.
  • rpc.mountd: Servidor , estrictamente solo para NFS <= 3. Pero también para NFS v4, ya que el Kernel de Linux lo usa para verificar si el cliente de conexión puede conectarse.
  • nfslock: Servidor solo para NFS <= v3
  • rpc.idmapd: Servidor opcional (y clientes anteriores ) para NFS v4
  • rpc.quotad: Servidor para usar la cuota de disco
  • rpc.statd: Servidor solo para NFS <= v3

Cuando se usa Kerberos ( sec=krb/ krb5i/ krb5p) se requieren los siguientes servicios:

  • rpc.gssd: Cliente
  • rpc.svcgssd: Servidor

Tenga en cuenta que incluso ellos llevan rpc.su nombre, usan el mecanismo interno del kernel de Linux rpc_pipefpara la comunicación entre el kernel de Linux y el asistente de espacio del usuario; entonces rpcbindAKA portmapperno es necesario para ellos.

pmhahn
fuente
-3

Verifique el servicio rpcbind. Si dejó de funcionar, comience y luego intente iniciar el servicio nfs.

service rpcbind start
service nfs start
Kathirvel
fuente
Esta respuesta es de muy baja calidad. OP ha declarado que rpcbind no era necesario desde nfsv4. La pregunta ya ha sido respondida: era un error del kernel.
bgtvfr