Linux

NFS:什麼是遠端鎖定,我需要它嗎?

  • October 31, 2019

我正在建構一個有點簡約的系統,它收集串列埠數據並將其推送到 NFS 掛載上的日誌文件中。

為了在一定程度上減少系統,我決定禁用 RPC,因為我看不到它的用途,這導致了以下警告:

mount.nfs: rpc.statd is not running but is required for remote locking.
mount.nfs: Either use '-o nolock' to keep locks local, or start statd.
mount.nfs: an incorrect mount option was specified

NFS 中涉及 RPC 並不奇怪,所以我的下一步是刪除警告。我可以選擇重新啟用 RPC,或者-o nolock按照建議使用。

那麼問題來了,遠端鎖定到底是做什麼的?在這種特殊情況下,NFS 掛載僅由相關機器寫入,不存在諸如多個程序寫入同一個文件等衝突的可能性。(雖然,有幾個程序寫入各自的日誌文件)

執行 debian buster,核心 4.19

**編輯:**我試過-o nolock了,一切似乎都很好,所以乍一看,沒有副作用。

答案就在 rpc.statd 的老手冊頁中:

文件鎖不是持久文件系統狀態的一部分。因此,當主機重新啟動時,鎖定狀態會失去。

網路文件系統還必須檢測鎖定狀態何時因為遠端主機重新啟動而失去。NFS 客戶端重新啟動後,NFS 伺服器必須釋放該客戶端上執行的應用程序持有的所有文件鎖。伺服器重新啟動後,客戶端必須提醒伺服器該客戶端上執行的應用程序持有的文件鎖。

對於 NFS 版本 2

$$ RFC1094 $$和 NFS 版本 3$$ RFC1813 $$,網路狀態監視器協議(或簡稱 NSM)用於通知 NFS 對等方重新啟動。在 Linux 上,兩個獨立的使用者空間組件構成 NSM 服務: rpc.statd

監聽來自其他主機的重啟通知的守護程序,並管理本地系統重啟時要通知的主機列表

簡訊通知

在本地系統重新啟動後通知 NFS 對等方的幫助程序

所以基本上,在 NFS 伺服器上執行的 rpc.statd 會阻止在其他 NFS 客戶端上執行的程序訪問您從客戶端電腦鎖定的文件。只要只有一個客戶端,本地鎖就可以了。但通常 NFS 都是關於共享的。

引用自:https://serverfault.com/questions/989907