在 NFS 中强制刷新属性

Posted

技术标签:

【中文标题】在 NFS 中强制刷新属性【英文标题】:force attribute refresh in NFS 【发布时间】:2013-08-15 17:11:08 【问题描述】:

我不知道我是否在问这个问题,这是问题的一部分。我们在我们的 linux 机器上使用 NFS。我们已经挂载到文件服务器上的目录。我们使用 1 小时属性超时和 1 小时数据超时。我们必须要编写文件的模型。 1)我们添加到文件的末尾。添加到文件末尾时,我们保持相同的文件名。 2) 更改先前写入的数据。更改文件时,我们更改其文件名。这个想法是这将与缓存一起工作,因为写入文件的数据永远不会改变。我还需要一件事来完成这项工作。使用当前设置,当我使用 mmap 访问文件的新添加部分时,当文件的该部分在属性被缓存时不存在时,我会收到“总线错误”。这一切都是有道理的,也是意料之中的。我想做的是强制 NFS 刷新文件属性,这样它就知道文件现在更大了。在一个完美的世界里,只有当我遇到总线错误时我才会这样做。那么...有没有可以从 c 或 shell 执行的命令?

编辑 我被否决了,所以我想我的问题很愚蠢。也许更多信息会有所帮助。当我使用具有长属性和数据刷新的挂载时,我获得了所需的微秒级性能。当我使用具有短属性刷新的坐骑时,它会慢 1000 倍。只有当我得到总线错误时,我才需要刷新属性。这是 linux,因此很有可能存在一种强制刷新的方法。我们的数据每 20 分钟仅更改一次,因此我想探索一下按需刷新场景。

【问题讨论】:

-1 因为我没有谷歌什么?我已经搜索了高和低!嘘。 查看***.com/questions/3204835/…。 ***.com/questions/13946852/… 中建议的 drop_caches 方法可能适用于您的情况,但您需要先同步写入! 【参考方案1】:

NFS 使用“关闭打开缓存一致性”。根据手册(man nfs),“当应用程序打开存储在 NFS 服务器上的文件时,NFS 客户端会检查它是否仍然存在于服务器上,并通过发送 GETATTR 或 ACCESS 请求允许打开者”。

根据FAQ 的 A8,“Linux 通过将文件关闭后执行的 GETATTR 操作的结果与文件下一个时执行的 GETATTR 操作的结果进行比较来实现接近打开缓存一致性如果结果相同,客户端将认为其数据缓存仍然有效;否则,缓存被清除。"

当您收到“总线错误”时,我认为您应该关闭并重新打开(然后重新映射)该文件。

附:顺便说一句,这是个好问题。

【讨论】:

嗯,我要试试。你可能正在做某事。谢谢你没有给我-1!

以上是关于在 NFS 中强制刷新属性的主要内容,如果未能解决你的问题,请参考以下文章

如何在父组件中强制刷新子组件

关于vue强制刷新

移动端页面返回强制刷新页面

网页中页面的刷新(F5)与强制刷新(Ctrl+F5)有啥区别?

Vue this.$forceUpdate() 强制刷新数据

Vue组件强制刷新的解决方案