1.10.4 恢复流程与演练

本节聚焦备份后的恢复流程与演练,目标是确保在故障发生时能快速、可控、可验证地恢复系统与业务。恢复策略覆盖从单文件误删到整机宕机的多种场景,并形成标准化步骤与回滚机制。

恢复原理与流程草图#

文章图片

标准恢复流程与命令模板#

1) 评估与准备#

  • 判定故障范围与时间点(RPO/RTO)。
  • 校验备份介质完整性与可读性。
# 示例:校验备份包完整性(SHA256)
cd /backup
sha256sum -c server_etc_20240101.tar.gz.sha256
# 预期输出:server_etc_20240101.tar.gz: OK

# 示例:检查目标磁盘空间与挂载
df -h
lsblk

2) 执行恢复(以系统配置与数据目录为例)#

# 备份包路径
BACKUP=/backup/server_etc_20240101.tar.gz
TARGET=/etc

# 先模拟解包查看内容
tar -tzf $BACKUP | head -n 10

# 正式恢复并保留属主权限
tar -xzpf $BACKUP -C /
# -p 保留权限;-C / 以根为目标

# 验证关键配置文件存在与权限
ls -l /etc/ssh/sshd_config

3) 验证与回溯#

# 服务配置语法检查示例(以nginx为例)
nginx -t

# 服务重载/重启
systemctl reload nginx

# 功能验证(健康检查)
curl -I http://127.0.0.1/health

典型恢复场景与示例#

场景一:单文件误删#

# 从备份中恢复指定文件
tar -xzpf /backup/var_www_20240101.tar.gz -C / var/www/html/index.html

# 还原权限并验证
chown www-data:www-data /var/www/html/index.html
ls -l /var/www/html/index.html

场景二:配置文件损坏(含比对与回滚)#

# 对比差异
diff -u /etc/nginx/nginx.conf /backup/nginx.conf.bak

# 回滚恢复
cp /backup/nginx.conf.bak /etc/nginx/nginx.conf

# 语法校验与重载
nginx -t && systemctl reload nginx

场景三:目录级损坏(先结构后内容)#

# 恢复目录结构并验证权限
tar -xzpf /backup/app_conf_20240101.tar.gz -C / opt/app/conf
stat /opt/app/conf

# 校验文件数量
find /opt/app/conf -type f | wc -l

场景四:系统盘故障(简化演练)#

# 使用救援模式挂载磁盘后恢复(示例)
mount /dev/sda2 /mnt
tar -xzpf /backup/rootfs_20240101.tar.gz -C /mnt

# 重新生成引导(按发行版实际调整)
chroot /mnt grub2-mkconfig -o /boot/grub2/grub.cfg

场景五:异地灾备切换(入口切换示意)#

# 备站启动核心服务
systemctl start mysql
systemctl start nginx

# 入口切换(示例:DNS切换需在平台执行)
# 记录切换时间点用于回迁与追踪
date

恢复演练要求与脚本示例#

  • 月度/季度演练,覆盖不同故障类型。
  • 在隔离环境或低峰期进行。
  • 需要“恢复后业务验证脚本”。
#!/bin/bash
# verify_after_restore.sh
set -e

echo "[1] 端口检查"
ss -lntp | grep -E "80|443|3306"

echo "[2] 业务健康检查"
curl -fsS http://127.0.0.1/health >/dev/null

echo "[3] 数据一致性抽检"
mysql -uroot -p'Passw0rd' -e "SELECT COUNT(*) FROM appdb.orders LIMIT 1;"

echo "恢复验证完成"

常见排错与处理#

  • 备份不可用:检查校验和、介质挂载状态、文件损坏。
# 检查挂载与读写
mount | grep backup
touch /backup/.rw_test && rm -f /backup/.rw_test
  • 权限/SELinux导致服务不可用:
# 查看SELinux状态
getenforce

# 临时切换为宽容模式(演练用)
setenforce 0

# 修复文件上下文(示例)
restorecon -Rv /var/www/html
  • 版本不一致:
# 对比恢复工具版本
tar --version
rsync --version

练习与演练任务#

  1. 在测试机创建 /opt/app/conf/app.yml,执行误删后从备份恢复,并通过 diff 验证内容一致。
  2. 模拟 Nginx 配置损坏,使用备份回滚并通过 nginx -t 验证。
  3. 设计一次“系统盘故障”演练:使用救援模式恢复根分区,记录耗时并输出演练报告(含RTO、失败点)。
  4. 编写并运行恢复后验证脚本,输出端口检查、健康检查与数据抽检结果。