代码之家  ›  专栏  ›  技术社区  ›  Jeff

在Linux的NFS上打开O|CREAT | O|EXCL?

  •  9
  • Jeff  · 技术社区  · 14 年前

    在Linux2.6内核和NFSv3中 open("fname", O_CREAT|O_EXCL) 生效了吗?当前的规范 open(2) http://www.kernel.org/doc/man-pages/online/pages/man2/open.2.html )说一切都很好:

      - O_EXCL  
       - ...  
          On NFS, O_EXCL is only supported when using NFSv3 or later on kernel  
          2.6 or later.  In NFS environments where O_EXCL support is not  
          provided, programs that rely on it for performing locking tasks will  
          contain a race condition.  Portable programs that want to perform  
          atomic file locking using a lockfile, and need to avoid reliance on NFS  
          support for O_EXCL, can  ...
    

    changelog (ca late kernel 2.6.23)开始指示有效性 四年 2.6.0上线后,在过去一两年里,网络上充斥着各种各样的用户指责这种使用。我想在RHEL5(2.6.18)系统上使用此设置,但我无法确定它何时真正变得安全。有人有明确的答案吗?

    1 回复  |  直到 9 年前
        1
  •  8
  •   Jeff    14 年前

    显然,NFS的人声称 和Linux 2.6.5

    http://nfs.sourceforge.net/#faq_d10

    • D10型。我正在尝试使用flock()/BSD locks来锁定多个客户端上使用的文件,但这些文件已损坏。怎么会?
      • 答。flock()/BSD锁仅在2.6.12之前的Linux NFS客户端上本地运行。使用fcntl()/POSIX locks确保文件锁对其他客户端可见。
      • 下面是一些序列化NFS文件访问的方法。
        • 使用fcntl()/POSIX锁定API。这种类型的锁定通过NLM协议或NFSv4跨多个客户端提供字节范围锁定。
        • 使用单独的锁文件,并创建指向它的硬链接。请参阅creat(2)手册页的Oïu EXCL部分中的说明。
      • 值得注意的是,在早期的2.6内核之前,OïuExcl创建在Linux NFS客户机上不是原子的。不要使用O_EXCL创建多个NFS客户机,除非运行的内核比 2.6.5 .