Ubuntu

NFS 客戶端,ZFS 伺服器 ZoL:更改文件的 cat 以未找到結尾

  • May 20, 2015

自從我們的客戶從 Ubuntu 12.04 更新到 Ubuntu 14.04 後,我們遇到了麻煩。

行為:

在客戶端 AI 上更改 nfs 共享上的現有文件 foo。在客戶端 BI 上做一個 cat foo。

安裝後第一次工作。cat 顯示 foo 的內容。但是,如果我再次更改客戶端 A 上的 foo 並在 BI 上執行 cat 得到錯誤:cat: foo: No such file or directory

在 B 上執行 als可以解決問題並cat foo再次顯示新內容。但是,如果我再次更改客戶端 A 上的 foo ,客戶端 B 上的 cat 將無法工作。

分析:

如果 B 上的程序首先執行系統呼叫“stat”,則一切正常。但是如果像 cat 這樣的程序直接使用系統呼叫 open 是找不到文件的!

使用 tcpdump 和 wireshark 我可以看到 Ubuntu 12.04 使用正確的(更新的)文件句柄在“PUTFH”下的 NFS 包中呼叫,但在 14.04 中,文件句柄是錯誤的(等於舊文件句柄。在系統 A 上進行更改之前)。

現在非常有趣的部分:如果我在伺服器站點上的 nfs 共享駐留在 ext4 文件系統上,並且我通過 /etc/exports 共享它,則 nfs 伺服器會以錯誤程式碼 NFS4ERR_STALE 回答。客戶端 (B) 將使用正確的文件句柄進行第二次請求,一切正常。即使在 14.04。

如果我在伺服器站點上的 nfs 共享駐留在 ZFS 文件系統(ZoL 0.6.4.1、CentOS 7 和 Ubuntu 14.04)上,並且我通過 sharefs 選項或 /etx/exports 共享它,則 nfs 伺服器會以錯誤程式碼 NFS4ERR_NOENT 回答。客戶端將失敗。

問題: 1.如何讓較新的客戶端(14.04+)像在 12.04 上一樣正確更新文件句柄 2.(或者)如何讓伺服器在 ZFS 文件系統上使用 NFS4ERR_STALE 回答?或者根據規範,伺服器答案應該如何?

問候喬爾格

在 Linux 上的 ZFS 中修補:

https://github.com/zfsonlinux/zfs/pull/3404

獲取 git 版本並編譯它:

git clone https://github.com/zfsonlinux/zfs.git

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