news 2026/6/5 18:02:30

rsync文件同步:从备份到迁移的瑞士军刀

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
rsync文件同步:从备份到迁移的瑞士军刀

搞运维这些年,rsync用得比cp多得多。

增量同步、断点续传、压缩传输,这些特性让它在文件传输场景下几乎无可替代。


为什么用rsync

先看个场景:要把100G的日志目录从A服务器同步到B服务器。

用scp:

scp-r/data/logs/ user@B:/data/logs/# 每次都是全量传输# 中断了要从头来# 100G传几个小时

用rsync:

rsync-avz/data/logs/ user@B:/data/logs/# 只传有变化的文件# 中断了从断点继续# 传输时压缩,省带宽

第一次可能都是100G,但后续同步可能只要传几百M变化的文件。这就是增量同步的威力。


基础用法

本地同步

# 基本格式rsync[选项]源目录 目标目录# 同步目录rsync-av/data/source/ /data/dest/# 注意:源目录末尾的斜杠很重要!rsync-av/data/source/ /data/dest/# 同步source下的内容到destrsync-av/data/source /data/dest/# 同步整个source目录到dest下

斜杠的区别

# 有斜杠:同步目录内容rsync-av/data/logs/ /backup/logs/# 结果:/backup/logs/下直接是文件# 没斜杠:同步整个目录rsync-av/data/logs /backup/# 结果:/backup/logs/logs/下才是文件(多了一层)

这个坑我见无数人踩过,记住:通常用有斜杠的写法

远程同步

# 推送:本地到远程rsync-avz/data/logs/ user@remote:/data/logs/# 拉取:远程到本地rsync-avzuser@remote:/data/logs/ /data/logs/# 指定端口rsync-avz-e"ssh -p 2222"/data/ user@remote:/data/

常用选项

-a,--archive# 归档模式,等于 -rlptgoD,保持权限、时间等-v,--verbose# 详细输出-z,--compress# 传输时压缩-P# 等于 --progress --partial,显示进度+支持断点续传-n, --dry-run# 模拟运行,不实际执行--delete# 删除目标中源没有的文件--exclude# 排除文件--include# 包含文件--bwlimit# 限制带宽

推荐组合

# 日常同步rsync-avzP/source/ /dest/# 镜像同步(目标完全等于源)rsync-avz--delete/source/ /dest/# 首次大量传输(显示进度,支持断点)rsync-avzP--progress/source/ user@remote:/dest/

排除和包含

排除文件

# 排除单个目录rsync-avz--exclude='logs'/data/ /backup/# 排除多个rsync-avz--exclude='logs'--exclude='tmp'--exclude='*.log'/data/ /backup/# 用排除文件rsync-avz--exclude-from='exclude.txt'/data/ /backup/# exclude.txt 内容:logs/ tmp/ *.log *.tmp .git/ node_modules/

包含和排除组合

# 只同步特定类型文件rsync-avz--include='*.conf'--exclude='*'/data/ /backup/# 同步目录结构+特定文件rsync-avz--include='*/'--include='*.log'--exclude='*'/data/ /backup/

规则是按顺序匹配的,第一个匹配的规则生效。


删除选项

# --delete: 删除目标中多余的文件rsync-avz--delete/source/ /dest/# 如果源中删了文件,目标也会被删# --delete-before: 先删除再传输(默认)# --delete-during: 边传边删# --delete-after: 传完再删# 小心使用!建议先 --dry-run 看看会删什么rsync-avzn--delete/source/ /dest/

实战场景

1. 定时备份

#!/bin/bash# backup.shDATE=$(date+%Y%m%d)SRC="/data/app/"DEST="/backup/app/"LOG="/var/log/backup.log"echo"=== Backup started at$(date)===">>$LOGrsync-avz--delete\--exclude='logs/'\--exclude='tmp/'\--exclude='*.pid'\"$SRC""$DEST">>$LOG2>&1if[$?-eq0];thenecho"Backup completed successfully">>$LOGelseecho"Backup failed!">>$LOG# 发告警fiecho"=== Backup finished at$(date)===">>$LOG

加入crontab:

# 每天凌晨2点备份02* * * /opt/scripts/backup.sh

2. 跨服务器迁移

# 大量数据迁移,限速避免影响业务rsync-avzP--bwlimit=50000/data/ user@newserver:/data/# --bwlimit=50000 表示限速50MB/s# 迁移完验证rsync-avzn/data/ user@newserver:/data/# 如果输出为空,说明完全一致

3. 增量备份到多版本

#!/bin/bash# 保留7天备份DATE=$(date+%Y%m%d)SRC="/data/app/"DEST_BASE="/backup/app"LATEST="$DEST_BASE/latest"BACKUP="$DEST_BASE/$DATE"# 硬链接方式增量备份rsync-avz--delete--link-dest="$LATEST""$SRC""$BACKUP"# 更新latest链接rm-f"$LATEST"ln-s"$BACKUP""$LATEST"# 删除7天前的备份find"$DEST_BASE"-maxdepth1-typed-mtime+7-execrm-rf{}\;

--link-dest是个神器:如果文件没变化,直接硬链接到上一版本,不占空间。这样保留7天备份,实际占用空间只比一份稍多一点。

4. 双向同步(慎用)

# 先A到Brsync-avz--update/data/shared/ user@B:/data/shared/# 再B到Arsync-avz--updateuser@B:/data/shared/ /data/shared/# --update 只同步更新的文件,避免覆盖

双向同步容易出问题,生产环境建议用专门的同步工具(如Syncthing)或者确定好主从关系。

5. 断点续传大文件

# 传输大文件,中途断了可以继续rsync-avzP--partiallargefile.tar.gz user@remote:/data/# --partial 保留传了一半的文件,不删除# -P 等于 --partial --progress

