背景簡介
由於業務需要,學校要把考試系統移植到雲平臺,第一步所做的是先把老系統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
總結
這類問題首先要找到問題的日誌信息,但是不能光依賴網上的萬能解答,而是應該瞭解其機理。最後感謝下兩篇上述引用文章的作者: )