問題:
一臺Solaris 10主機用戶已經不再使用,服務器關機前檢查NFS共享狀況,確保已經沒有用戶連接到該主機。
通過命令"showmount -e"檢查客戶端服務器的連接,發現還有大量的連接列表。但是與用戶確認,用戶說已經斷開了連接。
解決方法:
=======================================================
Solaris主機
/etc/rmtab文件中會記錄用戶連接的狀況。NFS Client異常中斷可能造成了umount nfs共享點失敗,導致/etc/rmtab中留存了不正確的記錄。
可以通過下列命令,重啟NFS服務并清空記錄。
svcadm disable svc:/network/nfs/server:default cat /dev/null > /etc/rmtab svcadm enable svcs:/network/nfs/server:default svcs|grep nfs 檢查服務啟動狀態
=======================================================
在Linux平臺也會發生類似的問題。
man rpc.mountd(8) says: The rmtab File ... Note, however, that there is little to guarantee that the contents of /var/lib/nfs/rmtab are accurate. A client may continue accessing an export even after invoking UMNT. If the client reboots without sending a UMNT request, stale entries remain for that client in /var/lib/nfs/rmtab.
可以通過下列命令解決。
# service nfs stop # cat /dev/null > /var/lib/nfs/rmtab # service nfs start
=======================================================
替代檢查方案:
因為nfs client的意外重啟,可能造成”showmount -a”命令的輸出不可信。
為了確保用戶已無連接,需要尋找其他命令進行檢查。
NFS協議是通過RPC機制進行文件傳輸的,RPC在文件傳輸發包階段還是會使用TCP/UDP進行傳輸。
嘗試通過"netstat -an|grep IP"命令檢查所以網絡連接,檢查輸出列表,確定對端IP地址沒有用戶IP后再關閉服務器。
參考文檔2: https://blog.csdn.net/wangpeng138375/article/details/8169071 Sun的RPC服務 ONC RPC(Open Network Computing Remote Procedure Call)是一個由Sun Microsystem公司開發的開源的RPC框架。它是用于UNIX系統的RPC事實標準。ONC RPC已經被證明是一項高性能的技術。包括Solaris,AIX,HP UX,Linux等在內的大多數UNIX平臺都支持RPC服務。 RPC其實也是種C/S的編程模式,其工作過程如圖2-3所示,大致包含以下幾個步驟: (0) 服務器啟動,它向所在主機上的端口映射器(port mapper)注冊自身??蛻羧缓髥?,它調用clnt_create,該函數則與服務器主機上的端口映射器聯系,以找到服務器的臨時端口。clnt_create函數還建立一個與服務器的TCP連接。 (1) 客戶調用一個稱為客戶端存根(Client stub)的本地過程(存根由rpcgen工具生成)。對于客戶來說,客戶程序存根看起來像是它想要調用的真正的服務器過程。存根的目的在于把待傳遞給遠程過程的參數打包,可能的話把它們轉換成某種標準格式,然后構造一個或多個網絡消息。把客戶提供的參數打包成一個網絡消息的過程稱為集結(marshaling)??蛻舫绦虻母鱾€例程和存根通常調用RPC運行時函數庫中的函數。 (2) 這些網絡消息由客戶程序存根發給遠程系統。通常需要一次陷入本地內核的系統調用(例如write或是sendto)。 (3) 這些消息傳送到遠程系統,通常使用TCP或UDP協議。 (4) 一個服務器存根(server stub)過程一直在遠程系統上等待客戶的請求。它從這些網絡消息中解散(unmarshaling)出參數。 (5) 服務器程序存根執行一個本地過程調用以激活真正的服務器函數,傳遞給該函數的參數是它從來自客戶的網絡消息中解散出來的。 (6) 當服務器過程完成時,它向服務器程序存根返回其返回值。 (7) 服務器存根在必要時對返回值作轉換,然后把它們集結到一個或多個網絡消息中,以便發送回客戶 (8) 這些消息通過網絡傳送回客戶。 (9) 客戶程序存根從本地內核中讀出這些網絡消息(如read或recvfrom)。 (10)對返回值進行可能的轉換后,客戶程序存根最終返回客戶函數 |
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。