Rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的工具。使用该工具可以远程备份数据,同时也可以用来传输数据。在linux系统的centos6和7版本默认已经安装rsync,若没有安装则可以使用
yum install rsync
安装即可。

rsync一共有三种模式,本地模式、远程shell模式和守护进程模式。

1、本地模式
在本地模式下,就和cp类似,在本地进行复制。
rsync ./a.txt /home/
上述命令会把当前路径下的a.txt文件复制到/home/文件夹下。

2、远程shell模式
该模式借助于ssh隧道传输,和scp类似,在认证时也是使用ssh协议认证,不需要启动rsync的守护进程,只需要远程机器的用户名和密码就可以传输文件,同时只需要确保被请求方22端口是通的即可,请求方会用一个随机端口进行请求。

rsync 拷贝数据 乱码 rsync本地拷贝_rsync 拷贝数据 乱码

rsync [源端路径] [目标端路径]
如果源端路径是远程机器,可把远程机器上的数据复制到本地;如果源端路径是本地路径,可以把本地数据发送到远程机器。在这种模式下进行传输时,可以自动检查两端的文件内容,进行比对,如发现有新增的文件,就只会传输新增的文件,如发现有减少文件,会去删除目标端相应的文件。

3、守护进程模式
该模式是基于CS架构,对服务端数据进行备份使用的,需要配置服务端并启动守护进程,同时使用rsync认证协议,默认开启873端口,并使用客户端去请求数据进行备份。该模式对于迁移不是必要的。

迁移场景:
现在有一个系统为centos7.2的源端主机(名字:wz-rsync),其中有一个receive文件夹,文件夹下有一个test文件夹和一个11.txt文件,在test文件夹下有压缩包、若干文件(包括大文件)和一个包含大量小文件的前端开发相关文件夹,需要将这些数据迁移到某一centos7.2系统目标主机(名字:node2)。

rsync 拷贝数据 乱码 rsync本地拷贝_linux_02

迁移过程:
源端主机需要在安全组对目标端开放22端口。

(此步为建议但非必要步骤)
为避免在使用rsync命令时重复输入密码,先配置免密登录。

rsync 拷贝数据 乱码 rsync本地拷贝_数据_03

在目标端使用ssh-keygen命令,连按三次回车生成秘钥文件

rsync 拷贝数据 乱码 rsync本地拷贝_linux_04

使用ssh-copy-id root@[源端地址]命令将秘钥传到源端,并输入密码,即可免密登录。

迁移分为全量迁移和增量迁移,对于这两种迁移都统一使用rsync命令。

全量迁移:
在目标端建立一个一样的receive文件夹
使用 rsync -avz --bwlimit=2000 root@[源端地址]:/receive/ /receive/ 命令将全量文件拷贝到目标端,若设置了免密登录,这一步就无需输入源端主机的登录密码。

rsync 拷贝数据 乱码 rsync本地拷贝_数据_05

模拟增量:
模拟生产环境的变化,新增一个2.txt,删除testfile1文件,给1.txt写入一些数据。

rsync 拷贝数据 乱码 rsync本地拷贝_运维_06

增量迁移:
停止写入1.txt,模拟业务停止。
使用 rsync -avz --delete --bwlimit=2000 root@[源端地址]:/receive/ /receive/ 命令,加上一个--delete参数,会自动对比两边的变化,并传输新增文件和删除减少的文件。

rsync 拷贝数据 乱码 rsync本地拷贝_服务器_07

可以看到该命令第二次使用只传输了1.txt(此文件模拟了日志写入,同理修改文件名也会被当作新文件重新传输和删除),并在目标端删除了testfile1文件,至此便使用rsync命令完成了全增量数据的迁移。
若文件较多,可以多次使用该命令不停地同步文件,在割接时最后使用一次即可完成最后的同步,同步后进行一致性检验。
注意点:
在用rsync写文件目录时,源端路径最后的文件夹结尾加上“/”会复制该文件夹下的文件,不会在目标端建立该文件夹,不加“/”就会在目标端建立该文件夹,目标端文件夹如果一开始不存在,就会自动建立;
谨慎使用--delete,如果目标端是绝对路径“/”,仔细思考一下会发生什么。

附:rsync命令常用参数表
-v,--verbose #详细模式输出,传输是的进度信息
-z,--compress #传输是进行压缩以提高传输效率,--comperess -level = NUM可以按级别压缩
-a,--archive  #归档模式,表示以递归方式传输文件,并保持所有文件属性(等于-rtopgDl)
-r,--recursive  #对子目录以递归模式,即目录下的所有目录都同样输出
-t,--times  #保持文件时间信息
-o,--owner  #保持文件属性信息
-p,--perms  #保持文件权限
-g,--group  #保持文件属组信息
-P,--progress  #显示同步的过程及传输时的进度等信息
-D,--devices  #保持设备文件信息
-l,--links  #保留软连接
--exclude    #排除不需要传输的文件
--version  #查看版本信息
--bwlimit  #设置限速,单位为KB【rsync、scp、ftp都有限速设置】
--delete  #比较两目录保留相同的删除不同的!(谨慎使用)