3.8.2 备份类型:全量/增量/差异

3.8.2 备份类型:全量/增量/差异#

原理草图(备份链)

文章图片

类型定义与特点
- 全量备份(Full):对指定数据集做完整拷贝。
- 优点:恢复最简单;链路短。
- 缺点:耗时/存储大。
- 增量备份(Incremental):只备份上次备份以来的变化。
- 优点:快、存储省。
- 缺点:恢复需“全量+全部增量”。
- 差异备份(Differential):备份自最近一次全量以来的变化。
- 优点:恢复链短于增量。
- 缺点:时间越久,差异越大。


实战示例(基于 rsync + 时间戳目录,演示三种类型)#

目录约定:
生产数据:/data/app/
备份根:/backup/app/
全量:/backup/app/full_YYYYMMDD/
增量:/backup/app/inc_YYYYMMDD/
差异:/backup/app/diff_YYYYMMDD/

1)安装(Debian/Ubuntu 与 RHEL/CentOS)

# Debian/Ubuntu
sudo apt-get update
sudo apt-get install -y rsync

# RHEL/CentOS
sudo yum install -y rsync

2)全量备份(完整拷贝)

# 生成全量目录
FULL=/backup/app/full_$(date +%F)
mkdir -p "$FULL"

# 说明:-a 保留权限/时间戳;-H 硬链接;--delete 保持一致
rsync -aH --delete /data/app/ "$FULL/"

# 预期效果:FULL 目录是可独立恢复的副本

3)增量备份(基于上一次备份快照)

使用 --link-dest 指向“上一次备份目录”,未变化文件使用硬链接节省空间。

# 假设上一份备份是 FULL 或 INC 的最后一次备份
LAST=/backup/app/full_2024-06-01
INC=/backup/app/inc_$(date +%F)
mkdir -p "$INC"

# 说明:
# --link-dest=LAST :对未变化文件做硬链接
# 新变化文件在 INC 中为真实文件
rsync -aH --delete --link-dest="$LAST" /data/app/ "$INC/"

# 预期效果:INC 目录看似完整,空间占用增量

4)差异备份(基于最近一次全量)

# 基于最新一次全量目录
BASE=/backup/app/full_2024-06-01
DIFF=/backup/app/diff_$(date +%F)
mkdir -p "$DIFF"

# 说明:
# --link-dest=BASE :只相对全量做差异
rsync -aH --delete --link-dest="$BASE" /data/app/ "$DIFF/"

# 预期效果:DIFF 目录相对 BASE 仅存变化文件

5)恢复演示(命令与说明)

# 全量恢复:直接覆盖
rsync -aH /backup/app/full_2024-06-01/ /data/app/

# 增量恢复:先全量,再按顺序叠加所有增量
rsync -aH /backup/app/full_2024-06-01/ /data/app/
rsync -aH /backup/app/inc_2024-06-02/ /data/app/
rsync -aH /backup/app/inc_2024-06-03/ /data/app/

# 差异恢复:全量 + 最新差异
rsync -aH /backup/app/full_2024-06-01/ /data/app/
rsync -aH /backup/app/diff_2024-06-03/ /data/app/

关键命令参数解释#

  • -a:归档模式,保留权限/属主/时间戳/软链等
  • -H:保留硬链接
  • --delete:目标中删除源不存在的文件,确保一致性
  • --link-dest=DIR:未变化文件与 DIR 建硬链接,节省空间

排错与验证#

1)硬链接未生效(备份占用过大)

# 检查硬链接数是否大于 1
find /backup/app/inc_2024-06-03 -type f -printf '%n %p\n' | head

# 若链接数=1,说明未做硬链接,检查:
# - --link-dest 是否使用绝对路径
# - 备份目录是否在同一文件系统(不同文件系统无法硬链接)

2)恢复后权限异常

# 确认 rsync 是否以 root 运行,且 -a 已启用
# 重新恢复并保留权限
sudo rsync -aH /backup/app/full_2024-06-01/ /data/app/

3)备份目录增长过快

# 统计增量真实占用
du -sh /backup/app/inc_2024-06-03
du -sh /backup/app/full_2024-06-01

# 检查是否频繁大文件变更或误用 --link-dest

练习#

  1. 设计“周全量+日增量”的计划,写出 7 天的备份目录命名与恢复顺序。
  2. rsync --link-dest 做一次差异备份,验证硬链接数量是否大于 1。
  3. 删除 /data/app/ 中一个文件后恢复,验证 --delete 的影响并说明差异。