NFS:客户端看不到在服务器上创build的新文件(caching?)

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卷上的属性(可以select将ctime映射到“更改时间”而不是“创build时间”,但必须调查此文件系统范围设置的影响)
  • 让Redhat只考虑mtime而不是ctime(为什么他们呢?)
  • 解决方法:在列出它们之前触摸目录…….

这是由于NSS(Novell Storage Services)的一个名为noCtimeIsMetadataModTime的“function”, 它将NSS创build时间映射到Linux ctime 。

当我们更改服务器上的一个文件时,父目录的修改时间会被更新,而不是“更改”时间,因为通常情况是这样。 为了更新NFS客户端caching,看来修改时间更改时间都需要更新,至less这是我们在导出ext3 FS而不是NSS时看到的。

旧的NFS客户端就是这种情况。 较新的客户会很好,但我们必须小心,因为他们似乎巧合(因为优化)。

一种解决方法是在想让更改对外界可见之后触摸服务器上的父目录….