NFS挂载超时排查
问题
/etc/fstab的NFS配置
nfs.example.com:/vol/data /mnt/data nfs rw,soft,intr,vers=3,proto=tcp,rsize=32768,wsize=32768 0 0挂载超时
#mount /mnt/data
mount.nfs: Connection timed out对于NFS v3挂载,默认采用的是UDP协议,所以如果挂载参数中没有指定
proto=tcp则客户端访问采用UDP协议。通常防火墙开启了TCP允许访问,但是UDP端口往往关闭,所以排查时候需要特别注意
排查
这里NFS挂载是TCP协议,所以检查端口
检查NFS端口
[root@nfs-client /root]
#telnet nfs.example.com 2049
Trying 192.168.1.53...
Connected to nfs.example.com.
Escape character is '^]'.
[root@nfs-client /root]
#telnet nfs.example.com 111
Trying 192.168.1.53...
Connected to nfs.example.com.
Escape character is '^]'.看起来端口已经打开
通过verbose方式挂载存储查看:
看起来像是端口 4096 无法打开,但是实际上检查端口也是通的
对比测试了正常的 nfs-client-good
使用debug模式检查完全没有问题
检查从客户端访问服务器的mountpoint
对比检查,我们的异常服务器IP地址是 192.168.1.187/20 已经包含在 /vol/data 的访问允许IP地址段 192.0.0.0/8
检查服务器上的服务:
换一种挂载协议尝试:
同样也出现访问 4046 端口超时
不过,根据 telnet 192.168.1.53 4046 可以看到NAS服务器端口是可以访问的,后来根据tcpdump查看,客户端发出端口4046的SYN请求后,NAS服务器端没有返回对应的ACK。
实际上这个抓包对比过程比较曲折,我花费了几天时间才找出导致这个NFS无法挂载的真正原因,涉及的问题和内核相关,使我对NFS以及网络问题排查有了一些心得,我会重新写几篇文档来总结。
tcpdump抓包
使用以下命令抓包
显示信息
抓包对比
在wireshark中查看,可以看到 192.168.0.187.33763 > 192.168.1.53.acp-proto 第一次发出 [S](Syn) 之后,NAS服务器端没有任何ACK包,所以后面都是重复的 [S](Syn)
参考
Last updated
Was this helpful?