这是我的设置:一台 NFS 服务器机器 (v4),几台 NFS 客户端机器。
当客户端机器将文件写入 NFS 挂载时,其他客户端会立即看到新内容:没问题。
但是,当服务器机器修改文件的内容时,这个新内容不会显示在客户端上,直到我ls
从客户端执行了一个目录。
我对这种不一致感到非常难过......任何帮助将不胜感激!
信息:
phe*_*mer 13
根据您的评论添加为答案。
解决方案是添加lookupcache=none
到您的 nfs 挂载选项。
发生的情况是,您的客户端第一次读取文件时,它会执行 NFS 查找以获取 NFS 文件 ID。然后它缓存 NFS 文件 ID,当您返回打开文件时,它使用缓存。通常这不是问题,因为当文件更新时,它的文件 ID 保持不变。但是由于某种原因,旧文件被删除,并创建了一个新文件(或重命名,或更改为不相同的文件)。
现在通常这不是问题,因为当您的客户端尝试打开不存在的文件 ID 时,它会从服务器获取错误并再次查找以获取新的文件 ID。但是出于某种原因,NFS 服务器让客户端打开那个旧的 fileid。也许另一个客户打开了该文件,因此它尚未被删除,我不知道。
在任何情况下,解决它的方法是告诉客户端在使用 nfs 挂载选项打开文件之前始终执行 nfslookup lookupcache=none
。这样做的缺点是,如果您经常打开文件,这可能会很昂贵,因为它会为 NFS 服务器增加更多流量。
将安装选项更改为hard,intr
. 我认为您的系统中的默认设置可能是软的。这会有所帮助。