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