Для работы inotify требуется поддержка ядра. Когда приложение отслеживает каталог, оно просит ядро сообщить ему, когда происходят эти изменения. Когда происходит изменение, ядро не только записывает эти изменения на диск, но и уведомляет наблюдающий процесс.
На удаленной машине NFS изменение не видно ядру; это происходит полностью дистанционно. NFS предшествует inotify, и в NFS или чем-то подобном нет поддержки на сетевом уровне.
Если вы хотите обойти это, вы можете запустить службу на сервере хранения (поскольку это ядро всегда будет видеть изменения в файловой системе), которая уведомляет запросы для удаленных машин и пересылает данные удаленным клиентам.
Изменить: мне кажется странным, что NFS следует обвинять в отсутствие поддержки inotify.
Сетевая файловая система (NFS) — это протокол распределенной файловой системы, первоначально разработанный Sun Microsystems в 1984 году, статья в Википедии
Тем не мение:
Inotify (inode notify) — это подсистема ядра Linux, которая расширяет файловые системы, чтобы отслеживать изменения в файловой системе. [...] Он был включен в основное ядро Linux с версии 2.6.13 (18 июня, 2005) [...]. статья в Википедии
Трудно ожидать, что переносимый сетевой протокол/приложение будет поддерживать определенную функцию ядра, разработанную для другой операционной системы и появившуюся более двадцати лет спустя. Даже если он имеет расширения для него, они не будут доступны или бесполезны в других операционных системах.
*выделено мной во всех случаях
Еще одна проблема с этим; Давайте предположим, что мы вообще не используем сеть, а скорее локальную файловую систему с хорошей поддержкой inotify: ext3 (предположим, что она смонтирована в /mnt/foo
). Но вместо реального диска файловая система монтируется с петлевого устройства; а базовый файл, в свою очередь, доступен в другом месте в vfs (скажем, /var/images/foo.img
).
Теперь вы не должны изменять смонтированные файловые системы ext3, но это все же достаточно безопасно, если изменение касается содержимого файла, а не метаданных.
Итак, предположим, что умный пользователь изменяет образ файловой системы (/var/images/foo.img
) в шестнадцатеричном редакторе, заменяя содержимое файла некоторыми другими данными, в то время как в то же время часы inotify наблюдают за тем же файлом в смонтированной файловой системе.
Нет никакого разумного способа сделать так, чтобы inotify всегда информировал процесс наблюдения о такого рода изменениях. Хотя, вероятно, можно было бы предпринять некоторые изменения, чтобы ext3 заметила и приняла изменения, ничего из этого не применимо, скажем, к xfs drtiver, который в остальном очень похож.
И не должно. Вы обманываете!. inotify может информировать вас только об изменениях, которые произошли через vfs в фактической отслеживаемой точке монтирования. Если изменения произошли за пределами этой VFS из-за изменения базовых данных, inotify не сможет вам помочь и не предназначен для решения этой проблемы.
Рассматривали ли вы возможность использования очереди сообщений для сетевых уведомлений?
person
SingleNegationElimination
schedule
20.11.2010