Nfs
NFS:客戶端看不到伺服器上創建的新文件(記憶體?)
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 客戶端就是這種情況。較新的客戶會很好,但我們必須小心,因為他們似乎是巧合(因為優化)。
一種解決方法是在您想讓您的更改對外界可見之後,觸摸伺服器上的父目錄….