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

总结

这类问题首先要找到问题的日志信息,但是不能光依赖网上的万能解答,而是应该了解其机理。最后感谢下两篇上述引用文章的作者: )

相关内容