NFS服务器是一个SLES11SP3,这里是出口语句:
/media/data *domain.com(rw,sync,no_root_squash,fsid=1)
我怀疑这是客户端(RHEL6)上的caching问题,但是我相信我把所有的caching都关掉了,问题仍然存在。
问题如何显示:
在服务器上,我做了一个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具有一些独特的属性,比如将文件的创build时间映射到Linux中的ctime (原本就是那里的更改时间)。
含义:在修改目录内容时,只有mtime被更新,而不是ctime。 显然,RHEL NFS客户端并不认为这是更新其caching的充分理由,而SuSE NFS客户端似乎是为此修补的。
有什么select?
这是由于NSS(Novell Storage Services)的一个名为noCtimeIsMetadataModTime的“function”, 它将NSS创build时间映射到Linux ctime 。
当我们更改服务器上的一个文件时,父目录的修改时间会被更新,而不是“更改”时间,因为通常情况是这样。 为了更新NFS客户端caching,看来修改时间和更改时间都需要更新,至less这是我们在导出ext3 FS而不是NSS时看到的。
旧的NFS客户端就是这种情况。 较新的客户会很好,但我们必须小心,因为他们似乎巧合(因为优化)。
一种解决方法是在想让更改对外界可见之后触摸服务器上的父目录….