一、概念
Rsync(remote sync)是UNIX 及类UNIX 平台下一款神奇的数据镜像备份软件,它不像FTP 或其他文件传输服务那样需要进行全备份,Rsync 可以根据数据的变化进行差异备份,从而减少数据流量,提高工作效率。你可以使用它进行本地数据或远程数据的复制,Rsync 可以使用SSH 安全隧道进行加密数据传输。Rsync 服务器端定义源数据,Rsync 客户端仅在源数据发生改变后才会从服务器上实际复制数据至本地,如果源数据在服务器端被删除,则客户端数据也会被删除,以确保主机之间的数据是同步的。Rsync 使用TCP 873端口。
- rsync功能
- 作为命令,实现本地-远程文件同步
- 作为服务,实现本地-远程文件同步
- rsync特点
- 可以镜像保存整个目录树和文件系统
- 可以保留原有的权限(permission,mode),owner,group,时间(修改时间,modify time),软硬链接,文件acl,文件属性(attributes)信息等
- 传输效率高,使用同步算法,只比较变化的
- 支持匿名传输,方便网站镜像;也可以做验证,加强安全
- rsync同类服务
- sync 同步:刷新文件系统缓存,强制将修改过的数据块写入磁盘,并且更新超级块。
- async 异步:将数据先放到缓冲区,再周期性(一般是30s)的去同步到磁盘。
- rsync 远程同步:remote synchronous
二、安装
使用CentOS 7 系统安装部署Rsync 非常方便,安装光盘以及YUM 源中都提供了rsync
软件包,使用YUM 方式安装即可。
[root@centos7 ~]# yum -y install rsync
[root@centos7 ~]# vim /etc/rsync.conf
三、配置文件详解
#/etc/rsyncd.conf
#设置服务器信息提示文件名称,在该文件中编写提示信息
motd file = /etc/rsyncd.motd
#开启Rsync 数据传输日志功能
transfer logging = yes
#设置日志文件名称,可以通过log format 参数设置日志格式
log file =/var/log/rsyncd.log
#设置Rsync 进程号保存文件名称
pid file =/var/run/rsyncd.pid
#设置锁文件名称
lock file =/var/run/rsync.lock
#设置服务器监听的端口号,默认为873
port = 873
#设置服务器所监听网卡接口的IP 地址,这里服务器IP 地址为192.168.0.254
address = 192.168.0.254
#设置进行数据传输时所使用的账户名称或ID 号,默认使用nobody
uid = nobody
#设置进行数据传输时所使用的组名称或GID 号,默认使用nobody
gid = nobody
#设置user chroot 为yes 后,rsync 会首先进行chroot 设置,将根映射到path
参数路径下,对客户
#端而言,系统的根就是path 参数所指定的路径。但这样做需要root 权限,并
且在同步符号
#连接资料时仅会同步名称,而内容将不会同步。
use chroot = no
#是否允许客户端上传数据,这里设置为只读。
read only = yes
#设置并发连接数,0 代表无限制。超出并发数后,如果依然有客户端连接请
求,则将会收
#到稍后重试的提示消息
max connections = 10
#模块,Rsync 通过模块定义同步的目录,模块以[name]的形式定义,这与Samba
定义共
#享目录是一样的效果。在Rsync 中也可以定义多个模块
[common]
#comment 定义注释说明字串
comment = Web content
#同步目录的真实路径通过path 指定
path = /common
#忽略一些IO 错误
ignore errors
#exclude 可以指定例外的目录,即将common 目录下的某个目录设置为不同步
数据
#exclude = test/
四、rsync三种工作方式
4.1、本地文件系统上实现同步。命令行语法格式为上述"Local"段的格式。
Local: rsync [OPTION...] SRC... [DEST]
4.2、本地主机使用远程shell和远程主机通信。命令行语法格式为上述"Access via remote shell"段的格式。
Access via remote shell:
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
4.3、本地主机通过网络套接字连接远程主机上的rsync daemon。命令行语法格式为上述"Access via rsync daemon"段的格式。
Access via rsync daemon:
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
前两者的本质是通过管道通信,即使是远程shell。而方式(3)则是让远程主机上运行rsync服务,使其监听在一个端口上,等待客户端的连接。
但是,通过远程shell也能临时启动一个rsync daemon,这不同于方式(3),它不要求远程主机上事先启动rsync服务,而是临时派生出rsync daemon,它是单用途的一次性daemon,仅用于临时读取daemon的配置文件,当此次rsync同步完成,远程shell启动的rsync daemon进程也会自动消逝。此通信方式的命令行语法格式同"Access via rsync daemon",但要求options部分必须明确指定"--rsh"选项或其短选项"-e"。
五、常用参数
由于rsync支持一百多个选项,所以此处只介绍几个常用选项
-a 包含-rtplgoD
-r 同步目录时要加上,类似cp时的-r选项
-v 同步时显示一些信息,让我们知道同步的过程
-l 保留软连接
-L 加上该选项后,同步软链接时会把源文件给同步
-p 保持文件的权限属性
-o 保持文件的属主
-g 保持文件的属组
-D 保持设备文件信息
-t 保持文件的时间属性
--delete 删除DEST中SRC没有的文件
--exclude 过滤指定文件,如--exclude “logs”会把文件名包含logs的文件或者目录过滤掉,不同步
-P 显示同步过程,比如速率,比-v更加详细
-u 加上该选项后,如果DEST中的文件比SRC新,则不同步
-z 传输时压缩
六、示列
6.1、本地传输
[root@ansible-server /]# rsync /tmp/ /home/ #将/tmp下所有文件传输到/home下
[root@ansible-server /]# rsync /tmp /home/ #将/tmp下所有文件包含文件夹tmp传输到/home下
#使用rsync一定要注意的一点是,源路径如果是一个目录的话,带上尾随斜线和不带尾随斜线是不一样的,不带尾随斜线表示的是整个目录包括目录本身,带上尾随斜线表示的是目录中的文件,不包括目录本身。
6.2、从服务器到本地
[root@ansible-server /]# rsync -r 172.16.3.40:/tmp /tmp #将远程服务器172.16.3.40上的/tmp目录传输到本地服务器/tmp路径下
6.3、从本地到远程服务器
[root@ansible-server /]# rsync -r /tmp 172.16.3.40:/tmp # 将本地/tmp目录拷贝到远程主机172.16.3.40的/tmp下,以保证远程/tmp目录和本地/etc保持同步