在 IT 运维中,数据是最宝贵的资产 。一次误删、硬盘故障或勒索病毒,都可能导致业务中断、数据永久丢失。"没有备份的系统等于裸奔" 。本章将带你建立科学的备份与恢复体系,掌握 tar、rsync 等核心工具,利用 LVM 快照确保应用一致性,并制定可落地的灾难恢复计划,为你的 openEuler 系统加上"安全保险"。
🌟 本章目标
- 理解备份的重要性与 RTO/RPO 基本概念
- 掌握
tar和rsync进行本地与远程备份 - 使用
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)
备份不是目的,可恢复才是关键。
📋 灾难恢复计划应包含
| 项目 | 说明 |
|---|---|
| 恢复流程 | 从备份恢复的详细步骤(谁、何时、如何做) |
| 联系人列表 | 运维、开发、管理层联系方式 |
| 备份位置 | 本地、远程、云存储地址 |
| 恢复验证 | 如何验证数据完整性和系统可用性 |
| 演练计划 | 每季度/半年进行一次恢复演练 |
🧪 恢复演练示例
- 停止服务
- 挂载备份磁盘
- 解压
etc-*到/(恢复配置) - 解压
web-*到/var/www - 启动服务
- 测试访问
✅ 演练能暴露备份方案的缺陷。
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 配置 |
📝 课后练习
- 使用
tar备份/home目录到/backup/home-日期.tar.gz。 - 使用
rsync将/tmp/data同步到/backup/data。 - 编写一个脚本,每天备份
/etc和/var/log。 - 将备份脚本添加到
crontab,每天凌晨 3 点执行。 - (挑战)在两台虚拟机之间搭建 rsync 备份服务器,实现远程推送备份。
- (演练)模拟数据丢失,从备份中恢复一个配置文件。
🔜 下一章预告:第24章《openEuler 内核与模块管理》
我们将学习:
- 查看内核版本与编译信息
- 理解内核模块(.ko)的作用
- 使用
lsmod、modprobe、insmod、rmmod管理模块 - 加载与卸载内核模块实战
- 内核升级与补丁管理基础
- 实战:加载一个自定义内核模块
准备好深入操作系统"心脏"了吗?