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


11

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

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

但是,当服务器计算机修改文件的内容时,在我ls从客户端执行目录操作之前,不会在客户端上显示此新内容。

我绝对为这种不一致感到困惑...任何帮助将不胜感激!

信息:

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

1
您可以做一些实验以获取更多信息吗?:ls -i在客户端上先执行,然后再在服务器上编辑文件,然后再执行一次。查看数字是否更改。如果他们这样做是因为服务器正在替换文件,而客户端直到重新扫描目录后才注意到这一点。如果是这样,请尝试设置安装选项,lookupcache=none然后查看行为是否改变。
Patrick

2
抱歉耽搁了。索引节点有效地更改。我添加了lookupcache选项,它似乎可以工作。我明天再检查。
numberxiii 2012年

Answers:


11

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

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

无论如何,解决方法是通过使用nfs mount选项告诉客户端在打开文件之前始终执行nfslookup lookupcache=none。不利的一面是,如果您经常打开文件,可能会很昂贵,因为它会增加NFS服务器的流量。


感谢您的阐述。在NFS服务器上,导出目录的堆栈为DRBD / LVM / ext4。可能是引起“错误”的原因。我在几个客户端上遇到问题,但在其他一些客户端上却没有问题...我将重做所有测试,并告诉您该选项是否一切正常。
numberxiii 2012年

0

将安装选项更改为hard,intr。我认为默认值可能在您的系统中比较软。这会有所帮助。


不幸的是,添加这些安装选项没有任何改变:(
numberxiii 2012年

对于我的第一个测试,我进行了重新安装。然后,我从另一个客户端进行了干净安装的测试。该问题似乎已得到纠正:我们等待30
秒钟

我建立了一个新的客户端(vm)来检查:内容没有问题!
numberxiii 2012年

1
@ johnshen64为什么您认为辛苦会解决此问题?硬/软仅在涉及到连接中断时才重要,与缓存无关。
Patrick

0

您还可以使用以下命令手动刷新NFS缓存

sudo mount /nfs-mount -o remount

...如果您不想添加任何降低性能的安装选项。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.