открыть O_CREAT |O_EXCL на NFS в Linux? - PullRequest
9 голосов
/ 04 августа 2010

Когда в ядре 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), но я не мог определить, когда она действительно стала безопасной. У кого-нибудь есть окончательный ответ?

1 Ответ

7 голосов
/ 04 августа 2010

Судя по всему, ребята из NFS утверждают, что с NFSv3 и Linux 2.6.5 в порядке.

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

  • D10.Я пытаюсь использовать блокировки flock () / BSD для блокировки файлов, используемых на нескольких клиентах, но файлы становятся поврежденными.Как получилось?
    • A.Блокировки flock () / BSD действуют только локально на клиентах Linux NFS до версии 2.6.12.Используйте блокировки fcntl () / POSIX, чтобы гарантировать, что блокировки файлов видны другим клиентам.
    • Вот несколько способов сериализации доступа к файлу NFS.
      • Используйте API блокировки fcntl () / POSIX.Этот тип блокировки обеспечивает блокировку диапазона байтов для нескольких клиентов через протокол NLM или через NFSv4.
      • Используйте отдельный файл блокировки и создайте жесткие ссылки на него.См. Описание в разделе O_EXCL справочной страницы creat (2).
    • Стоит отметить, что до ранних версий 2.6 ядра, создаваемые O_EXCL, не были атомарными на клиентах Linux NFS.Не используйте O_EXCL создает и ожидает атомарного поведения среди нескольких клиентов NFS, если вы не используете ядро ​​новее, чем 2.6.5 .
    • ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...