Rsync 软件
rsync是什么
rsync 全称remote synchronize,即"远程同步",是Liunx/Unix下的一个远程数据同步工具。它可通过LAN/WAN快速同步多台主机间的文件和目录,并适当利用rsync算法(差分编码)以减少数据的传输。
rsync 的优缺点与适用场景?
1. 优点
(1)可以镜像保存整个目录树和文件系统。
(2)可以很容易做到保持原来文件的权限、时间、软硬链接等等。
(3)无须特殊权限即可安装。
(4)快速:第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件。rsync 在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽。
(5)安全:可以使用scp、ssh等方式来传输文件,当然也可以通过直接的socket连接。
(6)支持匿名传输,以方便进行网站镜像。
(7)跨平台:可在不同操作系统之间同步数据。
2. 缺点
(1)客户端需要对多个文件数据块进行多次计算与比较验证码,对 CPU 的消耗比较大;服务端需要根据原文件和客户端传送过来的差异数据进行文件内容重组,对 IO 的消耗比较大。
(2)rsync 每次同步都需要先进行所有文件的扫描和计算、对比,最后才能进行差量传输。如果文件数量达到了百万甚至千万量级,扫描所有文件将是非常耗时的。而且如果改动的只是其中很小的一部分,这就是非常低效的方式。
(3)rsync 不能实时的去监测、同步数据,虽然它可以通过 crontab 守护进程的方式进行触发同步,但是两次触发动作一定会有时间差,这样就导致了服务端和客户端数据可能出现不一致,无法在应用故障时完全的恢复数据(无法实现实时同步),而且繁忙的轮询会消耗大量的资源。
3. 适用场景
由 rsync 工作原理可知,需要同步的文件改动越频繁,则客户端需要计算和比较的数据块验证码就越多(遇到数据块内容不相同时,只能跳过一个字节继续往后计算与比较,相同则可跳过一个数据块),对 CPU 的消耗就会越大;需要同步的文件越大,服务端每次都需要从一个很大的文件中复制相同的数据块进行新文件重组,几乎相当于直接 cp 了一个大文件,对 IO 的消耗也就越大。
所以 rsync 适合对改动不频繁、大小比较小的文件进行同步,对于改动频繁的大文件,只能偶尔同步一次,相当于备份的功能,而不是同步。
安装Rsync
# yum install rsync -y
目录同步
目录之间进行同步步骤: 1、后台运行第一次全量同步 //表示将data01目录下的所有内容,复制到data02目录下,并将结果输入log.txt: // 使用-a选项,就表明你希望采取递归方式来同步,且尽可能的保持各个方面的一致性。 // -a 等同于-rlptgoD这7个选项.r,递归模式,l,保持软链接,p,保持文件权限,t,保持文件时间信息,g,保持文件属组信息,o,保持文件属主信息,D,保持设备文件信息 //u,--update 仅仅进行更新,也就是跳过所有已经存在于 DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件) //H,--hard-links 保留硬链结,-a无法同步“硬链接”情况。如果有这方面需求,要加上-H选项。 //注意 /data01/ ,必须有“/”,表示复制data01下的内容 # nohup rsync -auvH /data01/ /data02/ > log1.txt 2>&1 2、后台运行增量同步 //--delete 删除那些 DST 中 SRC 没有的文件 # nohup rsync -auvH --delete /data01/ /data02/ > log2.txt 2>&1
基本使用
(1)本地复制 将本地目录 /var/rsync-src/ 下的文件同步至本地目录 /var/rsync-dest/ # rsync -r /var/rsync-src/ /var/rsync-dest/
(2)将本地数据同步到远程(push) 将本地目录 /var/rsync-src/ 下的文件同步至远程主机 10.101.11.11 目录 /var/rsync-dest/ # rsync -r /var/rsync-src/ username@10.101.11.11:/var/rsync-dest/
(3)将远程数据同步到本地(pull) 将远程主机 10.101.11.11 目录 /var/rsync-dest/ 下的文件同步至本地目录 /var/rsync-dest/ # rsync -r username@10.101.11.11:/var/rsync-dest/ /var/rsync-dest/
常用参数
-v verbose 详细输出 -a 归档模式,递归方式传输文件,并保持连接,权限,用户和组,时间信息;
等于-rlptgoD, r,递归模式,l,保持软链接,p,保持文件权限,t,保持文件时间信息,g,保持文件属组信息,o,保持文件属主信息,D,保持设备文件信息 -z 压缩文件传输 -h human-readable, 输出友好 -u 跳过已经存在的文件,备份更新
详细参数
-v, --verbose 详细模式输出 -q, --quiet 精简输出模式 -c, --checksum 打开校验开关,强制对文件传输进行校验 -a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于 -rlptgoD -r, --recursive 对子目录以递归模式处理 -R, --relative 使用相对路径信息 -b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用 --suffix 选项来指定不同的备份文件前缀。 --backup-dir 将备份文件(如~filename) 存放在在目录下。 -suffix=SUFFIX 定义备份文件前缀 -u, --update 仅仅进行更新,也就是跳过所有已经存在于 DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件) -l, --links 保留软链结 -L, --copy-links 想对待常规文件一样处理软链结 --copy-unsafe-links 仅仅拷贝指向 SRC 路径目录树以外的链结 --safe-links 忽略指向 SRC 路径目录树以外的链结 -H, --hard-links 保留硬链结 -p, --perms 保持文件权限 -o, --owner 保持文件属主信息 -g, --group 保持文件属组信息 -D, --devices 保持设备文件信息 -t, --times 保持文件时间信息 -S, --sparse 对稀疏文件进行特殊处理以节省 DST 的空间 -n, --dry-run 现实哪些文件将被传输 -W, --whole-file 拷贝文件,不进行增量检测 -x, --one-file-system 不要跨越文件系统边界 -B, --block-size=SIZE 检验算法使用的块尺寸,默认是 700 字节 -e, --rsh=COMMAND 指定使用 rsh、ssh 方式进行数据同步 --rsync-path=PATH 指定远程服务器上的 rsync 命令所在路径信息 -C, --cvs-exclude 使用和 CVS 一样的方法自动忽略文件,用来排除那些不希望传输的文件 --existing 仅仅更新那些已经存在于 DST 的文件,而不备份那些新创建的文件 --delete 删除那些 DST 中 SRC 没有的文件 --delete-excluded 同样删除接收端那些被该选项指定排除的文件 --delete-after 传输结束以后再删除 --ignore-errors 及时出现 IO 错误也进行删除 --max-delete=NUM 最多删除 NUM 个文件 --partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输 --force 强制删除目录,即使不为空 --numeric-ids 不将数字的用户和组 ID 匹配为用户名和组名 --timeout=TIME IP 超时时间,单位为秒 -I, --ignore-times 不跳过那些有同样的时间和长度的文件 --size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间 --modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为 0 -T --temp-dir=DIR 在 DIR 中创建临时文件 --compare-dest=DIR 同样比较 DIR 中的文件来决定是否需要备份 -P 等同于 --partial --progress 显示备份过程 -z, --compress 对备份的文件在传输时进行压缩处理 --exclude=PATTERN 指定排除不需要传输的文件模式 --include=PATTERN 指定不排除而需要传输的文件模式 --exclude-from=FILE 排除 FILE 中指定模式的文件 --include-from=FILE 不排除 FILE 指定模式匹配的文件 --version 打印版本信息
工作模式
1、本地模式
2、远程模式
1、本地模式
1、语法: 命令 选项 源数据 目标地址 rsync [OPTION]... SRC [SRC]... DEST 2、常用选项:rsync支持一百多个选项,所以此处只介绍几个常用选项 -a --archive :归档模式,表示递归传输并保持文件属性。等同于"-rtopgDl"。 -v :显示rsync过程中详细信息。可以使用"-vvvv"获取更详细信息。 -z :传输时进行压缩提高效率。 -R :使用相对路径 3、类似于cp命令,又不同于cp (1)、cp命令只是本地复制,每次cp都会用源文件内容覆盖新文件,所以cp命令会修改文件时间属性, (2)、rsync可本地可远程,首次rsync与cp一样,后续rsync会对比两个文件的不同,只传输文件更新的部分,如果未更新,则rsync不会修改文件任何属性 4、注意:源路径如果是一个目录的话,带上尾随斜线和不带尾随斜线是不一样的,不带尾随斜线表示的是整个目录包括目录本身,
带上尾随斜线表示的是目录中的文件,不包括目录本身,这一点本地模式与远程模式均适用
实例:
示例1: 拷贝文件 [root@local ~]# rsync /etc/passwd /test 示例2:拷贝文件夹,-r,验证源路径带/后缀与不带后缀的两种情况 [root@local ~]# rsync -r /etc/cron.d /test # 把文件夹cron.d拷贝到/test下 [root@local ~]# rsync -r /etc/cron.d/ /test # 加了/ , 把文件夹cron.d下的内容拷贝到/test下 实例3:拷贝文件夹,-R,使用相对目录 [root@local ~]# mkdir -p /src/aaa/bbb/ccc [root@local ~]# mkdir /dst [root@local ~]# [root@local ~]# rsync -r /src/aaa/bbb/ccc /dst/ //只拷贝了指定的文件夹 [root@local ~]# ls /dst/ ccc [root@local ~]# [root@local ~]# rm -rf /dst/* [root@local ~]# rsync -r -R /src/aaa/bbb/ccc /dst/ //把整个目录拷贝过去了 [root@local ~]# ls /dst/ src [root@local ~]# rm -rf /dst/* [root@local ~]# rsync -r -R /src/./aaa/bbb/ccc /dst/ [root@local ~]# ls /dst/ aaa [root@local ~]# rm -rf /dst/* [root@local ~]# rsync -r -R /src/aaa/./bbb/ccc /dst/ [root@local ~]# ls /dst/ bbb [root@local ~]# 实例4:--backup选项,对目标目录下已经存在的文件做一个备份 [root@remote ~]# mkdir /egon111 [root@remote ~]# mkdir /egon222 [root@remote ~]# [root@remote ~]# echo 111 > /egon111/1.txt [root@remote ~]# echo 222 > /egon111/2.txt [root@remote ~]# echo 333 > /egon111/3.txt [root@remote ~]# [root@remote ~]# echo 666 > /egon222/1.txt [root@remote ~]# echo 888 > /egon222/2.txt [root@remote ~]# [root@remote ~]# rsync -r --backup /egon111/ /egon222/ [root@remote ~]# ll /egon222/ 总用量 20 -rw-r--r--. 1 root root 4 4月 16 13:12 1.txt -rw-r--r--. 1 root root 4 4月 16 13:11 1.txt~ -rw-r--r--. 1 root root 4 4月 16 13:12 2.txt -rw-r--r--. 1 root root 4 4月 16 13:11 2.txt~ -rw-r--r--. 1 root root 4 4月 16 13:12 3.txt [root@remote ~]# //在目标目录下,已存在的文件就被做一个备份,备份文件默认使用"~"做后缀,可以使用"--suffix"指定备份后缀,例如 [root@remote ~]# rsync -r --backup --suffix=".bak" /egon111/ /egon222/ //可以使用"--backup-dir"指定备份文件保存路径,但要求保存路径必须存在,指定备份路径后,默认将不会加备份后缀,除非使用"--suffix"显式指定后缀,如"--suffix=~"。 [root@remote ~]# mkdir /egon222/bak [root@remote ~]# rsync -r --backup --backup-dir=/egon222/bak /egon111/ /egon222/ [root@remote ~]# ls /egon222/bak/ 1.txt 2.txt [root@remote ~]# tree /egon222/ /egon222/ ├── 1.txt ├── 2.txt ├── 3.txt └── bak ├── 1.txt └── 2.txt
2、远程模式
rsync 进行远程同步时需要认证远程主机的账号密码,支持两种认证方式:ssh 协议认证与 rsync 协议认证。
1、ssh认证
rsync 默认使用 ssh 协议进行远程登录和数据传输。远程主机需要开启 sshd 服务,rsync 在传输数据之前会先与远程主机进行一次 ssh 登录认证,然后通过 ssh 隧道进行数据传输。只需数据同步双方安装 rsync,但不必启动 rsyncd 服务。
示例1:拉取
[root@www ~]# rsync -avz root@192.168.12.17:/data /bak/ ...... [root@www ~]# ls /bak/ data [root@www ~]# 可以用stat命令查看一下最近改动时间,然后再次执行下行命令 [root@www ~]# rsync -avz root@192.168.12.17:/data /bak/ [root@www ~]# 此时用stat命令查看一下最近改动时间,与上一次完全相同
示例2:推送
[root@www ~]# rsync -avz /bak root@192.168.12.17:/data/ # 推送
使用 ssh 认证与传输的缺点是不安全:
<1>登录认证使用的账号是远程主机可登录的系统账号,且需要手动输入密码;
<2>同步数据不受目录限制。
2、rsync 协议认证
与 ssh 认证不同,rsync 协议认证不需要依赖远程主机的 sshd 服务,但需要远程主机开启 rsyncd 服务,本地 rsyncd 服务可不必开启。另外,rsync 协议认证不是直接使用远程主机的真实系统账号,而是虚拟账号和虚拟密码,且可实现无需手动输入密码,同时 rsync 协议认证需要配置模块对远程同步的目录进行限制。对比 ssh 认证,rsync 协议认证安全性更高。
配置比较复杂,需要编辑配置文件;

浙公网安备 33010602011771号