linux内核从2.6.13版本开始提供了inotify通知接口,用来监控文件系统的各种变化情况,如文件存取、删除、移动、修改等。利用这一机制,可以很方便地实现文件异动警告、增量备份,并针对目录或文件的变化及时作出响应。
将rsync工具与inotify机制相结合,可以实现触发式备份(实时同步)——只要原始位置的文件发生变化,则立即启动增量备份操作,否则处于静默等待状态。这样,就避免了按固定周期备份时存在的延迟性,周期过密等问题。
配置过程:
1、调整inotify内核参数:
在linux内核中,默认的inotify提供了三个跳空参数:max_queue_events、max_user_instances、max_user_watches,分别表示监控事件队列(16384)、最多监控实例数(128)、每个实例最多监控文件数(8192)。
当要监控的目录、文件数较多或变化较频繁时,建议加大这三个参数的值。例如,可直接修改/etc/sysctl.conf配置文件,将管理队列设为32768,实例数设为1024,监控数设为1048 576(建议大于监控目标的总文件数)。
2、安装inotify-tools
使用inotify机制还需要安装inotify-tools,以便提供inotifywait、inotifywatch辅助工具程序,用来监控,汇总改动情况。inotify-tools可以从网站http://inotify-tools.sourceforge.net/下载。
我是在http://download.csdn.net/download/mchdba/7564775这里下载的。
接着make && make install
以监控网站目录 /var/www/html为例,可以先执行inotifywait命令,然后在另一个终端向/var/www/html目录下添加文件、移动文件、跟踪屏幕输出结果。其中选项“-e”用来指定要监控哪些事件,选项“-m”表示持续监控,选项“-t”表示递归整个目录,选项“-q”简化输出信息。
inotifywait可监控modify(修改)、create(创建)、move(移动)、delete(删除)attrib(属性更改)等各种事件,一有变动立即输出结果,inotifywatch可用来手机文件系统变动情况,并在运行结束后输出汇总的变化情况,关于这两个命令的详细用法可以参照man手册页,配置触发备份任务时只要用到inotifywait就可以了。
3、编写触发式同步脚本:(转载)
#!/bin/sh
src=/data/www/wwwroot/ #A上的需要备份的文件路径
des=linuxhome #B上备份文件的路径 daemon别名
ip=192.168.1.101 #B的IP地址
user=linux
/usr/local/bin/inotifywait -mrq –timefmt ‘%d/%m/%y %H:%M’ –format ‘%T %w%f’ \
-e modify,delete,create,attrib \
src |whilereadfiledorsync−avz–delete–progress–password−file=/etc/rsyncd.pass
{src}
user@
{ip}::{des} &&
#echo “{src} was rsynced”
#echo “—————————————————–”
done
注:–password-file存放用户${user}的密码
将rsync.sh添加到开机启动:
sed -i ‘$i \/usr/local/sbin/rsync.sh’ /etc/rc.local
写法二:
cd /usr/local/sbin
vi rsync.sh //分别在两台机器上创建如下脚本,另一台改一下IP地址即可.
!/bin/sh
src=/data/www/wwwroot/
des=/data/www/wwwroot
ip=192.168.1.101
/usr/local/bin/inotifywait -mrq –timefmt ‘%d/%m/%y %H:%M’ –format ‘%T %w%f’ \
-e modify,delete,create,attrib \
src |whilereadfiledorsync−avz–delete–progress
{src} root@
ip:
{des} &&
#echo “${src} was rsynced”
#echo “—————————————————–”
done