场景:linux 老旧nfs系统 mount 超时有关问题的解决
linux 老旧nfs系统 mount 超时问题的解决
背景简介
由于业务需要,学校要把考试系统移植到云平台,第一步所做的是先把老系统A的nfs存储平台mount到新系统B上。老考试系统A服役时间已经很长了,操作系统还是redhat4系列,版本还是linux 2.4.20。
问题
在B端mount的时候,出现一个问题,即输入
mount -t nfs 10.77.30.31:/opt/OJ/contests /mnt/nfs超时报错
A端的nfs服务,其他老系统可以mountA的nfs文件,但是linux 3.0以后的服务器还是mount不了。后来问了下其他人,原来他们也早就知道了,但一直没解决。
追踪
首先在B端showmount看看,发现一切正常
root@ubuntu188:/mnt# showmount -e 10.77.30.31
Export list for 10.77.30.31:
/opt/OJ/contests (everyone)这说明B端的nfs服务是正常运行的,且防火墙没有拦截。
然后在A端查找日志,发现一直循环报错,
nfsd: unexporting all filesystems
nfsd: last server has exited
nfsd: unexporting all filesystems
于是网上百度这个问题,都说是nfs服务器中/proc/fs/nfsd没有装载,于是看了下,发现确实A端没有这个东西
于是尝试mount,发现不行,提示出错
mount -t nfsd nfsd /proc/fs/nfsd
mount: mount point /proc/fs/nfsd does not exist而在B端或者其他较新的系统上进行此类mount,是一切正常的
那么A端是不是没装nfsd服务呢,虽然基本不可能,但还是验证一下,果然A端nfsd的服务模块是加载了的,/proc里也有
[root@cszjusrv3 contests]# lsmod|grep nfsd
nfsd 81104 8 (autoclean)
lockd 59536 1 (autoclean) [nfs nfsd]
sunrpc 87516 1 (autoclean) [nfs nfsd lockd]
[root@cszjusrv3 contests]# ls /proc/net/rpc/nfsd
/proc/net/rpc/nfsd
问题的解决
到这个时候我已经确认了基本是A端nfs服务版本过老的问题了。但是由于A的操作系统过老,已经不适合安装新的nfs版本了,那么就没办法了么。
我查找"nfsd: unexporting all filesystems"的问题过程中,搜到两个链接http://blog.csdn.net/zanget/article/details/6659314,http://www.233.com/Linux/Instructs/060210/172416755-2.html其中都提到nfsvers=x
,这我本能的感觉到问题所在。进一步阅读后发现是用来选择nfs版本做优化的。通过nfsstat查了下,A端只支持1-3的nfs版本,而现在默认都用4了,于是在B端尝试了下参数,发现成功了。
root@ubuntu188:/mnt# mount -t nfs 10.77.30.31:/opt/OJ/contests /mnt/nfs -o nfsvers=3
root@ubuntu188:/mnt# ls /mnt/nfs
problems problems.1 runs work working
总结
这类问题首先要找到问题的日志信息,但是不能光依赖网上的万能解答,而是应该了解其机理。最后感谢下两篇上述引用文章的作者: )