8.8. NFS 和 rpcbind
注意
以下部分仅适用于需要
rpcbind
服务以便向后兼容的 NFSv3 实现。
有关如何配置只使用 NFSv4 的服务器(不需要
rpcbind
)的详情,请参考 第 8.6.7 节 “配置只使用 NFSv4 的服务器”。
rpcbind[1] 工具将 RPC 服务映射到它们侦听的端口。RPC 进程在启动时通知 rpcbind,注册它们正在侦听的端口以及它们期望提供服务的 RPC 程序号。然后,客户端系统会使用特定的 RPC 程序号联系服务器上的 rpcbind。rpcbind 服务将客户端重定向到正确的端口号,这样它就可以与请求的服务进行通信。
由于基于 RPC 的服务依赖 rpcbind 来与所有传入的客户端请求建立连接,因此 rpcbind 必须在这些服务启动之前可用。
rpcbind 服务使用 TCP 包装程序进行访问控制,而 rpcbind 的访问控制规则 会影响所有 基于 RPC 的服务。另外,也可以为每个 NFS RPC 守护进程指定访问控制规则。rpc.mountd 和 rpc.statd 的 man page 包含有关这些规则的确切语法的信息。
8.8.1. NFS 和 rpcbind故障排除
由于 rpcbind[1] 在 RPC 服务和用于与其通信的端口号之间提供协调,因此在进行故障排除时,使用 rpcbind 查看当前 RPC 服务的状态非常有用。rpcinfo 命令显示每个基于 RPC 的服务,以及端口号、RPC 程序号、版本号和 IP 协议类型(TCP 或 UDP)。
要确保为 rpcbind 启用了正确的基于 NFS RPC 的服务,请使用以下命令:
# rpcinfo -p
例 8.7. rpcinfo -p 命令输出
下面是一个这个命令的输出示例:
program vers proto port service 100021 1 udp 32774 nlockmgr 100021 3 udp 32774 nlockmgr 100021 4 udp 32774 nlockmgr 100021 1 tcp 34437 nlockmgr 100021 3 tcp 34437 nlockmgr 100021 4 tcp 34437 nlockmgr 100011 1 udp 819 rquotad 100011 2 udp 819 rquotad 100011 1 tcp 822 rquotad 100011 2 tcp 822 rquotad 100003 2 udp 2049 nfs 100003 3 udp 2049 nfs 100003 2 tcp 2049 nfs 100003 3 tcp 2049 nfs 100005 1 udp 836 mountd 100005 1 tcp 839 mountd 100005 2 udp 836 mountd 100005 2 tcp 839 mountd 100005 3 udp 836 mountd 100005 3 tcp 839 mountd
如果其中一个 NFS 服务没有正确启动,rpcbind 将不能将来自客户端的对该服务的 RPC 请求映射到正确的端口。在很多情况下,如果 rpcinfo 输出中不存在 NFS,重启 NFS 会导致服务使用 rpcbind 正确注册并开始工作。
有关 rpcinfo 的更多信息和选项列表,请查看其 man page。