Подтвердить что ты не робот

Открыть O_CREAT | O_EXCL на NFS в Linux?

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

4b9b3361

Ответ 1

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

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

  • D10. Я пытаюсь использовать блокировки flock()/BSD для блокировки файлов, используемых на нескольких клиентах, но файлы становятся поврежденными. Почему?
    • A. Блокировки flock()/BSD действуют только локально на клиентах NFS Linux до 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.
    • ...