rsync简介
rsync(remote sync)是一款数据镜像备份工具,支持本地复制和远程同步。它的基本用法与scp相似,但是它们的同步方式有所区别,rsync在同步之前会检查源目录和目标目录之间是否存在不同之处,如果有,仅复制不同的数据(目标目录中没有的文件),源目录和目标目录中都有的,则会通过提取文件的特征码进行比对(比较内容是否相同,scp会直接覆盖),内容不相同的则进行覆盖,内容相同的不进行同步。所以rsync的效率要比scp或cp高很多。
rsync的特点:
1、可以镜像保存整个目录树或文件系统;
2、较高的数据传输效率;
3、可以借助于ssh实现安全数据传输;
4、支持匿名传输;
rsync命令的常用选项:
-n #同步测试,不执行真正的同步过程;
-v #详细输出模式
-q #静默模式
-c #checksum,开启校验功能
-a #归档模式(类似-rlptgoD,-r递归复制 ,-l保留符号链接,-p保留文件的权限,-t保留文件的时间戳,-g保留属组,-o保留属主,-D保留设备文件),保留文件的原有属性;
-e ssh #使用ssh作为传输承载;
-z #压缩后传输;
--delete #删除目标目录中那些源目中录没有的文件
--exclude=pattern #不同步那些被pattern(正则表达式或文件名)匹配到的文件
--exclude-from=file #不同步那些被pattern匹配到的文件,将pattern写到file中,一行一个pattern
简单例子:
#将远程服务器端数据同步至本地 [root@www data]# rsync -azv --exclude-from=/tmp/pattern [email protected]:/data/* ./ #将本地文件同步至远程服务器端 [root@www data]# rsync -azv --exclude-from=/tmp/pattern ./ [email protected]:/data/*
rsync的服务模式
实验环境:
192.168.1.101 #rsync服务器
192.168.1.112 #部署inotify,将本机上指定目录下的文件实时同步至192.168.1.101
1)rsync服务有超级守护进程xinetd托管,要启动rsync服务要先启动xinetd。centOS上默认没有安装xinetd。
[root@www data]# yum install xinetd [root@www data]# chkconfig rsync on
2)修改/etc/xinetd.d/rsync配置文件,使xinetd能够启动rsync服务
[root@www data]# vim /etc/xinetd.d/rsync service rsync { disable = no #yes改为no .... ....
3)为rsync提供配置文件/etc/rsyncd.conf,配置文件默认没有。rsync仅提供了一个帮助文档,可根据帮助文档的信息编辑配置文件(man rsyncd.conf)。/etc/rsyncd.conf配置文件分为两段:全局配置段和共享配置端,共享配置端可存在多个。
[root@www data]# rpm -ql rsync /etc/xinetd.d/rsync /usr/bin/rsync ...... /usr/share/man/man5/rsyncd.conf.5.gz #帮助文档
/etc/rsyncd.conf配置文件示例:
# Global Setting uid = nobody #以哪个用户的身份运行rsync gid = nobody use chroot = false #关闭chroot max connections = 10 #最大并发连接数 strict modes = true #对secrets file文件的方式是否需要检查权限 pid file = /var/run/rsyncd.pid log file = /var/log/rsyncd.log # Directory to be synced [data] #共享名称 path = /data #共享目录路径 ignore errors = yes read only = false #是否允许上传 write only = false #是否允许下载 hosts allow = 192.168.0.0/16 #允许访问的地址 hosts deny = * #拒绝其他的主机 list = true #是否允许客户端列出目录 uid = root #运行rsync的用户(覆盖全局配置端) gid = root auth users = baby,James #允许访问的用户 secrets file = /etc/rsyncd.passwd #认证文件(存放用户名和密码)
auth users后面的用户名需要用逗号隔开,并且每个用户名都存在于/etc/rsyncd.passwd中。/etc/rsyncd.passwd格式:username:passwd,用户名密码均为明文。还有一点需要注意,/etc/rsyncd.passwd这个文件的权限必须是400或者600,否则同步无法完成。
4)修改权限,启动服务。
[root@www data]# chmod 600 /etc/rsyncd.passwd [root@www data]# service xinetd start Starting xinetd: [ OK ] [root@www data]# ss -tulnp | grep 873 tcp LISTEN 0 64 :::873 :::* users:(("xinetd",4515,5))
5)在客户端创建密码文件(该文件的权限也需要是600或者400)
[root@www ~]# touch /etc/rsync.passwd [root@www ~]# echo "passwd" > /etc/rsync.passwd
然后就可以对rsync服务器共享的目录进行数据的拉取和推送。
远程服务器的书写格式有两种:
(1)[USER@]HOST::SRC #SRC为共享名称
(2)rsync://[USER@]HOST[:PORT]/SRC
#查看服务器端共享的目录 [root@www tmp]# rsync --list-only 192.168.1.101:: data #数据的推送 [root@www tmp]# rsync -avz --password-file=/etc/rsync.passwd /data/ [email protected]::data sending incremental file list ........ #数据的拉取 [root@www data]# rsync -avz --password-file=/etc/rsync.passwd [email protected]::data /data/ receiving incremental file list ........
inotify的使用
innotify是Linux的内核特性,Linux内核从2.6.13版本之后引入该特性。 inotify可以实现跟踪Linux文件系统的变化(新建文件,删除..,修改..,移动等事件)。innotify有两个命令inotifywait,inotifywatch。inotifywait用来监控文件系统的变化,inotifywatch用来监控文件系统的访问次数。通过inotifywait来监控文件系统,在文件系统发生变化时调用rsync将变化后的数据推送至远程主机可实现数据的实时同步。
(在192.168.1.112上进行)
1)查看内核是否支持inotify特性
[root@www data]# grep INOTIFY_USER /boot/config-$(uname -r) CONFIG_INOTIFY_USER=y #既支持该特性
2)源码安装inotify-tools-3.14
[root@www ~]# tar xf inotify-tools-3.14.tar.gz [root@www inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify-tools ..... [root@www inotify-tools-3.14]# make && make install
3)编辑脚本文件
#!/bin/sh SRC=/data/ MODULE=data [email protected] COMMAND=/usr/local/inotify-tools/bin/inotifywait $COMMAND -mrq --timefmt '%y-%m-%d %H:%M' --format '%T %w %f %e' -e create,delete,move,modify $SRC|while read files do rsync -az --password-file=/etc/rsync.passwd --delete $SRC $HOST::$MODULE &> /dev/null done
#inotifywait参数:
-m #表示始终保持事件监听状态
-r #监控所有的子目录
-q #quite
-e #指定要监控的事件,包括modify、delete、create、attrib等
--timefmt #指定时间的输出格式
--format #指定命令执行时的信息输出格式,%T为前面的时间格式
4)编辑完成之后添加执行权限,运行,测试。(在192.168.1.101端需要将rsync服务开启)
[root@www sbin]# chmod +x rsync.sh [root@www sbin]# bash -x rsync.sh .........
复制一个文件至/data目录下
[root@www data]# ll total 12 ...... -rw-r--r-- 1 root root 1375 Jul 14 18:12 passwd
192.168.0.101的/data目录下已存在对应文件,同步完成!!!
在/etc/rc.local中添加/usr/local/inotify-tools/sbin/rsync.sh &,设置成开机自动启动。
.................^_^