最近使用nfs來存儲文件,可是在客戶端節點遇到了問題。數組
用df -h的時候系統直接就卡住了。服務器
後來百度了一下,發現網上好多遇到這種問題的。是由於nfs的server其實已經掛了,可是客戶端還存在。因此會出現這種狀況,這裏複製一段一位大神的語錄:網絡
以前開發時就碰到過nfs客戶端卡住的狀況,umount -f /mnt提示device is busy,而且嘗試訪問掛載目錄、df -h等操做都會使終端卡住,ctrl+c也不能強行退出。
當時忙着趕進度,沒研究這個問題。最近倒出功夫研究一下,順便學習一下nfs的優化。
形成這種現象的緣由是nfs服務器/網絡掛了,nfs客戶端默認採用hard-mount選項,而不是soft-mount。他們的區別是
soft-mount: 當客戶端加載NFS不成功時,重試retrans設定的次數.若是retrans次都不成功,則放棄此操做,返回錯誤信息 "Connect time out"
hard-mount: 當客戶端加載NFS不成功時,一直重試,直到NFS服務器有響應。hard-mount 是系統的缺省值。在選定hard-mount 時,最好同時選 intr , 容許中斷系統的調用請求,避免引發系統的掛起。當NFS服務器不能響應NFS客戶端的 hard-mount請求時, NFS客戶端會顯示
"NFS server hostname not responding, still trying"
下面列出mount關於nfs相關的參數
(1)-a:把/etc/fstab中列出的路徑所有掛載。
(2)-t:須要mount的類型,如nfs等。
(3)-r:將mount的路徑定爲read only。
(4)-v mount:過程的每個操做都有message傳回到屏幕上。
(5)rsize=n:在NFS服務器讀取文件時NFS使用的字節數,默認值是4096個字節。
(6)wsize=n:向NFS服務器寫文件時NFS使用的字節數,默認值是4096個字節。
(7)timeo=n:從超時後到第1次從新傳送佔用的1/7秒的數目,默認值是7/7秒。
(8)retry=n:在放棄後臺mount操做以前能夠嘗試的次數,默認值是7 000次。
(9)soft:使用軟掛載的方式掛載系統,若Client的請求得不到迴應,則從新請求並傳回錯誤信息。
(10)hard:使用硬掛載的方式掛載系統,該值是默認值,重複請求直到NFS服務器迴應。
(11)intr:容許NFS中斷文件操做和向調用它的程序返回值,默認不容許文件操做被中斷。
(12)fg:一直在提示符下執行重複掛載。
(13)bg:若是第1次掛載文件系統失敗,繼續在後臺嘗試執行掛載,默認值是失敗後不在後臺處理。
(14)tcp:對文件系統的掛載使用TCP,而不是默認的UDP。
如#mount -t nfs -o soft 192.168.1.2:/home/nfs /mnt
至於傳輸尺寸的選擇,能夠進行實際測試:
time dd if=/dev/zero of=/mnt/nfs.dat bs=16k count=16384
即向nfs服務器上的nfs.dat文件裏寫入16384個16KB的塊(也有經驗說文件大小能夠設定爲nfs服務器內存的2倍)。
獲得輸出如:
輸出了 16384+0 個塊
user 0m0.200s
輸出了 66535+0 個塊
user 0m0.420s
192.168.1.4:/mnt /home/nfs nfs rsize=8192,wsize=8192,timeo=10,intr
從新掛載nfs服務器,調整讀寫塊大小後重覆上述過程,能夠找到最佳傳輸尺寸。
NFS服務器的故障排除
故障排除思路:
NFS出現了故障,能夠從如下幾個方面着手檢查。
(1)NFS客戶機和服務器的負荷是否過高,服務器和客戶端之間的網絡是否正常。
(2)/etc/exports文件的正確性。
(3)必要時從新啓動NFS或portmap服務。
運行下列命令從新啓動portmap和NFS:
service portmap restart
service nfs start
(4)檢查客戶端中的mount命令或/etc/fstab的語法是否正確。
(5)查看內核是否支持NFS和RPC服務。
普通的內核應有的選項爲CONFIG_NFS_FS=m、CONFIG_NFS_V3=y、CONFIG_ NFSD=m、CONFIG_NFSD_V3=y和CONFIG_SUNRPC=m。
咱們可使用常見的網絡鏈接和測試工具ping及tracerroute來測試網絡鏈接及速度是否正常,網絡鏈接正常是NFS做用的基礎。rpcinfo命令用於顯示系統的RPC信息
,通常使用-p參數列出某臺主機的RPC服務。用rpcinfo-p命令檢查服務器時,應該能看到portmapper、status、mountd nfs和nlockmgr。用該命令檢查客戶端時,應
該至少能看到portmapper服務。
使用nfsstat命令查看NFS服務器狀態
nfsstat命令顯示關於NFS和到內核的遠程過程調用(RPC)接口的統計信息,也可使用該命令從新初始化該信息。若是未給定標誌,默認是nfsstat -csnr命令。使用該命令顯示每條信息,但不能從新初始化任何信息。
nfsstat命令的主要參數以下。
(1)-b:顯示NFS V4服務器的其餘統計信息。
(2)c:只顯示客戶機端的NFS和RPC信息,容許用戶僅查看客戶機數據的報告。nfsstat命令提供關於被客戶機發送和拒絕的RPC和NFS調用數目的信息。
要只顯示客戶機NFS或者RPC信息,將該參數與-n或者-r參數結合。
(3)-d:顯示與NFS V4受權相關的信息。
(4)-g:顯示RPCSEC_GSS信息。
(5)-m:顯示每一個NFS文件系統的統計信息,該文件系統和服務器名稱、地址、安裝標誌、當前讀和寫大小,以及從新傳輸計數
(6)-n:爲客戶機和服務器顯示NFS信息。要只顯示NFS客戶機或服務器信息,將該參數與-c和-s參數結合。
(7)-r:顯示RPC信息。
(8)-s:顯示服務器信息。
(9)-t:顯示與NFS標識映射子系統的轉換請求相關的統計信息,要只顯示NFS客戶機或服務器信息,將-c和-s選項結合。
(10)-4:當與-c、-n、-s或-z參數組合使用時,將包含NFS V4客戶機或服務器的信息,以及現有的NFS V2和V3數據。
(11)-z:從新初始化統計信息。該參數僅供root用戶使用,而且在顯示上面的標誌後能夠和那些標誌中的任何一個組合到統計信息的零特殊集合。
要顯示關於客戶機發送和拒絕的RPC和NFS調用數目的信息,輸入:
nfsstat -c
要顯示和打印與客戶機NFS調用相關的信息,輸入以下命令:
nfsstat -cn
要顯示和打印客戶機和服務器的與RPC調用相關的信息,輸入以下命令:
nfsstat -r
要顯示關於服務器接收和拒絕的RPC和NFS調用數目的信息,輸入以下命令:
nfsstat –s
這裏就是詳細的解釋了。app