Inotify+Rsync备份系统的搭建

概述

是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限,时间,硬链接等附加信息,但是却无法进行文件的实时同步更新。而是linux内核提供的特性,可以实时监控系统内文件的变化,并且及时的向专门的应用程序发出相应的事件警告,比如删除,读,写和卸载操作,所以我们结合两者的特性,可以搭建实时的同步系统,用于备份及服务器间目录的同步

安装Rsync

四种模式

1:本地shell模式

本地shell模式主要用于将一个目录复制到另一个目录,例如:

rsync -av source_path destination_path(复制目录到指定目录)
rsync -av source_path/ destination_path(复制目录下的文件到指定目录)

2:远程shell模式

rsync -av source_path destination_host:/path(复制本地指定目录到另一个系统)

3:列表模式

rsync -a destination_host:/path(列出目录详细)

4:服务器模式(基于C/S模式)

此模式下,rsync以后台守护进程运行,这个进程在服务器端永久运行,用于接收客户端的文件传输请求

安装inotify

inotify是linux内核提供的强大的,细粒度的,异步的文件系统监控机制,从2.6.13版本起,加入了对其的支持。通过Inotify接口可以监控文件系统中添加,删除,修改,移除等各种细微变化。

yum install inotify-tools

安装完成后,会产生两个指令,inotifywait和inotifywatch,其中inotifywait用于等待文件或者特定文件集上的一个特定事件,可以监控任何文件或者目录.并且可以递归监控整个目录树,inotifywatch主要用于收集被监控的文件系统统计数据,包括每个inotify事件的发生次数

内核接口参数

/proc/sys/fs/inotify/max_queued_events
调用inotify_init时,分配到inotify_instance中可排队的event数的最大值
/proc/sys/fs/inotify/max_user_instances
每一个real user ID可创建的inotify instances数量上限
/proc/sys/fs/inotify/max_user_watches
每个inotify实例可监控的最大目录数量

inotifywait相关参数

-m: 表示始终保持事件监听状态
-r: 表示递归查询目录
-q: 表示打印出监控事件
-e: 制定要监控的事件,常见有modify,delete,create和attrib等

实际应用(配合shell脚本使用)

实例脚本

redundancy_dir=/data/redundancy

inotify_fun(){
    /usr/bin/inotifywait -mr --timefmt '%Y/%m/%d-%H:%M:%S' --format '%T %w %f %e' -e close_write,delete,create,move $1  | while read DATA DIR FILE MODE
      do
          FILECHANGE=${DIR}${FILE}
          /usr/bin/rsync -a --delete $1 $redundancy_dir
          echo "At ${DATA}, file $FILECHANGE was $MODE backed up via rsync" >> /var/log/rsync
      done
}

#inotify_fun /data/backup
inotify_fun /data/manage_company

上述脚本利用inotify和rsync实时监控指定目录文件变化,然后同步到相对应的同步目录(本例是在本地上运行,同步到不同的磁盘中)

1:监控文件变化的时候,对文件的更改可以监控close_wait事件,可以避免写入大文件时,inotify会持续的输出更新信息,进而触发rsync不断执行更新操作,占用大量系统资源。
2:上例中--delete选择是为了保持两边目录的一致,删除源目录不存在的文件

阿里云服务器大优惠,最高2000元云产品通用代金券,赶紧来拿

你可能感兴趣的:(Inotify+Rsync备份系统的搭建)