人人都会AI编程

25.1 备份策略:全量备份、增量备份、差异备份

更新时间:2026-07-12

备份并不是简单地“复制一份文件”,而是一套有计划的策略。根据备份时复制的数据范围和依赖关系,最基础的三种备份类型是:全量备份、增量备份和差异备份。它们之间的关键区别在于 “哪些数据被备份” 以及 “恢复时需要哪些备份集”,直接影响存储空间、备份时间和恢复速度。

1. 全量备份(Full Backup)

定义:每次都完整复制所有选定的数据,无论这些数据自上次备份以来是否发生过变化。

  • 优点:恢复最简单——只需要最新的一份全量备份即可完整还原,不依赖其他备份集。
  • 缺点:每次备份耗时最长,占用存储空间最大,如果每天全量备份 1TB 数据,一周就要消耗 7TB 空间。

典型应用场景

  • 数据量不大且变化缓慢的场景,如个人项目目录。
  • 作为其他备份类型的基础:通常先做一次全量备份,再配合增量或差异备份。

命令示例(使用 tar 创建全量备份):

tar -czf /backup/full_$(date +%Y%m%d).tar.gz /home/user/data

这把 /home/user/data 整个目录打包压缩成一个带日期的文件。

2. 增量备份(Incremental Backup)

定义:只备份自 上一次任何类型的备份(全量或增量)之后 发生变化的文件。

  • 工作方式:首先做一次全量备份,之后每天(或每次)只备份从上次备份以来变更过的文件。
  • 优点:备份速度快,占用空间最小,因为每次只处理变化的部分。
  • 缺点:恢复过程繁琐——需要先恢复最近一次的全量备份,然后按顺序依次应用此后的每一次增量备份,缺一不可。中间任何一份增量备份损坏或丢失,都会导致后续的增量数据无法还原。

典型应用场景:对备份窗口时间要求严格、数据变化量大但存储空间有限的服务器环境。

命令示例(使用 tar 的增量功能):

# 第一次全量备份,并记录快照文件
tar -czf /backup/full.tar.gz -g /backup/snapshot.snar /data

# 第二天增量备份,使用同一个快照文件
tar -czf /backup/incremental_day2.tar.gz -g /backup/snapshot.snar /data

-g 参数指定快照文件,tar 会自动识别哪些文件是新增或修改过的,只备份这些文件。恢复时,需要先解压全量备份,再依次解压增量备份。

3. 差异备份(Differential Backup)

定义:只备份自 上一次全量备份之后 发生变化的文件。

  • 工作方式:先做一次全量备份,后续每次差异备份都只备份从那次全量备份以来变化的数据。差异备份不关心期间是否有过其他差异备份,它总是和同一个全量备份进行比较。
  • 优点:恢复比增量备份简单——只需要最近的一次全量备份和最新的差异备份即可完整恢复。备份时间和占用空间介于全量和增量之间(随着离全量备份的时间越来越远,差异备份体积会逐渐变大)。
  • 缺点:与增量备份相比,后续的差异备份会越来越慢、占用存储越来越多,因为它反复备份了自上次全量备份以来所有变化过的文件。

典型应用场景:希望在恢复复杂度和备份存储之间取得平衡的场景,例如数据库的日常备份策略。

命令示例(使用 rsync 模拟差异备份):

# 第一次全量备份(复制整个目录)
rsync -av /data/ /backup/full/

# 以后的差异备份:将变化文件复制到一个新目录,使用 --link-dest 指向全量备份来节省空间
rsync -av --link-dest=/backup/full/ /data/ /backup/diff_$(date +%Y%m%d)/

--link-dest 会让 rsync 在目标目录中为未变化的文件创建硬链接指向全量备份中的文件,只有变化的文件才会真正写入磁盘。这样每次差异备份目录看起来都是完整的,但实际上大部分文件共享相同的磁盘空间。恢复时,直接复制最新的差异备份目录即可。

如何选择?

  • 只追求简单、数据量小:定期全量备份即可,管理成本最低。
  • 备份窗口短、存储紧张、能接受复杂恢复流程:全量 + 增量备份。
  • 希望在较短备份时间和较易恢复之间折中:全量 + 差异备份。

实际操作中,现代备份工具(如 BorgBackupresticDuplicati)往往在底层混合使用这些概念,通过去重、压缩和增量算法自动优化存储和速度,用户无需手动区分。但理解这三种基本策略,依然是设计可靠备份方案不可或缺的基础。