????????Linux内核从2.6.13版本开始提供了inotify通知接口,用来监控文件系统的各种变化情况,如 文件存取,删除、移动,修改等,利用这一机制,可以非常方便地实现文件异动告警、增量备份, 并针对目录或文件的变化及时作出响应。
????????将inotify机制与rsync 工具相结合,可以实现触发式备份(实时同步)——只要原始位置的文档 发生变化,则立即启动增量备份操作,否则处于静默等待状态,如下图所示。这样,就避免了按 固定周期备份时存在的延迟性、周期过密等问题。
正因为inotify通知机制由Linux内核提供,因此主要做本机监控,在触发式备份中应用时更适合 上行同步,下面依次介绍其配置过程。
????????在Linux 内核中.默认的inotify机制提供了三个调控参数:max_queue_events 、max_user_instances、?max_user_watches,分别表示监控事件队列(16 384)、最多监控实例数(128)、每个实例最多监控文 件数(8192)。
[root@lgcllc ~]# cat /proc/sys/fs/inotify/max_queued_events
[root@lgcllc ~]# cat /proc/sys/fs/inotify/max_user_instances
[root@lgcllc ~]# cat /proc/sys/fs/inotify/max_user_watches
当要监控的目录,文件数量较多或者变化较频繁时,建议加大这三个参数的值,例如,可直接 修改/etc/sysctl.conf配置文件,将管理队列设为32768.实例数设为1024.监控数设为1048576. 通常情况下,监控数所设的值建议大于监控目标的总文件数。
[root@lgcllc ~]# vim /etc/sysctl.conf
。。。。。。
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
[root@lgcllc ~]# sysctl -p
????????使用inotify 机制还需要安装 inotify-tools.以便提供 inotifywait.inotifywatch 辅助工具程序.用 来监控.汇总改动情况.inotify-tools可从网站http://inotify-tools.sourceforge.net/下载,版本为3.14.
[root@lgcllc ~]# rz -E //把源码包inotify-tools-3.14.tar.gz拉进来
rz waiting to receive.
[root@lgcllc ~]# tar zxf inotify-tools-3.14.tar.gz
[root@lgcllc ~]# cd inotify-tools-3.14
[root@lgcllc inotify-tools-3.14]# ./configure
[root@lgcllc inotify-tools-3.14]# make
[root@lgcllc inotify-tools-3.14]# make install
????????以监控网站目录/var/www/html为例,可以先执行“inotifywait命令,然后在另一个终端向 /var/www/html目录下添加文件、移动文件,跟踪屏幕输出结果。其中,选项‘-e”用来指定要监控哪些事件,选项“-m”表示持续监控,选项“-r”表示递归整个目录,选项“-q”简化输出信息。
[root@lgcllc ~]# inotifywait -mrq -e modify,create,move,delete /var/www/html/
????????inotifywait可监控modify(修改).create(创建).move(移动).delete(删除).attrib(属性更 改)等各种事件,一有变动立即输出结果:inotifywatch可用来收集文件系统变动情况,并在运行结 束后输出汇总的变化情况,关于这两个命令的详细用法可以参考其man手册页,配置触发备份任务 时只要用到inotifywait 就可以了。?
????????使用 inotifywait输出的监控结果中,每行记录中依次包括目录,事件,文件,据此可以识别变 动情况。为了简单,只要检测到变动时执行rsync上行同步操作即可,需要注意的是,当更新较频繁 时,应避免并发执行rsync备份—若rsync进程已经存在,则忽略本次同步,或者根据rsync进程数 量(取决于实际任务)来决定是否同步。
[root@lgcllc ~]# vim /opt/inotify_rsync.sh
[root@lgcllc ~]# chmod +x /opt/inotify_rsync.sh
[root@lgcllc ~]# echo '/opt/inotify_rsync.sh' >> /etc/rc.local
????????上述脚本用来检测本机/var/www/html目录的变动情况,一旦有更新触发rsync同步操作,上 传备份至服务器192.168.4.200的/var/www/html目录下。?