我有两台 RedHat 4 服务器。客户端是 4.6,服务器是 4.5。我正尝试通过 NFS 将服务器上的共享安装到客户端上。
/etc/exports配置如下:
/opt/data/config bkup(rw,no_root_squash,async)
/opt/data/db bkup(rw,no_root_squash,async)
exportfs 返回这些(以及其他)共享,nfs 正在根据ps
输出运行。
我一直尝试在客户端上使用 autofs,但考虑到我遇到的问题,我选择手动安装共享。
因此,我发出挂载请求:
mount dist:/opt/data/config /mnt/config
mount:dist:/opt/data/config 失败,服务器给出的原因:权限被拒绝
好的,让我们看看服务器本身要说什么。
5月6日 23:17:55 dist mountd[3782]: 来自 bkup:662 的针对 /opt/data/config (/opt/data/config) 的经过验证的挂载请求
据称,它允许进行安装。
我如何诊断客户端和服务器对结果存在分歧的原因?
答案1
这是身份验证和授权之间差异的一个很好的例子。在这种情况下,身份验证成功,但主机目录的授权可能是问题所在。为了进行测试,您可以尝试将主机的目录权限递归设置为 777(不要忘记稍后再次更改此权限)。
检查事项:
- 客户端和主机上的用户的用户名和uuid是否相同?
- 主机上的权限是否设置正确?
- 主机服务器上的 NFS 是否具有正确的权限来访问它应该共享的文件?即 NFS 是否以 root 身份运行,如果不是,它尝试访问的文件是否设置了正确的权限以允许 NFS 守护程序本身访问它们?
答案2
我通常使用 tcpdump 来调试此类问题。原始数据包捕获总会告诉我们一些信息。
从 NFS 客户端和服务器开始数据包捕获。
tcpdump -s0 -i ethX -w /tmp/tcpdump_from_client.pcap host <NFS-server-IP>
tcpdump -s0 -i ethX -w /tmp/tcpdump_from_server.pcap host <NFS-client-IP>
将 ethX 替换为 eth1 或 2 或任何其他您拥有的值。
然后,在数据包捕获中查找 RPC 传输。我更喜欢使用 wireshark 并查看 TCP 部分。我经常看到它提供某种线索。
下一步是启用 NFS 调试日志。
我强烈建议您将 tcpdump 数据保留给自己或让您信任的人进行检查。
答案3
检查中是否有某些文件/proc/fs/nfsd
。
如果没有,请发出此命令:
mount -t nfsd none /proc/fs/nfsd
如果有的话我也不知道。