1. 程式人生 > >BrotherDong90的專欄

BrotherDong90的專欄

最近使用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

這裡就是詳細的解釋了。