Inotify работает перед лицом плохо синхронизированных часов? - PullRequest
1 голос
/ 10 октября 2011

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

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

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

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

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

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

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

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

1 Ответ

2 голосов
/ 13 октября 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...