这里是我的设置:一台NFS服务器(v4),几台NFS客户机。
当客户端机器将文件写入NFS挂载时,其他客户端立即看到新的内容:没问题。
但是,当服务器机器修改文件的内容时,这个新的内容不会显示在客户端上,直到我从客户端上执行一个目录。
我绝对难住这种不一致…任何帮助将不胜感激!
信息:
根据您的评论添加一个答案。
解决的办法是添加lookupcache=none到你的nfs挂载选项。
会发生什么事情是,第一次你的客户端读取文件时,它会执行NFS查找以获取NFS文件ID。 然后它cachingNFS fileid,当你回到打开文件时,它使用caching。 通常这是一个问题,因为文件更新时,它的fileid保持不变。 但由于某种原因,旧文件正在被删除,并且新文件被创build(或重新命名,或者与其不同的文件所在的位置)。
现在通常这不是一个问题,或者当你的客户端试图打开一个不存在的fileid时,它会从服务器得到一个错误,并做另一个查找来获得新的fileid。 但由于某种原因,NFS服务器正在让客户端打开旧的fileid。 也许另一个客户端的文件打开,所以它还没有被删除,我不知道。
在任何情况下,解决这个问题的方法都是告诉客户端在使用nfs mount选项lookupcache=none打开文件之前总是先执行nfslookup。 这样做的缺点是,如果您经常打开文件,则可能会很昂贵,因为它会向NFS服务器添加更多stream量。
将安装选项更改为hard,intr 。 我认为你的系统中的默认值可能很小。 这将有所帮助。