第 4 章 · 07 `rsync`:增量同步与镜像备份


文档摘要

第 4 章 · 07 :增量同步与镜像备份 本节摘要: 是 Linux 备份与同步的事实标准——几乎所有生产环境的「定期备份」「站点镜像」「大规模文件迁移」都靠它。它的核心能力是「增量同步」:只传输源与目标之间的差异部分,而非整份文件。这意味着第一次同步传完整文件,之后只传变化了的块,网络与时间成本极低。本节要讲透 rsync 的三个核心: (归档模式,保留权限/时间/软链接)、 (镜像模式,目标删除源已删的文件)、以及它「对比修改时间+大小,只传差异块」的工作机制。理解这些,你就掌握了一项能省下海量带宽与时间的运维利器。 内容来源:综合 相关知识整理,套用体系化模板。 学习目标 阅读完本节,你应当能够: 说清 与 / 的差别:增量同步,只传差异部分。

第 4 章 · 07 rsync:增量同步与镜像备份

本节摘要:rsync 是 Linux 备份与同步的事实标准——几乎所有生产环境的「定期备份」「站点镜像」「大规模文件迁移」都靠它。它的核心能力是「增量同步」:只传输源与目标之间的差异部分,而非整份文件。这意味着第一次同步传完整文件,之后只传变化了的块,网络与时间成本极低。本节要讲透 rsync 的三个核心:-a(归档模式,保留权限/时间/软链接)、--delete(镜像模式,目标删除源已删的文件)、以及它「对比修改时间+大小,只传差异块」的工作机制。理解这些,你就掌握了一项能省下海量带宽与时间的运维利器。

内容来源:综合 rsync 相关知识整理,套用体系化模板。

学习目标

阅读完本节,你应当能够:

  1. 说清 rsynccp/scp 的差别:增量同步,只传差异部分。
  2. -a(归档模式)保留权限/属主/时间/软链接,理解它是「递归+保留一切」的简写。
  3. --delete 做镜像备份(目标删除源已删的文件),并理解它的危险性。
  4. -n(dry-run 预演)在真正同步前先看会发生什么。
  5. 解释 rsync 的差异检测机制:对比「修改时间+大小」,只在两者都不同时传输。
  6. 区分本地同步与远程同步(走 ssh)的写法。
  7. 说清源路径「带尾随斜杠」与「不带」的语义差异(rsync 最经典的坑)。

一、设计动机:为什么需要增量同步

设想你有一个 50GB 的网站目录,每天要备份到另一台机器。如果每天用 scp -r 全量传一遍,即使只有 10MB 文件变了,也得重传 50GB——既慢又浪费带宽。

rsync 的核心创新就是增量同步:它先对比源与目标,找出哪些文件变了(按修改时间+大小判断),然后只传输变化了的文件,甚至只传文件内变化的部分。这样,每天只传那 10MB 的变化即可。

这个能力建立在两个机制上:

  1. 文件级差异检测:对比源文件与目标文件的「修改时间(mtime)+大小」。两者都相同就认为「没变」,跳过。只有不同的才需要传。
  2. 块级差异传输(delta transfer):对于需要传的文件,rsync 不一定整文件传——它把文件切成块,算每块的校验和,对比源与目标的块,只传「对不上的块」。这就是著名的「rsync 算法」。

这两个机制让 rsync 在「反复同步同一批文件」的场景下极其高效。

二、高频组合与实战

本地同步

rsync -a project/ /backup/project/ # 本地增量同步 rsync -a --delete project/ /backup/project/ # 镜像模式: /backup 里删源已删的文件

远程同步(走 ssh)

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 能在事故发生前拦住你。

三、踩坑与排错

坑 1:尾随斜杠的语义(最经典的坑)

rsync -a project /backup/ # 把 project 目录本身复制到 /backup/project rsync -a project/ /backup/ # 把 project 里面的内容复制到 /backup/

源路径不带尾随斜杠 = 复制该目录本身;带尾随斜杠 = 复制目录里的内容。这是 rsync 最经典、最容易踩的坑。一个斜杠之差,结果完全不同。记不住时,永远先 -n 预演

坑 2:--delete 配合错误源路径,清空目标

rsync -a --delete /empty/ /backup/ # 灾难! /empty 是空的, /backup 会被清空!

--delete 的语义是「让目标与源完全一致」,包括「源里没有的,目标也要删掉」。如果源写错了(空目录),目标会被清空。务必 -n 预演

坑 3:-a 不保留硬链接

rsync -aH src/ dst/ # -H 保留硬链接, -a 默认不带 H

默认 -a 会把硬链接拆成独立文件(占双倍空间)。需要保留硬链接(如备份 /home),加 -H

坑 4:权限/属主没保留

rsync -r src/ dst/ # 只递归, 不保留权限/时间/属主 rsync -a src/ dst/ # 对! -a 保留一切

很多人用 -r 代替 -a,结果权限/属主/时间全丢了。-a 是默认选择,除非你明确要丢这些信息。需保留属主还得加 --numeric-ids 或配合正确的用户权限。

本节要点回顾

  1. rsync 的核心是增量同步:对比「修改时间+大小」检测变化文件,只传变化部分(块级差异)。
  2. -a 归档模式是最常用选项:等价于「递归+保留权限/时间/属主/软链接」,几乎所有备份都该加。
  3. --delete 做镜像:让目标与源完全一致(包括删除目标多余文件);用前一定 -n 预演,否则可能误删。
  4. -n dry-run 是安全习惯:预演看会发生什么,确认无误再真执行。
  5. -z 传输时压缩:省带宽;-P 显示进度+支持断点续传,大文件友好。
  6. 最经典的坑——尾随斜杠:rsync a dst 复制目录本身,rsync a/ dst 复制目录内容;一个斜杠之差结果完全不同。

至此第 4 章「查找、归档与备份」全部讲完。本章从 find 的表达式模型开始,讲到打包与压缩的分离哲学,最后落到 rsync 的增量同步。下一章我们深入「权限、属主与磁盘」,把 Linux 文件系统的安全骨架讲透。


发布者: 作者: 灏天文库 转发
评论区 (0)
U