Почему события inotify отличаются при монтировании NFS?


10

Некоторое время назад я заметил, что события, о которых сообщает inotify, отличаются, когда файл сохраняется в монтировании NFS по сравнению с локальной файловой системой.

Разве базовая VFS не должна обеспечивать единообразное представление файловых операций?

Ниже приводится след сохранения файла VIM в Debian 7.1 (Linux 3.2).

На монтировании NFS:

wd=1 mask = 32 (IN_OPEN)
wd=1 mask = 16 (IN_CLOSE_NOWRITE)
wd=1 mask = 2048 (IN_MOVE_SELF)
wd=1 mask = 4 (IN_ATTRIB)
wd=1 mask = 1024 (IN_DELETE_SELF)
wd=1 mask = 32768 )

В локальной файловой системе

wd=1 mask = 32 (IN_OPEN)
wd=1 mask = 16 (IN_CLOSE_NOWRITE)
wd=1 mask = 2 (IN_MODIFY)
wd=1 mask = 32 (IN_OPEN)
wd=1 mask = 8 (IN_CLOSE_WRITE)
wd=1 mask = 4 (IN_ATTRIB)

Сохранение файла с помощью EMACS также показывает другое поведение

На монтировании NFS:

wd=1 mask = 32 (IN_OPEN)
wd=1 mask = 16 (IN_CLOSE_NOWRITE)
wd=1 mask = 2048 (IN_MOVE_SELF)

В локальной файловой системе:

wd=1 mask = 32 (IN_OPEN)
wd=1 mask = 16 (IN_CLOSE_NOWRITE)
wd=1 mask = 2 (IN_MODIFY)
wd=1 mask = 32 (IN_OPEN)
wd=1 mask = 2 (IN_MODIFY)
wd=1 mask = 8 (IN_CLOSE_WRITE)

Эти тесты были запущены с inotify-touch.c

Ответы:


4

inotify поддержка NFS?

Оглядываясь в сеть, можно увидеть, что inotify может поддерживать NFS, но очень ограниченным образом.

выставка № 1

Причина объяснена в этом Q & A StackOverflow под названием: inotify с NFS .

выдержка из принятого ответа

Для работы inotify требуется поддержка ядра. Когда приложение отслеживает каталог, оно просит ядро ​​сообщить ему, когда происходят эти изменения. Когда происходит изменение, в дополнение к записи этих изменений на диск, ядро ​​также уведомляет процесс наблюдения.

На удаленной машине NFS изменения не видны ядру; это происходит совершенно отдаленно. NFS предшествует inotify, и в NFS нет никакой поддержки сетевого уровня или чего-либо подобного.

выставка № 2

Изучите немного больше, если вы посмотрите в FAQ по inotify

В: Могу ли я смотреть sysfs (procfs, nfs ...)?

Проще говоря: да, но с некоторыми ограничениями. Эти ограничения различаются в зависимости от версии ядра и имеют тенденцию уменьшаться. Пожалуйста, прочитайте информацию о конкретных файловых системах.

Так это поддерживается?

Я думаю, что в конечном итоге вы испытываете то, что NFS не предоставляет яблоки яблокам, эквивалентные всем тем же функциям, что и локально смонтированные файловые системы.

Например, из потока nfs linux :

  • CIFS имеет встроенные функции уведомления (оплокирует)
  • NFS предоставляет «аренду» для уведомления

Дело в том, что альтернативные файловые системы, такие как CIFS и NFS, предлагают очень простую, если вообще есть, поддержку inotify.

Состояние NFS v4

отрывок из статьи IBM о состоянии NFS v4

NFS версии 4 предоставляет клиенту протокол для установления или восстановления состояния и связывает владение последующими серверными операциями с состоянием с ранее установленными состояниями. Чтобы устранить проблему отсутствующего клиента, клиент NFS версии 4 должен регулярно обновлять состояние в течение заданного сервером времени аренды. По истечении срока аренды сервер может освободить ресурсы для клиента и сделать их доступными для других приложений.

  • Клиент получает указанный сервером тайм-аут аренды с помощью операции getattr. getattr не является операцией с состоянием, поэтому не требуется устанавливать предыдущее состояние. Операция getattr может предшествовать операции setclientid или setclientid_confirm.
  • Обратитесь к атрибуту сайта времени аренды сервера NFS для настройки и настройки сроков аренды. *

3
Похоже, что OP видит события в NFS, они просто отличаются от событий в локальной файловой системе. Связанный вопрос и ответ, кажется, указывают на отсутствие inotifyсобытий в NFS.
iruvar
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.