NFSv4 无法在不运行 rpcbind 的情况下为 nfsd 设置任何套接字

HTF*_*HTF 8 redhat nfs rpc nfs4

根据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]
Run Code Online (Sandbox Code Playgroud)

我已禁用 NFS v2 和 v3:

# grep -v "^#" /etc/sysconfig/nfs
MOUNTD_NFS_V2="no"
MOUNTD_NFS_V3="no"
RPCNFSDARGS="-N 2 -N 3"
Run Code Online (Sandbox Code Playgroud)

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

# 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
Run Code Online (Sandbox Code Playgroud)

Pio*_*icz 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"
Run Code Online (Sandbox Code Playgroud)

现在应该没有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
Run Code Online (Sandbox Code Playgroud)