rsync 增量同步:传大文件不用每次都从头来

举报
yd_265618206 发表于 2026/11/02 16:54:21 2026/11/02
【摘要】 用 scp 传一个几 GB 的备份文件,传到一半断网,重传又得从头开始——这种事遇过一次就不想再遇第二次。rsync 就是为这种场景生的:它只传变化的部分,断点续传、中断重来都不怕,日常同步目录也比 scp 省事得多。 最常用的基本用法rsync -avz /data/app/ user@remote:/data/app/三个参数拆开看:-a 是归档模式,保留权限、时间戳、软链接这些属性;-...

用 scp 传一个几 GB 的备份文件,传到一半断网,重传又得从头开始——这种事遇过一次就不想再遇第二次。rsync 就是为这种场景生的:它只传变化的部分,断点续传、中断重来都不怕,日常同步目录也比 scp 省事得多。

最常用的基本用法

rsync -avz /data/app/ user@remote:/data/app/

三个参数拆开看:-a 是归档模式,保留权限、时间戳、软链接这些属性;-v 显示过程;-z 传输时压缩,文件多、文本多的时候效果明显。注意源目录末尾的斜杠有讲究:/data/app/ 表示同步目录里的内容,/data/app(不带斜杠)则会把 app 这个目录本身也同步过去——路径写错一次,目标端就多出一层目录。

第一次同步和 scp 没区别,第二次开始差别就出来了:没变的文件直接跳过,只传新增和改动过的文件,几 GB 的目录第二次可能几秒就跑完。

断点续传:关键是 --partial

rsync -avz --partial --progress /data/big.tar.gz user@remote:/backup/

--progress 显示每个文件的传输进度,--partial 保留没传完的临时文件——下次再跑同一条命令,它会从断点处继续,而不是删掉重传。大文件、弱网络环境下,这两个参数几乎是必加的。

如果还想更保险,可以再加 --append-verify:它从已有部分后面接着传,传完再校验一次完整性,适合“文件本身不会中途被改写”的备份场景。

只同步、不同步删除:小心 --delete

rsync -avz --delete /data/app/ user@remote:/data/app/

--delete 会把目标端多余的文件删掉,让两边完全一致——做镜像、做发布时很有用,但也最容易误伤:源目录路径写错、或者源目录一时是空的,目标端的文件就会被成片删掉。

所以我的习惯是:第一次用 --delete 之前,先加 --dry-run 演练一遍:

rsync -avz --delete --dry-run /data/app/ user@remote:/data/app/

演练只打印“会传什么、会删什么”,不真正动手。确认删除列表里没有不该删的文件,再去掉 --dry-run 真正执行。这个习惯多花十秒,能避免一次误删事故。

排除不需要的文件

日志、缓存、临时文件没必要同步,用 --exclude 排除:

rsync -avz --exclude 'logs/' --exclude '*.tmp' /data/app/ user@remote:/data/app/

排除规则多了可以写进文件,用 --exclude-from=exclude.txt 统一管理,一行一条。备份脚本里把排除清单固定下来,以后每次同步的行为都是一致的,不会因为某次手敲漏了参数就把几个 GB 的日志也传过去。

一个日常备份的组合

给自己的服务器做每日备份,我常用的就是这一条:

rsync -avz --partial --delete --exclude 'logs/' /data/app/ user@backup:/backup/app/

逻辑很简单:只传变化的部分保证速度,--partial 保证断网可续传,--delete 保证备份端和源端一致,--exclude 保证不把日志也备份进去。配合 crontab 每天凌晨跑一次,备份这件事就从“记得做”变成了“自动做”。

下次要传大文件或者同步目录,先别急着 scp:rsync 多敲几个参数,省下来的是每次重传的时间,和断网时的一次心惊。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。