详细解读文件系统事件--inotify监控文件系统需要过滤事件!

写这篇文章时候,csdn的图片上传功暂停了,所有图片都看不到,我就在百度的博客中写完,直接粘过来了,图片都看不到,可以直接看我百度空间的文章:

http://hi.baidu.com/johntech/blog/item/e4a31a3db1ee1ce755e723f4.html

 

对于Inotify的使用,IBM有一篇文章介绍很详细,不需要我赘述,链接如下:

http://www.ibm.com/developerworks/cn/linux/l-inotifynew/


但对于其监控文件系统的一些特性,却很少有人总结,有些人用开源的Inotify脚本程序进行rsync同步,但我希望还是要对文件事件进行过滤,否则会做大量的重复操作和冗余操作,主要原因是,在我们队文件进行编辑操作的时候会产生大量的冗余事件,这些事件有些是临时文件的产生,有些是对监控文件的冗余操作。详细见下面的测试。

测试环境:

ubuntu 文件系统Ext4

CentOS 文件系统Ext3

测试工具: Inotify api编写的监控程序,并将发生的事件打印如下:

 

1.使用touch语句创建文件:touch test,产生两个事件:

 

如图所示,产生事件256与8,分别代表create事件与write_close事件。

 

 

2.使用vi语句创建test文件,vi test,产生事件如下:


 

      如图所示,会产生一些临时文件,他们一swp与swpx进行结尾。其中512事件代表删除文件,可见

我们在进行vi的时候,其实背后会有很多额外的操作开销。但具体问什么需要这么繁琐的过程,目前还

不清楚。

 

 

3.对通过vi打开的文件,进行write操作,在vi命令提示符下执行w,产生如下8个事件

 

如图所示,这回会产生一些名字叫4913的事件,这个数字貌似是不变的,就是你write其他文件,也会产生4913事件。但如果创建的文件本身名字就叫4913,那么会产生其它数字的临时文件,真是奇怪...

其中64是move_from事件,是将文件mv出当前路径时产生事件,128代表将其他路径文件移入当前路径,移出与移入操作可以通过 cookie值,来确定是否是同一文件。可见,当移动操作时候,是将test移动为test~,其实是修改了名字,通过cookie可以看出,它们是对同一文件的操作。

如果对vi打开的文件做退出操作,即执行q命令:



对同一个文件做write and close操作的时候,即在vi命令行下,执行wq,则产生10个事件如下:

 

可见,如果不对事件进行监控,一个简单的write操作都会产生很多冗余事件。

 

但也有些事件是唯一的,举例如下:

1.对已经产生的文件,重新进行touch操作,如test已经产生了,再次执行touch test操作时事件如下:

 

如图,只产生了write_close事件,覆盖了已经touch的文件。

 

2.从其他路径cp一个文件,到监控路径:

相当于进行了一次写覆盖操作。

 

3.从其他路径move一个文件到监控路径:


,只产生了move_to事件。

 

 

4.刚才看到了,如果write名为test文件,产生临时文件4913,如果我write名为4913的文件时候,事件如下:

 

如果write为5036,时候,会产生数字为其它的临时文件,真的是有意思。

所以那些希望使用inotify与Rsync进行同步的用户,脚本里要加上过滤功能啊。

当然我会在后续的文章里提到我自己写的服务器同步程序,先透露些功能:

1 .过滤临时文件和不需要的事件,比如在write的时候只产生一个事件,这样就之需要rsync一次即可。

2 .当rsync失败的时候,会进行稍后重新执行,如果仍旧失败,10小时候再次执行,确保服务器同步准确。

3 .对于本地没有的文件,我也会对远程文件路径进行删除,同时不会比较其他文件,那些使用 rsync --include=/* --include=xxx.php$ --exclude=*  的用户注意了,那种执行方式,效率很低,会递归比较所有目录。

4.支持主机到多个分机的同步,别且使用多线程同时执行,使文件在所有服务器上保持一致。并且同时同步inotiy产生的多个文件。

5.线程的数量可以根据服务器的性能,进行配置,好服务器可以开得多,同时执行的更多。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值