NFS 缓存:在服务器上修改时,文件内容未在客户端更新

num*_*iii 12 nfs

这是我的设置:一台 NFS 服务器机器 (v4),几台 NFS 客户端机器。

当客户端机器将文件写入 NFS 挂载时,其他客户端会立即看到新内容:没问题。

但是,当服务器机器修改文件的内容时,这个新内容不会显示在客户端上,直到我ls从客户端执行了一个目录。

我对这种不一致感到非常难过......任何帮助将不胜感激!

信息:

  • 客户端和服务器上的 nfs 1.2.3-r1
  • acregmin、acregmax、acdirmin、acdirmax、lookupcache:默认值

phe*_*mer 13

根据您的评论添加为答案。
解决方案是添加lookupcache=none到您的 nfs 挂载选项。

发生的情况是,您的客户端第一次读取文件时,它会执行 NFS 查找以获取 NFS 文件 ID。然后它缓存 NFS 文件 ID,当您返回打开文件时,它使用缓存。通常这不是问题,因为当文件更新时,它的文件 ID 保持不变。但是由于某种原因,旧文件被删除,并创建了一个新文件(或重命名,或更改为不相同的文件)。
现在通常这不是问题,因为当您的客户端尝试打开不存在的文件 ID 时,它会从服务器获取错误并再次查找以获取新的文件 ID。但是出于某种原因,NFS 服务器让客户端打开那个旧的 fileid。也许另一个客户打开了该文件,因此它尚未被删除,我不知道。

在任何情况下,解决它的方法是告诉客户端在使用 nfs 挂载选项打开文件之前始终执行 nfslookup lookupcache=none。这样做的缺点是,如果您经常打开文件,这可能会很昂贵,因为它会为 NFS 服务器增加更多流量。


joh*_*n64 0

将安装选项更改为hard,intr. 我认为您的系统中的默认设置可能是软的。这会有所帮助。

  • @johnshen64 你为什么认为hard能够解决这个问题?硬/软仅在涉及连接中断时才重要,与缓存无关。 (2认同)