通过使用rsync不仅可以实现cp、ls的功能,还可以将rsync作为daemon运行,对远程设备(Windows或类UNIX系统)上的数据进行备份,不仅可以备份文件还可以对整个文件系统进行备份,使用起来也是比较的方便。在第一次使用rsync时,采用的是完全备份,后续如果要对相同的内容进行备份的话,则采用的是增量备份,备份速度快,并且可以创建计划任务,定期的对数据进行备份。当使用rsync进行备份时,会对要进行备份的数据进行扫描,当要备份的数据量比较大时,且变化的内容又比较小,这是对数据的扫描就要花去很多的时间,效率不是很高,无法对数据的进行实时的监控,因此如果希望对数据进行实时备份的话,可以使用inotify与rsync组合。前一篇博文已经对rsync进行了比较细致的介绍,这里就不对rsync进行说明了,将详细的介绍inotify的使用。
Rsync博客地址:http://hezhang.blog.51cto.com/1347601/1357323
inotify是一种强大的、细粒度的、异步的文件系统监控机制,在Linux内核2.6.13以后的版本中增加了对inotify的支持,通过使用Inotify可以监控文件系统中的添加、删除、移动、修改等等各种细微的事件,利用这个内核接口,通过使用诸如inotify-tools的第三方软件就可以监控文件系统中文件的各种细微的变化情况,通过使用inotify对文件系统中的各种细微事件的监控,当发生变化时,触发rsync的同步,从而实现数据的实时备份。
由于inotify需要操作系统的内核达到2.6.13,因此可以使用uname �Cr查看操作系统的内核版本,如果内核版本低于2.6.13,需要对内核进行重新编译,加入inotify的功能。也可以使用如下方法判断,内核是否支持Inotify。
[root@server1 ~]#uname -r
2.6.18-308.el5
[root@server1 ~]#
当前内核的版本是2.6.18.
使用ll /proc/sys/fs/inotify/
[root@server1 ~]#ll /proc/sys/fs/inotify/
total 0
-rw-r--r-- 1 rootroot 0 Feb 9 09:14 max_queued_events
-rw-r--r-- 1 rootroot 0 Feb 9 09:14 max_user_instances
-rw-r--r-- 1 rootroot 0 Feb 9 09:14 max_user_watches
[root@server1 ~]#
如果有出现上面的3项的话,则表示已经支持了inotify,就可以进行安装inotify-tools了。
下载intofiy-tools:http://inotify-tools.sourceforge.net
下载好相应的版本以后,到其传到系统中,开始进行编译安装。
[root@server1 opt]#ll
total 360
-rw-r--r-- 1 root root 358772 Feb 8 17:39 inotify-tools-3.14.tar.gz
drwxr-xr-x 2 rootroot 4096 Jan 24 15:49 scripts
[root@server1 opt]#
解压:
tar �Czxvfinotify-tools-3.14.tar.gz
进入到解压目录:
cd inotify-tools-3.14
在进行编译安装之前,可以查看README和INSTALL文档,了解一下编译和安装的一些细节问题。
编译和安装:
[[email protected]]# ./configure
[root@server1 inotify-tools-3.14]#make
[root@server1 inotify-tools-3.14]#make install
根据安装时的提示信息可以知道,该软件安装在/usr/local/bin/目录下,在该目录下会产生两个指令,如下所示:
[root@server1 bin]#pwd
/usr/local/bin
[root@server1 bin]#ll
total 92
-rwxr-xr-x 1 rootroot 47208 Feb 9 09:33 inotifywait
-rwxr-xr-x 1 rootroot 43562 Feb 9 09:33 inotifywatch
[root@server1 bin]#
inotifywait:用于等待文件或目录上的特定事件,可以监控任何一组文件或目录,或者是监控整个目录树(目录、子目录、子目录的子目录等)。在shell脚本中使用的是inotifywait。
inotifywatch:用于收集被监视的文件系统的统计数据,包括每个inotify时间发生多少次等信息。
inotify 可以监视的文件系统事件包括:
access,即文件被访问
modify,文件被 write,即被修改。
attrib,文件属性被修改,如 chmod、chown、touch 等
close_write,可写文件被 close
close_nowrite,不可写文件被 close
open,文件被 open
moved_from,文件被移走,如 mv
moved_to,文件被移来,如 mv、cp
create,创建新文件
delete,文件被删除,如 rm
delete_self,自删除,即一个可执行文件在执行时删除自己
move_self,自移动,即一个可执行文件在执行时移动自己
unmount,宿主文件系统被 umount
close,文件被关闭,等同于(CLOSE_WRITE | CLOSE_NOWRITE)
move,文件被移动,等同于(MOVED_FROM | MOVED_TO)
注:上面所说的文件也包括目录。
inotify定义了下列的接口参数,可以用来限制inotify消耗kernel memory的大小。由于这些参数都是内存参数,因此,可以根据应用需求,实时的调节其大小。下面分别做简单介绍。
/proc/sys/fs/inotify/max_queued_evnets
表示调用inotify_init时分配给inotify instance中可排队的event的数目的最大值,超出这个值的事件被丢弃,但会触发IN_Q_OVERFLOW事件。
/proc/sys/fs/inotify/max_user_instances
表示每一个real user ID可创建的inotify instatnces的数量上限。
/proc/sys/fs/inotify/max_user_watches
表示每个inotify instatnces可监控的最大目录数量。如果监控的文件数目巨大,需要根据情况,适当增加此值的大小,例如:
echo 30000000 > /proc/sys/fs/inotify/max_user_watches
inotifywait的格式如下:
inotifywait 选项监控的文件
如:
[root@server1 ~]#inotifywait -mrq -e create,delete,move /tmp
/tmp/ CREATE,ISDIRaa
/tmp/ DELETE,ISDIRaa
/tmp/ CREATE test
/tmp/ MOVED_FROMtest
/tmp/ MOVED_TO bb
对监视目录下所做的所有在监视事件内的动作都会被显示出来。
Inotifywait是一个监控等待事件,可以配合shell脚本使用它,下面介绍一下常用的一些参数:
-m,即--monitor,表示始终保持事件监听状态。
-r,即--recursive,表示递归查询目录。
-q,即--quiet,表示打印出监控事件。
-e,即--event,通过此参数可以指定要监控的事件,常见的事件有modify、delete、create、attrib等。
--exclude:不监视某个目录或文件。
--timefmt:指定时间格式,常用的为’%d/%m/%y%H:%M’
--format:用用户指定的格式输入,需要使用%T,常用的有:%w和%w
因此在―timefmt和―format时,常用的格式如下:
--timefmt ‘%d/%m/%y %H:%M’ �Cformat ‘%T%w%f’
更详细的请参看man inotifywait。
脚本内容如下:
[root@server1 opt]#more inotifyrsync.sh
#!/bin/bash
backupdir=/tmp
/usr/local/bin/inotifywait-mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -ecreate,delete,modify,move,attrib ${backupdir} | wh
ile read file
do
rsync -avz --delete --progress${backupdir} --password-file=/etc/rsyncd.secret [email protected]::backup
done
[root@server1 opt]#
Rsync客户端安装inotify,tmp目录没有任何内容:
[root@server1 tmp]#ll
total 0
[root@server1 tmp]#
服务器端的备份目录下的内容如下:
[root@serverbackup]# ll
total 0
[root@serverbackup]#
测试:在客户端的tmp目录下创建文件和目录,服务器端的备份目录下查看
客户端:
[root@server1 tmp]#touch aa
[root@server1 tmp]#cp /etc/services .
[root@server1 tmp]#mkdir bb
[root@server1 tmp]#ll
total 364
-rw-r--r-- 1 rootroot 0 Feb 9 11:03 aa
drwxr-xr-x 2 rootroot 4096 Feb 9 11:03 bb
-rw-r--r-- 1 rootroot 362031 Feb 9 11:03 services
[root@server1 tmp]#
服务器端:
[root@serverbackup]# ll
total 4
drwxrwxrwx. 5 rootroot 4096 Feb 9 11:03 tmp
[root@serverbackup]# cd tmp/
[root@server tmp]#ll
total 360
-rw-r--r--. 1 rootroot 0 Feb 9 11:03 aa
drwxr-xr-x. 2 rootroot 4096 Feb 9 11:03 bb
-rw-r--r--. 1 rootroot 362031 Feb 9 11:03 services
[root@server tmp]#pwd
/backup/tmp
[root@server tmp]#
OK……