rsync增量备份依靠文件大小和修改时间(mtime)判断变化,默认不校验内容;加--checksum可按内容判断但变慢;核心参数为-a(保持属性)、-v(显示过程)、--delete(严格同步),需注意路径斜杠与--dry-run预览防误删。

rsync 是 Linux 下最直接、最可靠的增量备份方案,不用装额外服务,一条命令就能跑起来;但参数选错或顺序不对,轻则备份不全,重则误删目标目录。
rsync 增量备份靠什么判断“哪些文件变了”
默认情况下,rsync 只看两个东西:文件大小和修改时间(mtime)。只要这两个之一变了,就传整份文件。它不校验内容,所以改完又改回去、或者只改了权限/属主但没动内容,都不会触发传输。
- 想强制按内容判断是否变化,加
--checksum—— 会显著变慢,尤其大文件多时 - 如果源端文件被 touch 过但内容没变,
rsync会误判为“新文件”,导致重复传输 - 注意:
rsync不依赖“上次备份时间戳”,它只比对当前源和目标的文件状态,所以不需要维护 snapshot 文件
必须掌握的 rsync 增量备份参数组合
日常用这组参数足够稳:rsync -av --delete。拆开看:
-
-a=-rlptgoD,保留链接、权限、时间、属主、属组、设备文件等,是增量一致性的基础 -
-v显示过程,调试时别省;生产脚本里可去掉,或换-q静默 -
--delete表示目标目录严格跟随源目录:源里删了的,目标也删;这是“增量式全量同步”的关键 - 远程备份务必加
-z(压缩传输),否则小文件多时网络开销翻倍 - 不要加
--update(-u)——它跳过“目标更新”的文件,会导致旧文件残留,破坏一致性
--delete 的坑:为什么目标目录被清空了
--delete 很危险,但不是它本身有问题,而是路径写错了。
- 错误写法:
rsync -av --delete /data/ /backup/data→ 正确 - 危险写法:
rsync -av --delete /data /backup→ 会把/backup下所有非/data子目录全删掉 - 更隐蔽的错:
rsync -av --delete /data/ /backup/和rsync -av --delete /data /backup/效果不同:前者同步data/内容到backup/,后者把整个data目录(含名字)塞进backup/ - 保险做法:先加
--dry-run看预览,确认要删哪些再执行
如何保留多个时间点的增量快照
rsync 本身只做“当前源 ↔ 当前目标”的同步,不存历史。要留多个版本,得靠硬链接 + 脚本,比如 rsnapshot 或手动模拟:
- 每天备份到
/backup/daily.0,然后把/backup/daily.1→/backup/daily.2… 最老的删掉 - 每次备份前,用
cp -al /backup/daily.0 /backup/daily.1做硬链接拷贝,再跑rsync -av --delete到daily.0 - 硬链接让未变文件只存一份,节省空间;但注意:不能跨文件系统,且
rsync必须带-H才能保留硬链接关系 - 别指望
--backup参数来存历史 —— 它只在单次运行中重命名冲突文件,不是版本管理
真正难的不是写对命令,而是搞清“我要的是镜像同步,还是带时间线的归档”。前者用 rsync -av --delete 就够,后者必须引入硬链接或外部工具,且得提前规划好目录结构和清理策略。











