|
rsync简介
rsync(remote sync)是一款数据镜像备份工具,支持本地复制和远程同步。它的基本用法与scp相似,但是它们的同步方式有所区别,rsync在同步之前会检查源目录和目标目录之间是否存在不同之处,如果有,仅复制不同的数据(目标目录中没有的文件),源目录和目标目录中都有的,则会通过提取文件的特征码进行比对(比较内容是否相同,scp会直接覆盖),内容不相同的则进行覆盖,内容相同的不进行同步。所以rsync的效率要比scp或cp高很多。
rsync的特点:
1、可以镜像保存整个目录树或文件系统;
2、较高的数据传输效率;
3、可以借助于ssh实现安全数据传输;
4、支持匿名传输;
rsync命令的常用选项:
-n #同步测试,不执行真正的同步过程;
-v #详细输出模式
-q #静默模式
-c #checksum,开启校验功能
-r #递归复制
-a #归档(类似-ptlog),保留文件的原有属性;
-e ssh #使用ssh作为传输承载;
-z #压缩后传输;
--delete #删除目标目录中那些源目中录没有的文件
--exclude=pattern #不同步那些被pattern(正则表达式或文件名)匹配到的文件
--exclude-from=file #不同步那些被pattern匹配到的文件,将pattern写到file中,一行一个pattern
简单例子:
1
2
3
4
| #将远程服务器端数据同步至本地
[iyunv@www data]# rsync -azv --exclude-from=/tmp/pattern root@192.168.1.101:/data/* ./
#将本地文件同步至远程服务器端
[iyunv@www data]# rsync -azv --exclude-from=/tmp/pattern ./ root@192.168.1.101:/data/*
|
rsync的服务模式
实验环境:
192.168.1.101 #rsync服务器
192.168.1.112 #部署inotify,将本机上指定目录下的文件实时同步至192.168.1.101
1)rsync服务有超级守护进程xinetd托管,要启动rsync服务要先启动xinetd。centOS上默认没有安装xinetd。
1
2
| [iyunv@www data]# yum install xinetd
[iyunv@www data]# chkconfig rsync on
|
2)修改/etc/xinetd.d/rsync配置文件,使xinetd能够启动rsync服务
1
2
3
4
5
6
| [iyunv@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配置文件分为两段:全局配置段和共享配置端,共享配置端可存在多个。
1
2
3
4
5
| [iyunv@www data]# rpm -ql rsync
/etc/xinetd.d/rsync
/usr/bin/rsync
......
/usr/share/man/man5/rsyncd.conf.5.gz #帮助文档
|
/etc/rsyncd.conf配置文件示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| # 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)修改权限,启动服务。
1
2
3
4
5
| [iyunv@www data]# chmod 600 /etc/rsyncd.passwd
[iyunv@www data]# service xinetd start
Starting xinetd: [ OK ]
[iyunv@www data]# ss -tulnp | grep 873
tcp LISTEN 0 64 :::873 :::* users:(("xinetd",4515,5))
|
5)在客户端创建密码文件(该文件的权限也需要是600或者400)
1
2
| [iyunv@www ~]# touch /etc/rsync.passwd
[iyunv@www ~]# echo "passwd" > /etc/rsync.passwd
|
然后就可以对rsync服务器共享的目录进行数据的拉取和推送。
远程服务器的书写格式有两种:
(1)[USER@]HOST::SRC #SRC为共享名称
(2)rsync://[USER@]HOST[:PORT]/SRC
1
2
3
4
5
6
7
8
9
10
11
| #查看服务器端共享的目录
[iyunv@www tmp]# rsync --list-only 192.168.1.101::
data
#数据的推送
[iyunv@www tmp]# rsync -avz --password-file=/etc/rsync.passwd /data/ baby@192.168.1.101::data
sending incremental file list
........
#数据的拉取
[iyunv@www data]# rsync -avz --password-file=/etc/rsync.passwd baby@192.168.1.101::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特性
1
2
| [iyunv@www data]# grep INOTIFY_USER /boot/config-$(uname -r)
CONFIG_INOTIFY_USER=y #既支持该特性
|
2)源码安装inotify-tools-3.14
1
2
3
4
| [iyunv@www ~]# tar xf inotify-tools-3.14.tar.gz
[iyunv@www inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify-tools
.....
[iyunv@www inotify-tools-3.14]# make && make install
|
3)编辑脚本文件
1
2
3
4
5
6
7
8
9
| #!/bin/sh
SRC=/data/
MODULE=data
HOST=baby@192.168.1.101
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服务开启)
1
2
3
| [iyunv@www sbin]# chmod +x rsync.sh
[iyunv@www sbin]# bash -x rsync.sh
.........
|
复制一个文件至/data目录下
1
2
3
4
| [iyunv@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 &,设置成开机自动启动。
|
|