数据同步 rsync

Rsync本地模式和远程模式

1.命令说明

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

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

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

1.安装
yum install rsync -y


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


- 本地模式

rsync 参数   源路径  目标路径

rsync  -xxxxx    /var/log    /tmp



- 远程模式,推送方式,把自己的数据推送到另一台机器上(上传)
语法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/



参数解释
    -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    显示文件传输的进度信息


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

脚本里面?
bash xxx.sh
rsync -az  

2.本地模式

linux机器本身,数据来回发送

# 以后cp可以放一旁了,用rsync当cp使就行

# /var/log/50G 

cp /var/log/   /tmp/
touch /var/log/new1.file
cp /var/log/   /tmp/


# 用rsync,支持增量备份
# /var/log/50G 

rsync  -avzP /var/log/   /tmp/ 
touch /var/log/new1.file
rsync  -avzP /var/log/   /tmp/ 

不加/ 表示将目录以及目录下的所有东西都拷贝过去, 加/表示只拷贝目录下的所有东西,不会拷贝目录本身

对文件同步
[root@rsync-41 ~]#yum install rsync -y
把本地的的/var/log/messages 文件 拷贝到/opt下

拷贝单个文件
[root@rsync-41 ~]#rsync -avzP /var/log/messages /opt
sending incremental file list
messages
        985,500 100%   56.79MB/s    0:00:00 (xfr#1, to-chk=0/1)

sent 123,300 bytes  received 35 bytes  246,670.00 bytes/sec
total size is 985,500  speedup is 7.99

拷贝单个大文件,拷贝大文件时,要注意限速,否则占用磁盘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
[root@rsync-41 ~]#




无差异化拷贝
使用--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是一样的


对rsync限速,因为rsync在传输数据时,会占用大量的磁盘IO,以及如果是网络传输的话,占用网络带宽,会导致其他程序受影响

所以rsync这样的备份服务,都是在夜里,凌晨操作,被影响其他程序

--bwlimit



[root@rsync-41 /test2]## 实现 /root  和/tmp 完全一样
[root@rsync-41 /test2]#
[root@rsync-41 /test2]#
[root@rsync-41 /test2]#
[root@rsync-41 /test2]#ls /root  /tmp
/root:
anaconda-ks.cfg  change_network.sh  hello-100.log  hosts.ip  i_am_template-100.log

/tmp:
anaconda-ks.cfg  change_network.sh  hello-100.log  hosts.ip  i_am_template-100.log
[root@rsync-41 /test2]#rsync -avzP --delete  /root/    /tmp/

3.远程模式

实现如scp的作用
PUSH 推送模式,上传模式

#PUSH 推送模式,上传模式

把rsync-41   /root下的数据,拷贝到 nfs-31   /tmp下

登录rsync41
用ip形式、再用主机名形式
添加无差异化参数,该参数,慎用!搞清楚了你在做什么!

rsync -avzP  --delete  /root/    root@172.16.1.31:/tmp/

#PULL 拉取模式(你要琢磨,数据最终放在了哪)

# 把rsync-41   /root下的数据,拷贝到 nfs-31   /tmp下

rsync -avzP   root@172.16.1.41:/root/    /tmp/


# 拉取rsync41的/etc/passwd文件到 nfs-31的/opt下,使用主机名通信

rsync -avzP root@rsync-41:/etc/passwd    /opt/

传输目录注意

#传输整个目录,包含目录本身

rsync -avzP   root@172.16.1.41:/root    /tmp/
#只传输目录下的文件,不包含目录本身
rsync -avzP   root@172.16.1.41:/root/    /tmp/
#不同主机之间同步数据 --delete
rsync -avzP --delete   root@172.16.1.41:/root    /tmp/

#坑:如果/和一个空目录进行完全同步,那么效果和删根一样
#坑:传输过程不限速导致带宽被占满 ,--bwlimit=50

远程传输 nfs-31下的 /tmp/2G.log   备份到  rsync-41的/opt下

rsync -avzP   /tmp/2G.log   root@172.16.1.41:/opt
-a   保持文件原有属性
-v   显示传输过程
-z   压缩传输数据
-P   显示传输进度
远程备份文件,且改名
[root@nfs-31 /tmp]#rsync -avzP   /tmp/2G.log   root@172.16.1.41:/opt/2G.logggggggggggggggggggggg
远程传输 nfs-31下的 /tmp/2G.log   备份到  rsync-41的/opt下,且是无差异化备份
等于清空原有/opt下的数据

rsync -avzP --delete   /tmp/2G.log   root@172.16.1.41:/opt/2G.log
posted @   不太聪明的大鹅  阅读(53)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示