rsync

村尚chun叔 / 2023-07-28 / 原文

rsync

纯通过rsync的命令,来实现,数据目录A 拷贝到数据目录B

也就是模拟cp的用法 很简单

rsync  [选项]  源数据   目的数据

1.安装
yum install rsync -y

2.命令语法,分几个模式

- 本地模式

rsync   参数    源路径    目标路径
rsync  -avzP  /var/log   /tmp

参数解释
-v        详细模式输出
-a        归档模式,递归的方式传输文件,并保持文件的属性,等同于 -rlptgoD
-r        递归拷贝目录
-l        保留软链接
-p        保留原有权限
-t        保留原有时间(修改)
-g        保留属组权限
-o        保留属主权限
-D        等于--devices  --specials    表示支持b,c,s,p类型的文件
-R        保留相对路径
-H        保留硬链接
-A        保留ACL策略
-e        指定要执行的远程shell命令
-E        保留可执行权限
-X        保留扩展属性信息  a属性


比较常用的组合参数
rsync -avzP
-a    保持文件原有属性
-v    显示传输细节情况
-z    对传输数据压缩传输
-P    显示文件传输的进度信息

你在命令行里,执行命令,喜欢看到命令的执行过程 
rsync -avzP

脚本里面不需要看到详细过程
rsync -az  

- 远程模式需要两边的机器都安装rsync
- 远程模式,推送方式,把自己的数据推送到另一台机器上(上传)
语法1 ,rsync默认走ssh协议
rsync   参数    源路径       user@ip:目标路径
rsync  -avzP  /var/log/   root@10.0.0.31:/tmp/

语法2
rsync 参数 源路径  user@ip::目标路径


- 远程模式,拉取方式,拉取别人机器的数据到自己的机器上(下载)
rsync  参数   user@ip:源路径   目标路径
rsync  参数   user@ip::源路径目标路径

rsync -avzP  root@10.0.0.31:/var/log/   /tmp/


限速

拷贝单个大文件,拷贝大文件时,要注意限速,否则占用磁盘IO太多
--bwlimit=10

先生成一个5G文件
dd bs=100M count=50 if=/dev/zero  of=/var/log/my_self.log

rsync -avzP /var/log/my_self.log  /opt

iotop查看磁盘的读写IO情况

限制单个大文件的传输,速度只给他20M每秒


[root@rsync-41 ~]#rsync -avzP --bwlimit=20   /var/log/my_self.log  /opt
sending incremental file list
my_self.log
    393,117,696   7%   20.14MB/s    0:03:55  

对目录同步(注意语法的区别)

拷贝后的数据,携带该目录本身
[root@rsync-41 ~]#rsync -avzP /var/log    /opt

不拷贝该目录本身,拷贝目录下的数据
[root@rsync-41 ~]#rsync -avzP /var/log/    /opt

测试文件夹的增量拷贝

[root@rsync-41 ~]#rsync -avzP /test1/   /test2
sending incremental file list

sent 118 bytes  received 12 bytes  260.00 bytes/sec
total size is 0  speedup is 0.00
[root@rsync-41 ~]#
[root@rsync-41 ~]#
[root@rsync-41 ~]#
[root@rsync-41 ~]#echo "123" >/test1/1.png 
[root@rsync-41 ~]#
[root@rsync-41 ~]#rsync -avzP /test1/   /test2
sending incremental file list
1.png
              4 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=4/6)

sent 175 bytes  received 35 bytes  420.00 bytes/sec
total size is 4  speedup is 0.02

无差异化拷贝

使用--delete参数 将目标目录的数据清空,保证完全和源目录的数据一致

rsync -azvP --delete  /test1/   /test2/

[root@rsync-41 /test2]#rsync -azvP --delete  /test1/   /test2/
sending incremental file list
deleting 行者孙.png
./
白龙马.png
              0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=0/12)

sent 269 bytes  received 55 bytes  648.00 bytes/sec
total size is 4  speedup is 0.01
[root@rsync-41 /test2]#
[root@rsync-41 /test2]#
[root@rsync-41 /test2]#ls /test1/
1.png  2.png  3.png  4.png  5.png  孙悟空1  孙悟空2  孙悟空3  孙悟空4  孙悟空5  白龙马.png
[root@rsync-41 /test2]#ls /test2
1.png  2.png  3.png  4.png  5.png  孙悟空1  孙悟空2  孙悟空3  孙悟空4  孙悟空5  白龙马.png


# rsync拷贝文件夹,携带目录本身
# 把test1目录本身,连带着数据,都拷贝到test2下
rsync -avzP /test1    /test2/
最终会生成
/test2/test1/ 该文件夹的数据,和源数据目录 /test1是一样的