inotify + rsync + pyinotify实现Linux文件实时同步

本文介绍下用法、注意事项、pyinotify多进程实现数据同步

Inotify的出身:

Linux 桌面系统与 MAC 或 Windows 相比有许多不如人意的地方,为了改善这种状况,开源社区提出用户态需要内核提供一些机制,以便用户态能够及时地得知内核或底层硬件设备发生了什么从而能够更好地管理设备,给用户提供更好的服务。inotify 是一种文件系统的变化通知机制,如文件增加、删除等事件可以立刻让用户态得知,该机制是著名的桌面搜索引擎项目 beagle 引入的,并在 Gamin 等项目中被应用。

Inotify优点:

之前的一种机制:dnotify有很多缺陷,被监视的目录都会导致过多的文件描述符,对于移动存储设备无法umount;监控对象基于目录,对于文件的变化需要缓存更多的stat结构数据。实现接口使用signal不是很友好;

1、Inotify 不需要对被监视的目标打开文件描述符,而且如果被监视目标在可移动介质上,那么在 umount 该介质上的文件系统后,被监视目标对应的 watch 将被自动删除,并且会产生一个 umount 事件。

2、Inotify 既可以监视文件,也可以监视目录

3、Inotify 使用系统调用而非 SIGIO 来通知文件系统事件。

4、Inotify 使用文件描述符作为接口,因而可以使用通常的文件 I/O 操作select 和 poll 来监视文件系统的变化。

Inotify 可以监视的文件系统事件包括:

IN_ACCESS,即文件被访问

IN_MODIFY,文件被 write

IN_ATTRIB,文件属性被修改,如 chmod、chown、touch 等

IN_CLOSE_WRITE,可写文件被 close

IN_CLOSE_NOWRITE,不可写文件被 close

IN_OPEN,文件被 open

IN_MOVED_FROM,文件被移走,如 mv

IN_MOVED_TO,文件被移来,如 mv、cp

IN_CREATE,创建新文件

IN_DELETE,文件被删除,如 rm

IN_DELETE_SELF,自删除,即一个可执行文件在执行时删除自己

IN_MOVE_SELF,自移动,即一个可执行文件在执行时移动自己

IN_UNMOUNT,宿主文件系统被 umount

IN_CLOSE,文件被关闭,等同于(IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)

IN_MOVE,文件被移动,等同于(IN_MOVED_FROM | IN_MOVED_TO)

更多原理部分请参考:http://www.ibm.com/developerworks/cn/linux/l-inotifynew/

官网:https://github.com/rvoicilas/inotify-tools/wiki

查看内核是否支持inotify机制

grep INOTIFY_USER /boot/config-$(uname -r)

输出:CONFIG_INOTIFY_USER=y 表示支持inotify机制

安装部分:yum install inotify-tools (版本为3.13)

inotify-tools包含两个工具inotifywait(监测事件的发生);inotifywatch(事件变化统计)

时间: 2024-09-16 15:00:06

inotify + rsync + pyinotify实现Linux文件实时同步的相关文章

linux系统中rsync+inotify实现服务器之间文件实时同步_Linux

