Filesystems

NFS 上的文件鎖定?

  • November 19, 2019

我的伺服器使用 NFS(網路文件系統),我無法使用 PHP 的 flock() -function。有沒有辦法在 NFS 上鎖定文件,或者是否需要這樣做?

手冊頁flock(2)已經過時了很長時間,但後來更新為(強調我的):

從 Linux 2.6.12 開始, NFS 客戶端通過將flock() 鎖模擬為整個文件上的字節範圍鎖來支持flock() 鎖。這意味著 fcntl(2) 和 flock() 鎖確實通過 NFS 相互互動。從 Linux 2.6.37 開始,核心支持一種兼容模式,允許將 flock() 鎖(以及 fcntl(2) 字節區域鎖)視為本地鎖;請參閱 nfs(5) 中關於 local_lock 選項的討論。

這是來自官方手冊頁網站http://man7.org/linux/man-pages/man2/flock.2.html,它顯示了手冊頁 4.00 的新版本

Linux 2.6.12 於 2005 年發布。

這原本是為了評論janneb的回答,但我當時沒有名氣。文件更新發生在 2014 年: http://git.kernel.org/cgit/docs/man-pages/man-pages.git/commit/man2/flock.2?id= e449654fdb3f19aafc569df47d12bffdf6276236

我不知道 PHPflock()函式是如何實現的,但假設它是flock()系統呼叫的介面,那麼它在 NFS 上根本不起作用。從flock()手冊頁:

flock(2) 不會通過 NFS 鎖定文件。請改用 fcntl(2):它確實可以在 NFS 上執行,因為它具有足夠新的 Linux 版本和支持鎖定的伺服器。

當然,手冊頁所說的一切,無論多麼過時,都是終極真理。

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