nfs卡住的問題

2021-07-13 20:53:01 字數 3099 閱讀 5625

最近使用nfs來儲存檔案,但是在客戶端節點遇到了問題。

用df -h的時候系統直接就卡住了。

之前開發時就碰到過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資訊

使用nfsstat命令檢視nfs伺服器狀態

nfsstat命令顯示關於nfs和到核心的遠端過程呼叫(rpc)介面的統計資訊,也可以使用該命令重新初始化該資訊。如果未給定標誌,預設是nfsstat -csnr命令。使用該命令顯示每條資訊,但不能重新初始化任何資訊。

nfsstat命令的主要引數如下。

(1)-b:顯示nfs v4伺服器的其他統計資訊。

(2)c:只顯示客戶機端的nfs和rpc資訊,允許使用者僅檢視客戶機資料的報告。nfsstat命令提供關於被客戶機傳送和拒絕的rpc和nfs呼叫數目的資訊。

要只顯示客戶機nfs或者rpc資訊,將該引數與-n或者-r引數結合。

(4)-g:顯示rpcsec_gss資訊。

(6)-n:為客戶機和伺服器顯示nfs資訊。要只顯示nfs客戶機或伺服器資訊,將該引數與-c和-s引數結合。

(7)-r:顯示rpc資訊。

(8)-s:顯示伺服器資訊。

(10)-4:當與-c、-n、-s或-z引數組合使用時,將包含nfs v4客戶機或伺服器的資訊,以及現有的nfs v2和v3資料。

(11)-z:重新初始化統計資訊。該引數僅供root使用者使用,並且在顯示上面的標誌後可以和那些標誌中的任何乙個組合到統計資訊的零特殊集合。

要顯示關於客戶機傳送和拒絕的rpc和nfs呼叫數目的資訊,輸入:

nfsstat -c

nfsstat -cn

nfsstat -r

要顯示關於伺服器接收和拒絕的rpc和nfs呼叫數目的資訊,輸入如下命令:

nfsstat –s

這裡就是詳細的解釋了。

flutter pub get卡住的問題

大概意思就是 把預設的 package 獲取位址改為訪問沒有問題的映象站就可以了。具體操作 export pub hosted url export flutter storage base url 新增兩個環境變數即可 pub hosted url flutter storage base url...

oracle update語句卡住問題

執行update語句的時候發現執行半天不成功 update main order set order source 2 order status 2 查詢哪些物件被鎖 select object name machine,s.sid,s.serial from v locked object l,d...

oracle update語句卡住問題

執行update語句的時候發現執行半天不成功 update main order set order source 2 order status 2 查詢哪些物件被鎖 select object name machine,s.sid,s.serial from v locked object l,d...