3.8.7 备份校验与完整性检测

3.8.7 备份校验与完整性检测#

备份校验的目标是确认备份数据未损坏、未被篡改且可用于恢复。本节给出原理草图、可执行示例、安装步骤、排错与练习,确保校验流程可落地。

1. 原理与流程草图

文章图片

2. 校验目标与范围
- 文件级一致性:文件大小、权限/属主/时间戳、内容哈希一致。
- 介质级完整性:无坏块、无静默数据损坏(bit rot)。
- 备份链完整性:全量/增量链路连续无缺口。
- 可恢复性:抽样恢复验证能正常读取与启动。

3. 环境准备与安装
- 安装校验与磁盘检测工具(示例基于 RHEL/CentOS/Ubuntu):

# RHEL/CentOS
yum install -y coreutils rsync smartmontools

# Ubuntu/Debian
apt-get update && apt-get install -y coreutils rsync smartmontools

命令解释
- coreutils 提供 sha256sum/md5sum
- rsync 提供传输校验
- smartmontools 提供 smartctl 磁盘健康检查

4. 生成校验清单与复验(完整可执行示例)

示例场景:备份目录 /backup/2024-08-01/,生成清单并在远端验证。

# 1) 生成 manifest(记录文件路径、hash)
cd /backup/2024-08-01
find . -type f -print0 | xargs -0 sha256sum > backup.manifest

# 2) 同时记录元数据(权限/属主/时间戳)
find . -type f -printf '%p|%s|%m|%u|%g|%TY-%Tm-%Td %TH:%TM:%TS\n' \
  > backup.meta

# 3) 传输到远端并开启校验
rsync -av --checksum /backup/2024-08-01 \
  backup@10.0.0.20:/backup/2024-08-01

# 4) 远端复验(在远端执行)
cd /backup/2024-08-01
sha256sum -c backup.manifest

预期效果
- sha256sum -c 输出 OK 表示一致;出现 FAILED 需进一步排查。

5. 备份链完整性检测(全量+增量示例)

以增量链 full -> inc1 -> inc2 为例,确保链路连续。

# 备份链清单(人工维护或脚本输出)
cat > chain.list <<'EOF'
full_2024-08-01.tar.gz
inc1_2024-08-02.tar.gz
inc2_2024-08-03.tar.gz
EOF

# 检查链路文件是否齐全
while read -r f; do
  test -f "/backup/$f" || echo "MISSING: $f"
done < chain.list

命令解释
- test -f:检查文件存在性
- MISSING 提示链路断裂,恢复将失败

6. 介质健康检查(磁盘/文件系统)

# 磁盘 SMART 健康状态
smartctl -H /dev/sda

# 关键字段查看
smartctl -A /dev/sda | egrep -i 'Reallocated|Pending|Offline'

# 文件系统一致性(卸载或只读环境)
fsck -n /dev/sda1

命令解释
- -H 健康总览
- Reallocated/Pending 异常可能提示物理损坏
- fsck -n 只读检查,不修复

7. 抽样恢复验证(最小恢复测试)

# 1) 在隔离目录模拟恢复
mkdir -p /tmp/restore_test
tar -xzf /backup/2024-08-01/full_2024-08-01.tar.gz -C /tmp/restore_test

# 2) 抽样校验文件内容
ls -l /tmp/restore_test
cat /tmp/restore_test/etc/hosts | head -n 3

预期效果
- 能正常解压与读取关键文件,说明备份可恢复。

8. 排错与处理
- 校验失败但文件可读:可能为静默损坏,重新备份并更换介质;检查 smartctl
- 增量链断裂:回退至最近完整全量备份,补齐缺失节点。
- 校验耗时过长:大文件采用分块哈希或并行执行。

并行校验示例(提升速度)

# 并行计算哈希(每次4个文件)
find /backup/2024-08-01 -type f -print0 | \
  xargs -0 -n 4 -P 4 sha256sum > backup.manifest

9. 练习(可操作任务)
1. 在 /backup/test/ 生成 5 个测试文件,生成 backup.manifest 并验证。
2. 手工删除一个文件,复验并观察 FAILED 输出。
3. 模拟增量链断裂:从链路清单中移除一个文件并检测 MISSING
4. 用 rsync --checksum 传输到远端后再次校验,记录耗时差异。

10. 最佳实践清单
- 备份流程固定“生成清单 → 传输 → 复验 → 抽样恢复”闭环。
- 关键系统采用双重校验:传输校验 + 抽样恢复验证。
- 校验日志与告警纳入监控平台,形成审计记录。