第23章:备份与灾难恢复策略

在 IT 运维中,数据是最宝贵的资产 。一次误删、硬盘故障或勒索病毒,都可能导致业务中断、数据永久丢失。"没有备份的系统等于裸奔" 。本章将带你建立科学的备份与恢复体系,掌握 tarrsync 等核心工具,利用 LVM 快照确保应用一致性,并制定可落地的灾难恢复计划,为你的 openEuler 系统加上"安全保险"。

🌟 本章目标

  • 理解备份的重要性与 RTO/RPO 基本概念
  • 掌握 tarrsync 进行本地与远程备份
  • 使用 cron 实现自动化备份任务
  • 利用 LVM 快照进行应用一致性备份(如数据库)
  • 制定灾难恢复计划(DRP)并进行演练
  • 实战:搭建 rsync 备份服务器,实现每日自动备份

23.1 为什么需要备份?

💥 常见数据丢失场景

  • 硬件故障(硬盘损坏)
  • 人为误操作(rm -rf /
  • 软件缺陷(程序写错文件)
  • 安全事件(勒索病毒、黑客入侵)
  • 自然灾害(火灾、水灾)

📉 统计:超过 60% 的中小企业因数据丢失在 6 个月内倒闭。


✅ 备份的核心目标

术语 含义 目标
RTO(Recovery Time Objective) 恢复时间目标 故障后多久恢复业务(如 1 小时)
RPO(Recovery Point Objective) 恢复点目标 最多能丢失多少数据(如 15 分钟)

💡 备份频率决定 RPO,恢复速度影响 RTO。


23.2 备份策略:3-2-1 原则

3-2-1 备份法则 是业界最佳实践:

  • 3 份数据:原始数据 + 至少 2 份备份
  • 2 种介质:如硬盘 + 磁带,或本地 + 云存储
  • 1 份异地:防止单点故障(如火灾)

✅ 示例:

  • 主机:/data(原始)
  • 本地 NAS:每日同步(副本1)
  • 华为云 OBS:每周归档(副本2,异地)

23.3 使用 tar 进行归档备份

tar(Tape Archive)是最常用的归档工具,可打包并压缩文件。

基本语法

bash 复制代码
tar [选项] 归档文件名 源文件/目录

常用选项

选项 说明
-c 创建归档
-x 解压归档
-v 显示过程
-f 指定文件名
-z 用 gzip 压缩(.tar.gz)
-j 用 bzip2 压缩(.tar.bz2)
-J 用 xz 压缩(.tar.xz,压缩率高)

实战示例

1. 备份 /etc 目录
bash 复制代码
sudo tar -czf /backup/etc-$(date +%F).tar.gz /etc
  • $(date +%F) → 生成日期 2024-04-07
  • 文件名:etc-2024-04-07.tar.gz
2. 备份 /var/www 并排除缓存
bash 复制代码
sudo tar -czf /backup/web-$(date +%F).tar.gz \
  --exclude=/var/www/html/cache \
  /var/www
3. 解压备份
bash 复制代码
tar -xzf /backup/etc-2024-04-07.tar.gz -C /restore
  • -C:指定解压目录

23.4 使用 rsync 进行高效同步

rsync 是"远程同步"工具,支持增量备份,只传输变化的部分,节省带宽和时间。

安装 rsync

bash 复制代码
sudo dnf install -y rsync

基本语法

bash 复制代码
rsync [选项] 源 目标

常用选项

选项 说明
-a 归档模式(保留权限、符号链接等)
-v 详细输出
-z 压缩传输
-h 人类可读大小
--delete 删除目标中源不存在的文件(镜像模式)
-e ssh 通过 SSH 传输(安全)

实战示例

1. 本地同步(备份到另一个目录)
bash 复制代码
sudo rsync -avh /etc/ /backup/etc/
2. 远程备份到另一台服务器
bash 复制代码
rsync -avz -e ssh /var/www/ user@192.168.1.200:/backup/web/
3. 从远程恢复
bash 复制代码
rsync -avz -e ssh user@192.168.1.200:/backup/web/ /var/www/

rsync 是实现异地备份的核心工具。


23.5 使用 cron 实现自动化备份

结合 cron,让备份每天自动执行。

编写备份脚本

bash 复制代码
sudo vim /opt/scripts/backup_daily.sh

内容:

bash 复制代码
#!/bin/bash
BACKUP_DIR="/backup"
DATE=$(date +%F)
LOG_FILE="/var/log/backup.log"

# 创建备份目录
mkdir -p $BACKUP_DIR

# 备份 etc
tar -czf $BACKUP_DIR/etc-$DATE.tar.gz /etc >> $LOG_FILE 2>&1

# 备份 web
tar -czf $BACKUP_DIR/web-$DATE.tar.gz /var/www >> $LOG_FILE 2>&1

# 同步到远程备份服务器(可选)
# rsync -avz -e ssh $BACKUP_DIR/ user@backup-server:/data/

echo "[$(date)] Daily backup completed" >> $LOG_FILE

设置可执行:

bash 复制代码
sudo chmod +x /opt/scripts/backup_daily.sh

添加到 cron

bash 复制代码
sudo crontab -e

添加:

bash 复制代码
# 每天凌晨 2:30 执行备份
30 2 * * * /opt/scripts/backup_daily.sh

✅ 自动化备份系统就绪!


23.6 使用 LVM 快照进行应用一致性备份

对于数据库等应用,直接 tar 可能导致数据不一致(如 MySQL 正在写入)。

LVM(Logical Volume Manager)快照 可在秒级创建磁盘一致性视图。

前提

  • 根分区或数据分区使用 LVM 管理

查看:

bash 复制代码
lsblk

输出应包含 lvm 类型。


创建快照备份流程

1. 创建快照(假设数据在 /dev/vg00/lv_data
bash 复制代码
lvcreate -L 1G -s -n snap_data /dev/vg00/lv_data
  • -L 1G:快照大小(建议为原卷的 10-20%)
  • -s:创建快照
  • -n snap_data:快照名称

2. 挂载快照并备份
bash 复制代码
mkdir /mnt/snapshot
mount /dev/vg00/snap_data /mnt/snapshot

# 从快照备份数据(此时原卷可继续读写)
tar -czf /backup/mysql-$(date +%F).tar.gz /mnt/snapshot/mysql/

# 卸载
umount /mnt/snapshot

3. 删除快照
bash 复制代码
lvremove /dev/vg00/snap_data

⚠️ 快照不能长期保留,应及时删除。


23.7 制定灾难恢复计划(DRP)

备份不是目的,可恢复才是关键

📋 灾难恢复计划应包含

项目 说明
恢复流程 从备份恢复的详细步骤(谁、何时、如何做)
联系人列表 运维、开发、管理层联系方式
备份位置 本地、远程、云存储地址
恢复验证 如何验证数据完整性和系统可用性
演练计划 每季度/半年进行一次恢复演练

🧪 恢复演练示例

  1. 停止服务
  2. 挂载备份磁盘
  3. 解压 etc-*/(恢复配置)
  4. 解压 web-*/var/www
  5. 启动服务
  6. 测试访问

✅ 演练能暴露备份方案的缺陷。


23.8 实战:搭建 rsync 备份服务器

场景

  • 服务器 A(192.168.1.100):需要备份
  • 服务器 B(192.168.1.200):作为备份服务器

步骤1:在备份服务器(B)上配置 rsync daemon

bash 复制代码
sudo vim /etc/rsyncd.conf

内容:

conf 复制代码
uid = root
gid = root
use chroot = no
max connections = 10
log file = /var/log/rsyncd.log

[backup]
path = /data/backup
comment = Remote Backup Directory
read only = false
list = true
auth users = backupuser
secrets file = /etc/rsyncd.secrets

创建密码文件:

bash 复制代码
sudo vim /etc/rsyncd.secrets

内容:

复制代码
backupuser:MyBackupPass123

设置权限:

bash 复制代码
sudo chmod 600 /etc/rsyncd.secrets

启动服务:

bash 复制代码
sudo systemctl start rsyncd
sudo systemctl enable rsyncd

步骤2:在源服务器(A)上推送备份

bash 复制代码
rsync -avz --password-file=/etc/rsync-pass \
  /var/www/ \
  backupuser@192.168.1.200::backup/web-$(date +%F)

创建密码文件:

bash 复制代码
echo "MyBackupPass123" | sudo tee /etc/rsync-pass
sudo chmod 600 /etc/rsync-pass

步骤3:自动化

将命令加入 cron,每日执行。

✅ 一个安全、高效的集中备份系统搭建完成!


✅ 本章小结

工具 用途 命令示例
tar 归档备份 tar -czf backup.tar.gz /etc
rsync 增量同步 rsync -avz /src/ user@host:/dest/
cron 自动化 30 2 * * * /backup_script.sh
LVM snapshot 应用一致性备份 lvcreate -s -n snap /dev/vg/lv
rsync daemon 集中备份服务器 /etc/rsyncd.conf 配置

📝 课后练习

  1. 使用 tar 备份 /home 目录到 /backup/home-日期.tar.gz
  2. 使用 rsync/tmp/data 同步到 /backup/data
  3. 编写一个脚本,每天备份 /etc/var/log
  4. 将备份脚本添加到 crontab,每天凌晨 3 点执行。
  5. (挑战)在两台虚拟机之间搭建 rsync 备份服务器,实现远程推送备份。
  6. (演练)模拟数据丢失,从备份中恢复一个配置文件。

🔜 下一章预告:第24章《openEuler 内核与模块管理》

我们将学习:

  • 查看内核版本与编译信息
  • 理解内核模块(.ko)的作用
  • 使用 lsmodmodprobeinsmodrmmod 管理模块
  • 加载与卸载内核模块实战
  • 内核升级与补丁管理基础
  • 实战:加载一个自定义内核模块

准备好深入操作系统"心脏"了吗?

相关推荐
数据知道2 小时前
MongoDB内存使用优化:working set理论与缓存命中率提升策略
数据库·mongodb
静候光阴2 小时前
为本地ollama设置网页搜索mcp服务器
运维·服务器
SelectDB技术团队2 小时前
OLAP 无需事务?Apache Doris 如何让实时分析兼具事务保障
数据库·数据仓库·人工智能·云原生·实时分析
数据库小组2 小时前
NineData 社区版慢 SQL 功能能做什么?给 DBA 的一套本地化治理工具
数据库·sql·dba·慢sql·数据库管理工具·ninedata·迁移工具
老友@2 小时前
微服务全面解析:架构、组件与底层原理
数据库·spring·oracle
艾莉丝努力练剑2 小时前
确保多进程命名管道权限一致的方法
java·linux·运维·服务器·开发语言·网络·c++
听雪楼主.2 小时前
某金融客户核心业务系统SQL优化案例(一)
数据库·sql优化
不过普通话一乙不改名2 小时前
高可用:mysql主备keepAlived+vip
数据库·mysql