首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

fanotify 监控文件系统(1)

fanotify 监控文件系统(1)

引子Fanotify (fscking all notifiction and file access system) 是一个 notifier,即一种对文件系统变化产生通知的机制。
我第一次看到 Fanotify 是在 2009 年,Eric Paris 在 lkml 上努力地向大家说明 fanotify 的特性。但在当时有影响力的内核开发人员都认为这只是一个拿了报酬的程序员为 Anti-Virus 公司所做的一个特别项目,而非一个有价值的内核特性。因此 fanotify 的前景并不光明。因此我也没有过多在意,那个时候,fanotify 的接口非常怪异,使用一种特别的 socket 接口,更让我失去了试一下的勇气。
经过漫长的等待,或许还加上耐心地推广,fanotify 居然被合并进入内核了。也不知从什么时候开始,反对意见都销声匿迹。终于,在 2.6.36 发布的那会儿,fanotify 堂而皇之地被列入了 KernelNewbie 的 changlog 中,并且作为 cool stuff 之一,号称为替代 inotify 的下一代 notifier。
两年间发生了什么?是什么让 fanotify 不再仅仅是 yet another notification interface 了呢? 本文将探讨 fanotify 的特性和基本的使用,希望能对理解这个新的文件系统通知机制提供一些参考。
fanotify 的特性文件系统事件通知作为一个 notifier,最基本的功能是当文件系统出现变化时通知相应的监控程序(本文将用 Listener 来指代监控程序)。比如文件 A 被打开时,监控程序就能得到通知,说文件 A 即将被打开,这样 Listener 就可以做一些相应的工作。类似文件夹同步等应用程序都依赖这个机制。在 Linux 的历史上,最早由 dnotify 提供这种服务,后来 inotify 起而代之。
Fanotify 也提供通知功能,表一列出了 fanotify 提供的文件系统变化事件。
表 1.fanotify 事件 Fanotify 定义含义 FAN_ACCESS  File was accessed  FAN_MODIFY  File was modified  FAN_CLOSE_WRITE  Writtable file closed  FAN_CLOSE_NOWRITE  Unwrittable file closed  FAN_OPEN  File was opened  FAN_OPEN_PERM  File open in perm check  FAN_ACCESS_PERM  File accessed in perm check
图 1 展示 fanotify 工作时的一个概况。
图 1. fanotify 事件当应用程序 A 打开文件时,Listener A 就得到一个 FAN_OPEN 的通知;当 App A 写文件时,Listener A 就得到一个 FAN_MODIFY 的通知;close 也一样。这和 inotify 是一样的。
返回列表