首页 > Linux&Fedora专区 > 使用rsync+inotify实现数据的实时备份
2014
02-12

使用rsync+inotify实现数据的实时备份

我们知道,rsync是配合crond来实现传输数据的,但如果要实现数据的实时备份,就需要使用到inotify了。

 Inotify 是一种强大的、细粒度的、异步的文件系统事件监控机制,linux内核从2.6.13起,加入了Inotify支持,通过Inotify可以监控文件系统中添加、删除,修改、移动等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools就是这样的一个第三方软件。

 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)

由于inotify特性需要Linux内核的支持,在安装inotify-tools前要先确认Linux系统内核是否达到了2.6.13以上,如果Linux内核低于2.6.13版本,就需要重新编译内核加入inotify的支持,也可以用如下方法判断,内核是否支持inotify:

[root@localhost ~]# uname -r
2.6.18-164.el5
[root@localhost ~]# ll /proc/sys/fs/inotify
total 0
-rw-r–r– 1 root root 0 Feb 12 16:01 max_queued_events
-rw-r–r– 1 root root 0 Feb 12 16:01 max_user_instances
-rw-r–r– 1 root root 0 Feb 12 16:01 max_user_watches

如果有上述三页输出,就代表内核是支持的。接着就可以开始安装inotify-tools了。

可以到https://github.com/rvoicilas/inotify-tools/wiki下载相应的inotify-tools版本,然后开始编译安装:

[root@localhost  ~]# tar zxvf inotify-tools-3.14.tar.gz 

root@localhost  ~]# cd inotify-tools-3.14

[root@localhost inotify-tools-3.14]# ./configure

[root@localhost inotify-tools-3.14]# make

[root@localhost inotify-tools-3.14]# make install

[root@localhost inotify-tools-3.14]# ll /usr/local/bin/inotifywa*

-rwxr-xr-x 1 root root 37264 04-14 13:42 /usr/local/bin/inotifywait

-rwxr-xr-x 1 root root 35438 04-14 13:42 /usr/local/bin/inotifywatch

inotify-tools安装完成后,会生成inotifywait和inotifywatch两个指令,其中,inotifywait用于等待文件或文件集上的一个特定事件,它可以监控任何文件和目录设置,并且可以递归地监控整个目录树。

inotifywatch用于收集被监控的文件系统统计数据,包括每个inotify事件发生多少次等信息。

实例1:

首先先运行inotifywait -mrq –timefmt ‘%Y-%m-%d %H:%M’ –format ‘%T %e %w %f’ -e close_write,move,delete,create,attrib /backup,然后再开一个窗口,touch 123,再mv 123 456然后就有以下日志。

[root@localhost ~]# inotifywait -mrq –timefmt ‘%Y-%m-%d %H:%M’ –format ‘%T %e %w %f’ -e close_write,move,delete,create,attrib /backup
2014-02-12 16:11 CREATE /backup/ 123
2014-02-12 16:11 ATTRIB /backup/ 123
2014-02-12 16:11 CLOSE_WRITE,CLOSE /backup/ 123
2014-02-12 16:11 MOVED_FROM /backup/ 123
2014-02-12 16:11 MOVED_TO /backup/ 456

看到了有create,attrib,close_write,move等操作。那我们就可以使用一个脚本来控制rsync的运行。

实例2:

比如有2台机器,一个做服务端192.168.1.101,另一个做客户端192.168.1.102。

a、先在客户端上创建/etc/rsyncd.conf

uid = nobody
gid = nobody
use chroot = no
max connections = 10
strict modes = yes
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[backup]
path = /backup/
ignore errors
read only = no
write only = no
hosts allow = 192.168.1.101
hosts deny = *
list = false
uid = root
gid = root
auth users = bkuser
secrets file = /etc/rsyncd.password

然后再创建 /etc/rsyncd.password密码文件,格式如下:

bkuser:123456

b、在客户端上创建如下脚本

#!/bin/bash

DSTHOST="192.168.1.102"

LOG="/backup/rsyncall.log"

echo 8192000 >> /proc/sys/fs/inotify/max_user_watches

inotifywait -mrq –timefmt ‘%Y-%m-%d %H:%M’ –format ‘%T %e %w %f’ -e close_write,move,delete,create,attrib /backup|while read TIME TIME1 TYPE DIR FILE

do

     rsync -avRH –ignore-errors ${DIR}/${FILE} bkuser@${DSTHOST}::backup/ –password-file=/backup/rsync.key >>/backup/rsync_info.log 2>&1 &

     echo "$TIME $TIME1 $DIR/$FILE $TYPE rsync success." >>$LOG

done

然后再创建/backup/rsync.key这个文件,输入客户端rsync的密码即可。

参考链接:

http://ixdba.blog.51cto.com/2895551/580280/

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

最后编辑:
作者:admin
这个作者貌似有点懒,什么都没有留下。

留下一个回复

你的email不会被公开。