gpt4 book ai didi

linux - 打开 O_CREAT | Linux 中 NFS 上的 O_EXCL?

转载 作者:IT王子 更新时间:2023-10-29 00:13:54 30 4
gpt4 key购买 nike

在 Linux 2.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 ...

这看起来好像所有 2.6 内核都可以,但是手册页 changelog (大约晚于内核 2.6.23)在 2.6.0 上线后开始指示有效期四年,并且网络上充斥着董事会用户在过去一两年内谴责这种使用。我想在 RHEL 5 (2.6.18) 系统上使用此设置,但我无法确定它何时真正变得安全。有没有人有明确的答案?

最佳答案

显然,NFS 人员声称 NFSv3 和 Linux 2.6.5 上的任何东西都可以。

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

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

关于linux - 打开 O_CREAT | Linux 中 NFS 上的 O_EXCL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3406712/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com