CentOS Stream 8 系统备份与恢复实操指南
一 备份策略与准备
- 备份目标与取舍:优先保护配置与可变数据,建议至少覆盖 /etc(系统配置)、/var(日志、数据库、包缓存等)。不建议直接对运行中的根分区做镜像级备份,若必须做整盘镜像,请在救援/离线环境操作。
- 运行环境:准备一块容量足够的本地盘或网络存储(NFS/SFTP),备份期间避免写入大量临时文件。
- 版本提醒:CentOS Stream 8 已于 2024-05-01 终止维护,存在安全风险;完成备份后建议尽快迁移至 CentOS Stream 9 或 Rocky Linux 8/9。
二 方法一 rsync 增量备份(文件级,推荐)
- 基本思路:用 rsync 同步关键目录到备份位置,按日期分层,便于回滚与保留多份历史。
- 步骤与示例:
- 创建备份目录
sudo mkdir -p /backups/centos_stream/$(date +%Y%m%d)
- 同步关键目录(排除虚拟与临时文件系统)
sudo rsync -aAX --info=progress2
–exclude={“/dev/“,”/proc/”,“/sys/“,”/tmp/”,“/run/“,”/mnt/”,“/media/“,”/lost+found"}
/etc/ /backups/centos_stream/$(date +%Y%m%d)/etc/
sudo rsync -aAX --info=progress2
–exclude={"/dev/”,“/proc/“,”/sys/”,“/tmp/“,”/run/”,“/mnt/“,”/media/”,“/lost+found”}
/var/ /backups/centos_stream/$(date +%Y%m%d)/var/
- 可选归档与校验
sudo tar -czvf /backups/centos_stream/$(date +%Y%m%d)/etc_var_$(date +%F).tar.gz
-C /backups/centos_stream/$(date +%Y%m%d) etc var
sha256sum /backups/centos_stream/$(date +%Y%m%d)/etc_var_$(date +%F).tar.gz \
/backups/centos_stream/$(date +%Y%m%d)/etc_var_$(date +%F).sha256
- 远程备份(示例到 SSH 主机)
rsync -aAX --info=progress2
–exclude={“/dev/“,”/proc/”,“/sys/“,”/tmp/”,“/run/“,”/mnt/”,“/media/*”,“/lost+found”}
/etc/ user@backup.example.com:/backups/$(hostname)-$(date +%Y%m%d)/etc/
- 说明:参数 -aAX 保留权限、属主、ACL、扩展属性;排除列表覆盖运行时虚拟文件系统与挂载点,避免重复备份与不一致。
三 方法二 tar 全量归档(文件级)
- 适用场景:需要一次性打包核心配置与数据的场景。
- 示例命令:
sudo tar -czvf /backups/centos_stream/full_$(date +%F).tar.gz
–exclude=/proc --exclude=/sys --exclude=/dev --exclude=/run --exclude=/tmp
–exclude=/mnt --exclude=/media --exclude=/lost+found
/etc /var
- 恢复要点:
sudo tar -xzvf /backups/centos_stream/full_$(date +%F).tar.gz -C /
- 提示:若需包含更多目录(如 /usr/local 或 /opt),在 tar 命令末尾追加路径即可;务必保留相同的排除项以避免将挂载点内容打进归档。
四 方法三 dd 整盘镜像(分区/整盘级,离线)
- 适用场景:需要克隆磁盘或分区、快速还原到相同硬件。
- 步骤与示例:
- 从 LiveCD/救援环境启动(不要在运行中的系统上对系统盘执行 dd)。
- 查看磁盘与分区:
lsblk; fdisk -l
- 整盘镜像(含分区表与引导):
sudo dd if=/dev/sda of=/mnt/backup/disk_sda_$(date +%F).img bs=4M conv=noerror,sync
如需压缩:
sudo dd if=/dev/sda bs=4M conv=noerror,sync | gzip -6 > /mnt/backup/disk_sda_$(date +%F).img.gz
- 还原:
sudo dd if=/mnt/backup/disk_sda_$(date +%F).img of=/dev/sda bs=4M conv=noerror,sync
或解压后还原:
gzip -dc /mnt/backup/disk_sda_$(date +%F).img.gz | sudo dd of=/dev/sda bs=4M conv=noerror,sync
- 收尾:
sync; blockdev --flushbufs /dev/sda
- 重要提示:
- 镜像级还原会覆盖目标盘分区与引导,务必核对目标盘;跨硬件还原可能导致 网卡名变化(如 eth0→eth1) 等,需调整 udev 或网络配置。
- 不建议在挂载的根分区上直接执行 dd;若必须镜像,请离线或在救援环境进行。
五 自动化与恢复演练
- 定时任务示例(每天 02:00 执行):
- 备份脚本 /usr/local/bin/backup_stream8.sh
#!/usr/bin/env bash
set -e
BACKUP_ROOT=“/backups/centos_stream”
DATE=$(date +%Y%m%d)
DIR=“$BACKUP_ROOT/$DATE”
mkdir -p “$DIR”
rsync -aAX --info=progress2
–exclude={“/dev/“,”/proc/”,“/sys/“,”/tmp/”,“/run/“,”/mnt/”,“/media/“,”/lost+found"}
/etc/ “$DIR/etc/”
rsync -aAX --info=progress2
–exclude={"/dev/”,“/proc/“,”/sys/”,“/tmp/“,”/run/”,“/mnt/“,”/media/”,“/lost+found”}
/var/ “$DIR/var/”
tar -czvf “$DIR/etc_var_$DATE.tar.gz” -C “$DIR” etc var
sha256sum “$DIR/etc_var_$DATE.tar.gz” > “$DIR/etc_var_$DATE.sha256”
- 赋权与定时
chmod +x /usr/local/bin/backup_stream8.sh
crontab -e
0 2 * * * /usr/local/bin/backup_stream8.sh
- 恢复演练建议:
- 定期在测试环境验证:按日期目录执行 tar 还原或 rsync 回拷,检查关键服务与配置是否可用;校验 SHA256 确保一致性。
- 数据库等应用数据建议采用各自工具(如 mysqldump)单独备份并在恢复时按序启动服务。