Rsync简介
- Rsync是一款开源的快速的、可实现全量及增量的本地或远程数据备份的多功能工具.并且在复制时可以不改变原油数据的属性信息,即可实现数据的备份迁移特性.
- Rsync提供了大量参数来控制复制行为的各个方面,并且允许多种灵活的方式来实现文件的传输复制.以其delta-transfer算法闻名.通过减少网络数据发送数量,只发送源文件和目标文件之间的差异信息.从而实现数据的增量复制
Rsync功能
- Rsync全称Remote synchronization,Rsync可使本地和远程两台主机之间的数据快速复制、远程备份功能,Rsync软件自带的rsync命令本身就可以实现异地主机复制数据,这个功能类似于scp命令(借助SSH服务实现远程传输数据),但又优于scp命令的功能,scp每次都是全量拷贝,而rsync可以增量拷贝(通用需借助于SSH服务传输数据),此外,Rsync软件还支持以配置守护进程方式实现异机数据复制
- 除了远程复制传输数据外,Rsync还可以在本地主机的不同分区或者目录之间全量及增量复制数据,类似于cp命令,但由于cp命令,cp命令每次都是全量拷贝,而Rsync还可以增量拷贝
- rsync还可作为删除和查看命令被应用,在某种情况下类似于传统的mv和ls命令
- rsync命令可实现的功能
- 实现本地数据同步复制(本地工作模式,相当于cp)
- 实现远程数据同步复制(远程Shell工作模式,相当于scp)
- 实现数据信息删除功能(本地工作模式,相当于rm)
- 实现数据信息查看功能(本地或远程工作模式,相当于ls)
Rsync软件特性
- 支持拷贝普通文件与特殊文件,如链接文件、设备文件等
- 支持排除指定文件或目录同步功能,相当于打包命令tar的排除功能
- 可以做到保持源文件或目录的权限、时间、软硬链接、属主、属组等所有属性不改变
- 可实现增量复制,即只复制发送变化的数据,因此数据传输效率很高
- 可以使用rcp、rsh、SSH等方式来配合进行隧道加密传输文件(Rsync本身不对数据加密)
- 可以通过socket(进程方式)传输文件和数据(服务端和客户端)
- 支持匿名或认证(无须系统用户)进程模式传输,安全地进行数据备份及镜像
Rsync软件复制原理
- 默认情况下,在备份复制数据时,Rsync通过其独特的quick check算法,仅复制大小或者最后修改时间发生变化的文件或目录,当然也可以根据权限、属主等属性的变化复制,需指定响应的参数,甚至实现只复制一个文件里有变化的部分内容,所以可以实现快速地备份复制数据,即采用增量复制方法对数据信息进行复制,与传统cp、scp复制工具的全量复制截然不同,增量复制数据在效率上渊源高于全量复制
- Rsync3.x版本增量复制原理是一边比对差异,一遍对差异的数据部分进行复制
Rsync工作方式
- 本地(local)数据传输模式
- Rsync的本地传输模式,类似于cp复制命令,可以实现文件、目录的移动备份等功能,所不同的是Rsync具有增量复制的功能
- 远程shell传输模式
- 远程Shell数据传输模式一般是借助通道(如SSH)在两台服务器之间进行复制数据,这两台服务器是对等的,没有客户端与服务端之分,整个过程类似于scp远程复制命令,所不同的是Rsync有增量复制的功能,但缺少scp的加密复制功能
- 守护进程(daemon)传输模式
- 守护进程传输模式是在客户端与服务端之间进行数据复制的,通常需要服务端部署守护进程服务,然后在客户端执行命令,实现数据的拉取和推送复制
本地数据传输模式
rsync命令 | [OPTION...] | SRC... | [DEST] |
---|---|---|---|
rsync命令 | 参数选项 | 源目录或文件 | 目的目录或文件 |
# 复制
rsync file1 /tmp # 复制文件到/tmp目录
rsync -r /opt/null /tmp # 复制目录到/tmp,需加-r参数
# 删除/清空
# 利用rsync清空文件内容
touch file1 file2
echo '111' > file1
rsync -r --delete file2 file1
mkdir -p /opt/null # 创建一个空目录
rsync -r /opt/null /tmp # 清空tmp下所有内容
# 查询
rsync /etc # 目录信息
drwxr-xr-x 8,192 2020/04/12 03:32:45 etc
rsync /etc/hosts # 文件信息
-rw-r--r-- 394 2020/04/11 04:22:05 hosts
- 注意在使用rsync命令对目录数据进行本地或远程复制时,目录名称后面是否加'/'产生的复制效果是不一样的.目录后面不加'/',会将/test目录及目录下面的文件内容一并复制到tmp目录中;如果目录后面加了'/',会将/test目录下的文件内容复制到tmp目录,但test目录本身没有被复制
远程shell传输模式
-
远程Shell数据传输模式语法
- 远程Shell数据传输模式分为拉取和推送两种模式,拉取是指从远端服务器把数据拉取到本地服务区,推送是指把数据从本地服务器推送到远端服务器
- (1)拉取
rsync命令 [OPTION...] [user@]HOST:SRC DEST... rsync 参数选项 [用户]@[主机地址]:[源路径] 本地路径 - (2)推送
rsync命令 [OPTION...] SRC... [user@]HOST:DEST rsync 参数选项 本地路径 [用户]@[主机地址]:[目的路径] -
实践
- 拉取
rsync -av -e 'ssh -p 22' root@10.0.0.204:/etc/hosts /test # a:--archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD # v:--verbose 详细模式输出 # e:指定数据传输方式为ssh隧道加密传输,如果ssh端口默认是22,则-e 'ssh -p 22'可以省略
- 拉取
rsync -av file1 root@10.0.0.204:/tmp
- 注意:
- 采用远程Shell数据传输模式,每次都需要输入远程主机密码信息,无法实现免交互;因此需要配合SSH key免密码来完成数据免交互同步
- 该复制使用系统用户进行存在安全隐患,而使用普通用户又会导致权限不足
- 守护进程传输时更重要的方式