如果不运行rpcbind,NFSv4无法为nfsd设置任何套接字


8

根据Red Hat的文档,不再需要'rpcbind'了:

由于协议支持已集成到v4协议中,因此NFSv4没有与portmap,rpc.lockd和rpc.statd守护程序进行交互。NFSv4侦听众所周知的TCP端口2049,从而无需进行端口映射交互。安装和锁定协议已合并到V4协议中,从而无需与rpc.lockd和rpc.statd进行交互。服务器上仍需要rpc.mountd守护程序,但不参与任何在线操作。

但是,当'rpcbind'服务未运行时,我无法启动NFS守护程序:

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

我已禁用NFS v2和v3:

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

您能否从下面列出的内容中确认服务器和客户端上需要/必需的服务(基本上,我想禁用不需要的服务):

# 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

您是否将防火墙配置为允许nfs?
user9517 2013年

是的,我可以在客户端上安装NFS导出,但是我想知道为什么仍然需要使用rpcbindv4
HTF

3
NFSv4不需要rpcbind。但是有些客户端和工具仍然依赖于该信息,例如“ showmount”。另外,Linux nfsd使用/ proc / fs / nfsd / portlist文件将端口号传达给rpcbind,而该文件在某种程度上取决于正在运行的rpcbind进程。
kofemann

我可以在Debian 7的内核3.3.2上验证这一问题,方法-N 2 -N 3rpc.nfsd在启动脚本中添加并得到相同的错误“无法为nfsd设置任何套接字”
Tankman六四

Answers:


10

这是NFS服务器内核模块中的错误。它在2013年12月进行了修补

从内核3.14开始,rpcbind不再需要运行内核NFS服务器。

(假设服务器配置为仅使用NFSv4和更高版本)

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

您可以在以下线程中找到有关该更改的更多信息:

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

因此,您的配置:

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

现在应该没有rpcbind

当仅使用NFSv4时,不需要这些服务:

/etc/rc.d/init.d/nfslock
/etc/rc.d/init.d/rpcgssd
/etc/rc.d/init.d/rpcidmapd
/etc/rc.d/init.d/rpcsvcgssd

rpc.idmapd仅对于NFSv4是必需的。Kerberos安全性也需要GSS。虽然两者都是可选的。
Irfan Latif

0

RedHat引用的文档是错误的,并已由Bug 521215修复rpc.mountd仍然必须使用它来设置 NFSv4,但严格来讲,此后不需要运行它。

  • nfs:适用于所有版本的NFS的服务器:v2,v3,v4,v4.1
  • rpcbind/ portmapper服务器,仅适用于NFS <= v3。但是对于NFS v4也是如此,因为Linux Kernel NFS服务器尝试注册自身,如果rpcbind未运行则无法启动。
  • rpc.mountdServer,仅适用于NFS <= 3。而且对于NFS v4,Linux内核使用它来检查是否允许连接客户端进行连接。
  • nfslock:仅适用于NFS <= v3的服务器
  • rpc.idmapd:NFS v4的可选服务器(和较旧的客户端
  • rpc.quotad:使用磁盘配额的服务器
  • rpc.statd:仅适用于NFS <= v3的服务器

使用Kerberos(sec=krb/ krb5i/ krb5p)时,需要以下服务:

  • rpc.gssd客户
  • rpc.svcgssd服务器

请注意,即使使用它们rpc.的名字,它们也使用Linux内核内部机制rpc_pipef在Linux内核和用户空间助手之间进行通信。因此他们不需要rpcbindAKA portmapper


-3

检查rpcbind服务。如果它停止工作,请启动,然后尝试启动nfs服务。

service rpcbind start
service nfs start

这个答案的质量很低。OP表示自nfsv4起不需要rpcbind。这个问题已经得到回答:这是一个内核错误。
bgtvfr
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.