RHEL6 NFSv4 客户端的行为是否像 NFSv3?

RHEL6 NFSv4 客户端的行为是否像 NFSv3?

我的理解是 NFSv4 客户端应立即连接到服务器上的 NFSv4 服务,完全跳过 rpcbind 端口映射器和 mountd 服务交互,但我看到我的 RHEL6 客户端始终首先联系 rpcbind 服务以获取 mountd 端口,获取 mountd 的导出列表,然后最终连接到 NFSv4 服务。使用 tcpdump 进行观察。

根据所有迹象(mount 命令的输出和 TCP 的检查),当挂载操作完成时,客户端和服务器都使用 NFSv4。

即便我尽我所能尝试在客户端上强制使用 NFSv4,这种情况仍然会发生。示例:

  • 在 /etc/nfsmount.conf 中设置 Nfsvers=4
  • 使用 vers=4 选项显式挂载
  • 明确设置 NFS 端口。(通过 mount 命令和在 nfsmount.conf 中)

我完全错了还是有什么不对劲?这对我来说是个问题,因为 NFS 客户端坚持在挂载任何 NFSv4 导出之前能够通过 UDP 到达服务器上的 rpcbind,而我遇到了神秘的 UDP 数据包丢失(是的,我在这方面与网络人员合作),这导致挂载不时完全失败或需要很长时间才能完成。

我查看了 libtirpc 源代码,发现它总是使用 UDP 连接到 RPC 端口映射器,但我想完全将端口映射器和 mountd 服务排除在外。

我尝试使用“rpcinfo -d”在 NFS 服务器上取消注册 UDP 端口映射器服务,但这会导致针对该服务器的所有 NFS 安装失败(客户端再次坚持要求服务器让 rpcbind 监听 UDP 端口 111)。我还尝试弄乱 /etc/netconfig,但没有成功。

有谁遇到过这种情况或对 NFSv4 有足够的了解,可以告诉我我的期望不切实际吗?

答案1

我将其追溯到 autofs。它被设置为使用 /etc/auto.net 来获取使用 showmount 命令的导出列表。showmount 命令负责在 NFS 挂载之前访问 rpcbind 和 mountd,因此尝试更改挂载选项无效。

我修改了 /etc/auto.net,问题已经解决。

附注:正如我在各个地方看到的那样,使用 auto.master 中的“-hosts”选项也会导致 rpcbind 和 mountd 访问。我最终让 auto.net 挂载所有 NFSv4 服务器的根目录,据我所知,假设我的所有主机都是 NFSv4,这是可以的。

相关内容