第 4 章 · 07 :增量同步与镜像备份 本节摘要: 是 Linux 备份与同步的事实标准——几乎所有生产环境的「定期备份」「站点镜像」「大规模文件迁移」都靠它。它的核心能力是「增量同步」:只传输源与目标之间的差异部分,而非整份文件。这意味着第一次同步传完整文件,之后只传变化了的块,网络与时间成本极低。本节要讲透 rsync 的三个核心: (归档模式,保留权限/时间/软链接)、 (镜像模式,目标删除源已删的文件)、以及它「对比修改时间+大小,只传差异块」的工作机制。理解这些,你就掌握了一项能省下海量带宽与时间的运维利器。 内容来源:综合 相关知识整理,套用体系化模板。 学习目标 阅读完本节,你应当能够: 说清 与 / 的差别:增量同步,只传差异部分。
rsync:增量同步与镜像备份本节摘要:
rsync是 Linux 备份与同步的事实标准——几乎所有生产环境的「定期备份」「站点镜像」「大规模文件迁移」都靠它。它的核心能力是「增量同步」:只传输源与目标之间的差异部分,而非整份文件。这意味着第一次同步传完整文件,之后只传变化了的块,网络与时间成本极低。本节要讲透 rsync 的三个核心:-a(归档模式,保留权限/时间/软链接)、--delete(镜像模式,目标删除源已删的文件)、以及它「对比修改时间+大小,只传差异块」的工作机制。理解这些,你就掌握了一项能省下海量带宽与时间的运维利器。
内容来源:综合
rsync相关知识整理,套用体系化模板。
阅读完本节,你应当能够:
rsync 与 cp/scp 的差别:增量同步,只传差异部分。-a(归档模式)保留权限/属主/时间/软链接,理解它是「递归+保留一切」的简写。--delete 做镜像备份(目标删除源已删的文件),并理解它的危险性。-n(dry-run 预演)在真正同步前先看会发生什么。设想你有一个 50GB 的网站目录,每天要备份到另一台机器。如果每天用 scp -r 全量传一遍,即使只有 10MB 文件变了,也得重传 50GB——既慢又浪费带宽。
rsync 的核心创新就是增量同步:它先对比源与目标,找出哪些文件变了(按修改时间+大小判断),然后只传输变化了的文件,甚至只传文件内变化的部分。这样,每天只传那 10MB 的变化即可。
这个能力建立在两个机制上:
这两个机制让 rsync 在「反复同步同一批文件」的场景下极其高效。
rsync -a project/ /backup/project/ # 本地增量同步 rsync -a --delete project/ /backup/project/ # 镜像模式: /backup 里删源已删的文件
rsync -a project/ user@server:/backup/project/ # 推到远程 rsync -a user@server:/backup/project/ project/ # 从远程拉 rsync -az project/ user@server:/backup/ # -z 传输时压缩(省带宽)
| 选项 | 含义 | 说明 |
|---|---|---|
-a |
archive 归档模式 | 最常用,等价于 -rlptgoD(递归+保留软链接/权限/时间/组/属主+特殊文件) |
--delete |
删除目标多余文件 | 镜像备份必加,但危险(详见踩坑) |
-n |
dry-run 预演 | 安全必用,只打印会发生什么,不真执行 |
-v |
verbose 详细 | 显示传输的每个文件 |
-z |
compress 压缩 | 传输时压缩,省网络带宽(对已压缩文件无效) |
--exclude |
排除模式 | --exclude '*.log' 不传日志文件 |
-P |
进度+断点续传 | = --partial --progress,大文件友好 |
rsync -an --delete project/ /backup/project/ 2>&1 | head # -n 预演: 先看会删/传哪些文件, 确认无误再去掉 -n 真执行
💡 技巧:用
--delete前一定先-n预演。--delete会删目标文件,如果源路径写错(比如源为空),可能把目标全删了。-n能在事故发生前拦住你。
rsync -a project /backup/ # 把 project 目录本身复制到 /backup/project rsync -a project/ /backup/ # 把 project 里面的内容复制到 /backup/
源路径不带尾随斜杠 = 复制该目录本身;带尾随斜杠 = 复制目录里的内容。这是 rsync 最经典、最容易踩的坑。一个斜杠之差,结果完全不同。记不住时,永远先 -n 预演。
--delete 配合错误源路径,清空目标rsync -a --delete /empty/ /backup/ # 灾难! /empty 是空的, /backup 会被清空!
--delete 的语义是「让目标与源完全一致」,包括「源里没有的,目标也要删掉」。如果源写错了(空目录),目标会被清空。务必 -n 预演。
-a 不保留硬链接rsync -aH src/ dst/ # -H 保留硬链接, -a 默认不带 H
默认 -a 会把硬链接拆成独立文件(占双倍空间)。需要保留硬链接(如备份 /home),加 -H。
rsync -r src/ dst/ # 只递归, 不保留权限/时间/属主 rsync -a src/ dst/ # 对! -a 保留一切
很多人用 -r 代替 -a,结果权限/属主/时间全丢了。-a 是默认选择,除非你明确要丢这些信息。需保留属主还得加 --numeric-ids 或配合正确的用户权限。
rsync 的核心是增量同步:对比「修改时间+大小」检测变化文件,只传变化部分(块级差异)。-a 归档模式是最常用选项:等价于「递归+保留权限/时间/属主/软链接」,几乎所有备份都该加。--delete 做镜像:让目标与源完全一致(包括删除目标多余文件);用前一定 -n 预演,否则可能误删。-n dry-run 是安全习惯:预演看会发生什么,确认无误再真执行。-z 传输时压缩:省带宽;-P 显示进度+支持断点续传,大文件友好。rsync a dst 复制目录本身,rsync a/ dst 复制目录内容;一个斜杠之差结果完全不同。至此第 4 章「查找、归档与备份」全部讲完。本章从 find 的表达式模型开始,讲到打包与压缩的分离哲学,最后落到 rsync 的增量同步。下一章我们深入「权限、属主与磁盘」,把 Linux 文件系统的安全骨架讲透。