19.9.1 备份策略设计与分级(全量/增量/差异)
备份策略设计与分级(全量/增量/差异)#
备份策略设计围绕业务 RPO/RTO、数据规模、备份窗口与恢复复杂度展开,通过全量/增量/差异分级组合在成本与恢复速度之间取得平衡。全量备份提供完整基线;增量备份仅保存自上次备份以来变化数据;差异备份保存自上次全量以来的变化,恢复链路更短。
分级策略建议#
- 关键业务:每日全量或全量+小时级增量,最短恢复链路。
- 重要业务:每周全量+每日差异或增量,兼顾成本与恢复。
- 一般业务:每月全量+周差异,降低存储占用。
安装与准备(以 rsync/tar 为例)#
# Ubuntu/Debian
apt-get update
apt-get install -y rsync tar cron
# CentOS/RHEL
yum install -y rsync tar cronie
# 备份目录规划
mkdir -p /data/backup/{full,incr,diff,meta,restore}
示例一:使用 tar 快照实现全量/增量/差异#
适用于文件型数据(配置、日志、静态文件等)
# 1) 全量备份(生成基线快照)
tar -g /data/backup/meta/backup.snar \
-czf /data/backup/full/full_$(date +%F).tar.gz \
/etc /var/www
# 2) 增量备份(基于快照,仅保存新增/变更)
tar -g /data/backup/meta/backup.snar \
-czf /data/backup/incr/incr_$(date +%F_%H).tar.gz \
/etc /var/www
# 3) 差异备份(每次从“全量快照”开始)
cp /data/backup/meta/backup.snar /data/backup/meta/full_base.snar
# 执行差异备份时,先使用全量快照副本
tar -g /data/backup/meta/full_base.snar \
-czf /data/backup/diff/diff_$(date +%F).tar.gz \
/etc /var/www
关键参数解释
- -g:增量快照文件(记录文件时间与状态)
- -czf:压缩为 gzip 格式
- backup.snar:增量链使用同一个快照文件
- full_base.snar:差异备份每次从“全量快照”开始
预期效果
- /data/backup/full/ 保存全量基线
- /data/backup/incr/ 保存多次增量
- /data/backup/diff/ 保存差异链
示例二:使用 rsync --link-dest 做“差异/增量”快照#
利用硬链接减少重复数据,适合大规模目录
# 1) 全量快照
rsync -a --delete /data/app/ /data/backup/full/snap_2024-01-01/
# 2) 增量快照(基于上一次快照)
rsync -a --delete --link-dest=/data/backup/full/snap_2024-01-01 \
/data/app/ /data/backup/incr/snap_2024-01-02/
# 3) 差异快照(总是指向全量)
rsync -a --delete --link-dest=/data/backup/full/snap_2024-01-01 \
/data/app/ /data/backup/diff/snap_2024-01-03/
关键参数解释
- --link-dest:未变化文件硬链接到基线目录
- --delete:删除目标中多余文件以保持一致
- -a:保留权限、时间与符号链接
恢复演练(验证“可备可恢”)#
# 全量恢复
tar -xzf /data/backup/full/full_2024-01-01.tar.gz -C /data/backup/restore
# 增量恢复(按时间顺序依次解压)
tar -xzf /data/backup/incr/incr_2024-01-01_01.tar.gz -C /data/backup/restore
tar -xzf /data/backup/incr/incr_2024-01-01_02.tar.gz -C /data/backup/restore
# 差异恢复(仅需全量+最近差异)
tar -xzf /data/backup/diff/diff_2024-01-02.tar.gz -C /data/backup/restore
排错与常见问题#
- 增量链过长恢复慢
# 解决:周期性重新全量
# 建议每周/每月重新全量,缩短链路
- tar 增量未生效(所有文件都被备份)
# 检查是否误删快照文件
ls -l /data/backup/meta/backup.snar
# 解决:保持同一个快照文件,避免被覆盖
- rsync 差异目录占用过大
# 检查是否忘记加 --link-dest
# 解决:确保 --link-dest 指向正确基线目录
练习#
- 设计一个“每周全量+每日差异”的策略,并用 cron 写出计划任务。
- 用 tar 快照备份
/etc,连续执行 3 次增量,进行一次恢复演练。 - 用 rsync 生成 3 个快照目录,比较真实占用(
du -sh)。
# 示例:cron 每周全量,每日差异
# /etc/cron.d/backup
0 2 * * 0 root /usr/local/bin/backup_full.sh
0 2 * * 1-6 root /usr/local/bin/backup_diff.sh
以上内容可作为后续“备份介质、存储与保留策略”的衔接基础。