rsync daemon模式

除了SSH,rsync还可以以守护进程方式运行,适合内网大量机器同步。

服务端配置

# /etc/rsyncd.confuid=nobody gid=nobody usechroot=no max connections=10logfile=/var/log/rsyncd.log pidfile=/var/run/rsyncd.pid[data]path=/data comment=Data directoryreadonly=no list=yesauthusers=syncuser secretsfile=/etc/rsyncd.secrets[backup]path=/backup comment=Backup directoryreadonly=yes
# /etc/rsyncd.secretssyncuser:yourpassword
# 权限要设对chmod600/etc/rsyncd.secrets# 启动rsync--daemon# 或者用systemdsystemctl start rsyncd

客户端连接

# 格式:rsync://user@host/模块名/路径rsync-avzsyncuser@192.168.1.100::data/ /local/data/# 或者rsync-avzrsync://syncuser@192.168.1.100/data/ /local/data/# 密码可以写文件或环境变量exportRSYNC_PASSWORD="yourpassword"rsync-avzsyncuser@192.168.1.100::data/ /local/data/

daemon模式的好处是不走SSH,配置灵活,适合内网批量同步场景。


性能优化

压缩策略

# 已压缩的文件不要再压缩rsync-avz--compress-level=9/data/ /backup/# 压缩级别0-9# 跳过已压缩格式rsync-avz--skip-compress=gz/jpg/mp4/zip/rar /data/ /backup/

大量小文件

# 大量小文件时,可以先打包tarczf - /data/logs/|sshuser@remote"tar xzf - -C /backup/"# 或者用rsync的 --whole-file 选项rsync-avz--whole-file /data/ /backup/# 小文件用whole-file直接传比增量计算快

限制资源

# 限制带宽(KB/s)rsync-avz--bwlimit=10000/data/ user@remote:/data/# 限制IO优先级ionice-c2-n7rsync-avz/data/ /backup/

常见问题

1. 权限问题

# 保持原权限rsync-avz/data/ /backup/# 不保持权限(用目标系统默认)rsync-rltz/data/ /backup/# 改变属主rsync-avz--chown=www:www /data/ /backup/

2. 符号链接

# 默认 -a 会复制软链接本身rsync-avz/data/ /backup/# 复制软链接指向的文件rsync-avzL/data/ /backup/# 跳过软链接rsync-avz--no-links /data/ /backup/

3. 校验数据完整性

# 用校验和对比,更准确但更慢rsync-avzc/data/ /backup/# -c 使用checksum而不是时间+大小# 验证同步结果rsync-avzn--checksum/data/ user@remote:/data/

4. 空目录

# rsync默认不创建空目录(没文件可同步)# 加 -d 选项rsync-avzd--include='*/'--exclude='*'/data/ /backup/

与其他工具对比

场景推荐工具
单次传文件scp
增量同步rsync
实时同步lsyncd (rsync+inotify)
双向同步Syncthing
大量小文件tar+ssh
对象存储同步rclone

rsync的定位是增量同步,单次传小文件不如scp方便,实时同步不如专门工具。


总结

rsync几个核心用法:

# 基础同步rsync-avz/source/ /dest/# 远程同步rsync-avzP/source/ user@remote:/dest/# 镜像同步rsync-avz--delete/source/ /dest/# 排除文件rsync-avz--exclude='logs/'/source/ /dest/# 限速传输rsync-avz--bwlimit=10000/source/ /dest/# 增量备份rsync-avz--link-dest=/backup/latest /source/ /backup/20241229/

记住两点:

  1. 源目录加斜杠
  2. 先 --dry-run 再执行

有问题评论区聊。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/24 19:32:02

一站式AI开发环境:TensorFlow-v2.9镜像集成Jupyter、SSH和Conda

一站式AI开发环境:TensorFlow-v2.9镜像集成Jupyter、SSH和Conda 在深度学习项目从实验走向落地的过程中,一个稳定、可复现且易于协作的开发环境,往往比模型结构本身更能决定团队效率。现实中,“在我机器上能跑”的尴尬屡见不鲜—…

作者头像 李华
网站建设 2026/6/4 23:11:08

掌握Java 21外部内存API,3步实现C/C++级内存操控能力

第一章:Java 21外部内存API概述Java 21引入了全新的外部内存API(Foreign Memory API),旨在提供一种安全、高效的方式来访问JVM堆之外的内存区域。该API是Project Panama的重要组成部分,解决了传统ByteBuffer与JNI在处理…

作者头像 李华
网站建设 2026/5/29 17:47:40

从零搭建到自动编码:飞算JavaAI全流程落地指南,开发者速进

第一章:从零起步——飞算JavaAI初探飞算JavaAI是一款面向Java开发者的智能编程辅助工具,致力于通过人工智能技术提升代码编写效率与质量。它不仅支持代码自动生成、错误检测,还能根据上下文提供优化建议,适用于从新手到资深工程师…

作者头像 李华
网站建设 2026/5/3 11:32:54

常用文献检索网站有哪些 全面汇总与推荐

很多人刚进科研时,会陷入一个非常努力但效率极低的循环: 搜一堆论文 → 看摘要 → 存 PDF → 再也不打开。 问题不在你不认真,而在于: 你拿到的文献,本身就是随机噪声。 生成式 AI 出现后,文献检索正在从…

作者头像 李华
网站建设 2026/5/30 15:22:58

网络层详解

IP协议格式IPv4 头部字段总长度可变(最小 20 字节,最大 60 字节),各字段按顺序定义如下:1. 4 位 版本号(version)作用:指定 IP 协议的版本取值:对于 IPv4,固定…

作者头像 李华