rsync同步文件
rsync,remote synchronize 一款优秀的文件同步软件,最初是用来替换rcp的,相比rcp,rsync还具有一些更吸引人的特性,如支持链接复制、保持文件属主权限、支持SSH等,rsync通过一种高效的算法检测哪些文件有更新,只传输已更新的数据,大大降低了系统IO和传输带宽。
目前大多数linux发行版本都已安装了rsync,如果没有安装,可以去官方网站下载最新版本编译安装
为便于理解,可将rsync为c/s结构,分为发送端(服务端)和接收端(客户端),由客户端发送同步请求,服务端检查客户端权限信息,认证通过后开始处理客户端请求。
发送端配置
Redhat系发发行版的rsync一般用xinet来运行,默认rsync服务是没有启用的,将服务改成自动启动
#chkconfig rsync on
或编辑/etc/xinet.d/rsync文件,将disable项值改成’no’
service rsync
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = –daemon
log_on_failure += USERID
}
编辑配置文件/etc/rsyncd.conf
uid = username
gid = grpname
max connections = 2
use chroot = no
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
secrets file = /etc/rsyncd.secret[modules-1]
path = /home/somepath1
comment = some comment
ignore errors
read only = no
list = no
auth users = user1[modules-2]
……
rsync默认监听tcp 873端口,可用port配置项来更改服务端口,其配置文件一般可分为全局区和模块区,全局区对整个daemon有效,模块区细分至每个传输模块
[module_name]:模块名称指定,客户端请求时可指定模块名
uid:当服务程序以root身份运行时文件的属主,结合gid决定了文件权限,默认的uid和gid都是-2,即nobody
max connections: 请求端的最大并发连接数量
use chroot: 默认为true,rsync daemon在响应请求端文件传输请求前先chroot至指定目录
log file:日志文件
pid file:进程id文件
lock file:与max conncetions有关
path:指定本模块传输目录
comment:注释
read only:决定请求端能否上传文件,默认true
list:指示本模块是否响应请求端的list请求,决定是否隐藏模块
auth users:指定chap用户名,多个可用逗号空格分隔,这里的用户可以不是系统用户,rsync默认不作用户验证,密码文件由secrets file指定,这个文件必须是只有root可读写
由于配置了用户认证,这里还得生成一个密码文件(由secrets file指定),vi /etc/rsyncd.secrets 加入用户密码,格式如下
user1:userpass1
user2:userpass2
启动rsync服务 /etc/init.d/xined restart
接收端
接收端只需要执行同步命令就可以了,对于配置了认证的服务端还需要发送用户名密码,常用命令如下:
export RSYNC_PASSWORD=userpass1
rsync -a –delete rsync://user1@rsync_server/module_1 /home/mypath1
export RSYNC_PASSWORD=userpass2
rsync -a –delete rsync://user1@rsync_server/module_2 /home/mypath2
其中-a是linux版本rsync特有选项,相当于-rlptgoD,recursively,symlink复制,permission保留,时间戳保留,属主、组信息保留,重建设备文件和特殊文–devices –special
–delete 是删除接收端的文件,这些文件在发送端不存在
user1为服务端配置的模块module_1的认证用户名,密码在环境变量RSYNC_PASSWORD中读取,/home/mypath1这个是发送端指定模块同步到接收端后的存放目录,可以是不存在的,rsync会自动建立
rsync配置比较简单,其它选项可参考man 5 rsyncd.conf,实际应用中rsync多与crontab结合,以实现定时自动同步,实现效果与商业备份软件差不多