main

Механизмы слежения за файлами в linux

В общем, сегодня пришлось немного покурить тему мониторинга операций над файлами. На текущий момент существуют 3 механизма ядра: {d,i,fa}notify.

  • dnotify - наблюдает за операциями над отдельными файлами. Объявлен устаревшим ещё во времена 2.6.7.
  • inotify - наблюдает за изменениями в директории. Наиболее мощная реализация на текущий момент. Не умеет рекурсию для директорий. Тратит по одному дескриптору на каждую точку мониторинга. Оперирует именами файлов.
  • fanotify - проектировался для использования антивирусниками. Оперирует файловыми дескрипторами. Может мониторить как ФС целиком, так и отдельную директорию с нижележащими. Имеет 2 способа ограничения "области видимости": {"мониторить всё, исключать ненужное", "создать пустой listener, добавить нужное по вкусу"}. Интерфейс ещё не устаканился, документации в ядре - нет, маны бродят по рассылкам.

При всём многообразии - для realtime-индексатора это можно использовать, но через жопу. inotify упрётся в FDS_MAX на большом дереве каталогов, в fanotify придётся доставать имя файла через «/proc/self/fd/%d», по другому оно не умеет. И меня опять терзают сомнения насчёт FDS_MAX, хоть здесь и не надо постоянно их открытыми держать, только до завершения обработки события.