之前做了"ssh信任与scp自动传输脚本"的技术文档,此方案是作为公司里备份的方法,但在实际的运行中,由于主服务器在给备份服务器传输的时候,我们的主服务器需要备份的文件是实时.不停的产生的,造成不知道主服务器给备份服务器传输了多少文件,磁盘空间就那么大,做备份的原因:一个是为了保持文件,另外一个是解决主服务器的磁盘饱满问题,但由于不知道备份服务器到底接收了多少文件,所以主服务器里的文件不敢删除(如果没有备份的情况下删除,问题就严重了,我这个是政府的项目,服务器里的文件都是重要的,删错了

linux下两台服务器文件实时同步方案设计和实现

linux下两台服务器文件实时同步方案设计和实现 假设有如下需求: 假设两个服务器: 192.168.0.1 源服务器  有目录 /opt/test/ 192.168.0.2 目标服务器  有目录 /opt/bak/test/ 实现的目的就是保持这两个服务器某个文件目录保持实时同步 实现方式: 通过rsync+inotify-tools结合来实现 需要安装软件: 1.  rsync 同步软件    在 源服务器 和 目标服务器 都需要安装      源服务器: 是rsync客户端,不需要配置  

linux中使用rsync+inotify-tools+ssh文件实时同步

在某些服务器架构中,会遇到文件同步问题,例如需要做站点镜像备份,同步文件到多个CDN节点等.需要解决的主要有两个问题 1.如何实现文件同步问题? 2.何时执行同步操作? 文件同步可以使用rsync+ssh,什么时候自行同步操作呢?可能部分人会想到cron,这个没错,可以实现的,但是确实有点浪费资源,因为cron并不知道文件是否被修改过,只是不停的周期性的执行,如果文件修改后再执行同步操作,不修改就不执行那应该比较好,其实inotify就可以做到,只要你的服务器不是古董级别的,就支持inotify

解决inotify+rsync文件实时同步inotifywait错误

系统环境:CentOS 6.4 - x86_64 出现错误:/usr/local/bin/inotifywait: error while loading shared libraries: libinotifytools.so.0   解决方法:  代码如下 复制代码 ln -sv /usr/local/lib/libinotify* /usr/lib/ ln -s /usr/local/lib/libinotifytools.so.0 /usr/lib64/libinotifytools.s

Linux 文件同步工具——inotify+rsync实现实时同步

文章整理自:http://ixdba.blog.51cto.com/2895551/580280 前面我们已经讲解了如何使用rsync实现文件同步,但是rsync会存在一些缺点: 一.rsync的优点与不足 与传统的cp.tar备份方式相比,rsync具有安全性高.备份迅速.支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器数据到远端服务器,对本地磁盘定期做数据镜像等. 随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsyn

rsync+inotify如何实现文件的实时同步

环境描述:现有两台服务器,要实现mp3文件的实时同步.可以使用rsync来做同步,但不能实现实时,为了实现实时同步,我们使用inotify来监控需要同步的目录发生的改变,inotify只是内核中的一个监控文件变化的模块,提供了监控文件变化的API,而要连接这个API,需要安装inotify-tools工具.可以实现文件的新增,删除,修改,改变属性等,功能很强大.现在需要一台服务器做为内容发布端,来把改变的文件,通过rsync实时的同步到内容服务器. =======================

inotify+rsync+mutt+msmtp实现linux文件或者目录自动更新

inotify+rsync+mutt+msmtp实现linux文件或者目录自动更新并且实现发邮件给管理员 实现文件实时同步,并且监控目录发送邮件给管理员 需求,需要一次性更新多台服务器,人工手动,时间较长. 并且实时监控发邮件到管理员邮箱里. 服务器架构图 更新源ip:192.168.0.110 服务器ip:192.168.0.185 192.168.0.185配置 首先安装rsync yum -y install rsync 然后等待 定义rsync配置文件/etc/rsyncd.conf 直

lsyncd实时同步搭建指南——取代rsync+inotify

1. 几大实时同步工具比较 1.1 inotify + rsync 最近一直在寻求生产服务服务器上的同步替代方案,原先使用的是inotify + rsync,但随着文件数量的增大到100W+,目录下的文件列表就达20M,在网络状况不佳或者限速的情况下,变更的文件可能10来个才几M,却因此要发送的文件列表就达20M,严重减低的带宽的使用效率以及同步效率:更为要紧的是,加入inotifywait在5s内监控到10个小文件发生变化,便会触发10个rsync同步操作,结果就是真正需要传输的才2-3M的文

如何使用sersync实现多台服务器实时同步文件

一.Sersync项目介绍 项目地址:http://code.google.com/p/sersync/ 我们常用到的是rsync+inotify来对服务器进行实时同步,其中inotify用于监控文件系统事件,rsync是目前广泛使用的同步算法,其优点是只对文件不同的部分进行操作,所以其优势大大超过使用挂接文件系统的方式进行镜像同步. 目前使用的比较多的同步程序版本是inotify-tools,另外一个是google开源项目Openduckbill(依赖于inotify-tools),这两个都是