加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 在NFS原子上重命名()

发布时间:2020-12-14 02:46:29 所属栏目:Linux 来源:网络整理
导读:我有一个过程: 写一个新的’.tmp’文件. 使用rename()系统调用来替换现有文件. 正在从远程NFS客户端访问此文件. 我们这样做,因为我们想要原子文件更新,而 rename() 规范说: If newpath already exists,it will be atomically replaced,so that there is no
我有一个过程:

>写一个新的’.tmp’文件.
>使用rename()系统调用来替换现有文件.
>正在从远程NFS客户端访问此文件.

我们这样做,因为我们想要原子文件更新,而rename()规范说:

If newpath already exists,it will be atomically replaced,so that
there is no point at which another process attempting to access
newpath will find it missing. However,there will probably be a
window in which both oldpath and newpath refer to the file being
renamed.

我们依赖这种行为.

但是最近,由于迁移到新的NetApp(群集模式,从7模式) – 我们有一个过程偶尔会因ENOENT而崩溃 – 没有这样的文件或目录.

“非常偶然”,我的意思是 – 在过去几周里,每5分钟左右就会发生4到5次.

我正在与供应商一起调查这是否可能是他们的NFS服务器的错误.

但我实际上想弄清楚的是,原子性保证是否实际适用于NFS.有人能够为我澄清rename()的原子保证是否适用于多客户端NFS场景?我不确定这个功能是否已经起作用,但从一开始就无法保证.

来自:RFC1813

Procedure RENAME renames the file identified by from.name
in the directory,from.dir,to to.name in the directory,
to.dir. The operation is required to be atomic to the
client.

如果它是相关的,我们已经让SL 6.5客户端在ONTAP-CDOT 8.3上访问NFS数据存储区.

解决方法

避免NFS中的竞争条件

这总是一个有趣的挑战,我知道没有重写应用程序的唯一工作是使用选项sync挂载共享并更改NFS服务器以使用no_wdelay.我不记得如何在NetApp中设置no_wdelay.

这种方法的缺点是,如果你对这个共享有很多同时写入,它们会以指数方式变慢.您可能想要询问NetApp如何在该共享上设置no_wdelay,或者只是向他们描述问题.他们可能有更好的想法.我至少8年没有接触过NetApp.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读