Работает ли inotify при плохо синхронизированных часах?

Вот сценарий:

  • Центральная машина под управлением Linux является «хранилищем данных» для ряда инструментов.

  • У каждого прибора есть ПК, и у каждого есть удаленное крепление (SMB) к хранилищу данных, в которое он записывает файлы данных, захваченные прибором.

  • Приборные ПК работают под управлением самых разных операционных систем, в том числе некоторых очень старых.

  • Аппаратные часы ПК прибора не синхронизированы, и синхронизация будет проблематичной по ряду причин.

  • Различные другие исправления (например, отказ от использования SMB, обновление операционных систем приборов, разработка программ для работы на приборах) также проблематичны.

Мы хотим написать приложение-граббер, которое замечает, когда прибор записывает файл в хранилище данных через удаленное монтирование, а затем быстро копирует файл куда-то еще. Текущий план состоит в том, чтобы использовать подсистему Linux inotify для наблюдения за событиями файловой системы в каталогах/деревьях, в которые могут попасть файлы, а затем выполнять копирование.

Меня беспокоит тот факт, что тот факт, что у нас нет синхронизированных часов, будет проблемой. Оправдано ли это беспокойство?


person Stephen C    schedule 10.10.2011    source источник


Ответы (1)


Беспокойство не оправдано.

Linux inotify — это API пользовательского пространства, который предоставляет доступ к подсистеме Linux fsnotify. Эта файловая система ядра подключена к общему уровню файловой системы ядра (называемому VFS). Он получает уведомление о создании нового файла непосредственно из кода файловой системы с помощью функции обратного вызова, а не путем сравнения дат создания или доступа к файлам в каталоге. Таким образом, на него никак не повлияют метки времени в файлах, поэтому часы на другом клиентском компьютере не будут иметь никакого значения.

Чтобы убедиться, что вы проверяете код функции отправки события inotify_should_send_event(), которая проверяет, нужно ли отправлять событие для отслеживаемого файла или каталога (см. здесь: http://lxr.linux.no/linux+v3.0.4/fs/notify/inotify/inotify_fsnotify.c#L144 ). Обратите внимание, что нет никакой привязки ко времени. В том же духе основная функция fsnotify (http://lxr.linux.no/linux+v3.0.4/fs/notify/fsnotify.c#L296) в ядре нигде не ссылается на метки времени, поэтому часы не будут влиять этот интерфейс вообще.

Надеюсь, это поможет.

person gby    schedule 13.10.2011
comment
И имейте в виду, что не каждая сетевая файловая система поддерживает уведомление об изменении. Сначала проверьте: но я думаю, что это, вероятно, работает для монтирования CIFS. - person Zan Lynx; 13.10.2011
comment
@ZanLynx - проверено, и да. - person Stephen C; 18.12.2012