Nfs

NFS:客戶端看不到伺服器上創建的新文件(記憶體?)

  • April 2, 2016

NFS 伺服器是 SLES11SP3,這裡是導出語句:

/media/data *domain.com(rw,sync,no_root_squash,fsid=1)

我懷疑這是客戶端(RHEL6)上的記憶體問題,但是我相信我關閉了所有記憶體,但問題仍然存在。

問題如何顯示:

在伺服器上我做了一個touch /media/data/test. 即使我等待幾分鐘,該文件也不會顯示在客戶端上。

如果我touch /media/data(目錄)在伺服器上,那麼它會顯示。當我touch /data/test2來自客戶端時,它也會出現。

我在客戶端上試過的:

# original
server:/media/data   /data  nfs   rw,soft,vers=3,rsize=1048576,wsize=1048576,mountvers=3,sync,lookupcache=none
# mod 1 (remove parameters which have defaults: size, mountvers; add noac)
server:/media/data   /data  nfs   rw,soft,vers=3,sync,lookupcache=none,noac 0 0

我也嘗試使用hard和指定安裝actimeo=1,沒有效果。

我見過這個這個。也沒有幫助。


更新#1

似乎底層文件系統很特殊。

伺服器上的底層文件系統是 Novell NSS 卷。

NSS 具有某些獨特的屬性,例如將文件的創建時間映射到 Linux 中的ctime(這本身就是那裡的更改時間)。

含義:修改目錄內容後,只有 mtime 得到更新,ctime 沒有得到更新。顯然 RHEL NFS 客戶端不認為這是更新其記憶體的充分理由,而 SuSE NFS 客戶端似乎為此打了更新檔。

有什麼選擇?

  • 更改 NSS 卷上的屬性(可以選擇將 ctime 映射到更改時間而不是創建時間,儘管必須調查此文件系統範圍設置的影響)
  • 讓 Redhat 只考慮 mtime 而不是 ctime(為什麼還要考慮?)
  • 解決方法:在列出目錄之前先觸摸目錄…….

這是由於 NSS(Novell 儲存服務)的一個“功能”稱為 noCtimeIsMetadataModTime ,它將 NSS 創建時間映射到 Linux ctime

當我們更改伺服器上的文件時,父目錄的修改時間會更新,而不是像通常那樣的“更改”時間。因此,對於要更新的 NFS 客戶端記憶體,修改時間和更改時間似乎都需要更新,至少這是我們在導出 ext3 FS 而不是 NSS 時看到的。

較舊的 NFS 客戶端就是這種情況。較新的客戶會很好,但我們必須小心,因為他們似乎是巧合(因為優化)。

一種解決方法是在您想讓您的更改對外界可見之後,觸摸伺服器上的父目錄….

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