升级 CentOS 版本(如从 CentOS 7 升级到 CentOS Stream 或迁移到 Rocky Linux/AlmaLinux)时,核心原则是:先完整备份系统状态和用户数据,再执行升级操作。以下是经过验证的安全操作流程:
🔒 一、升级前关键准备
1. 确认当前系统状态
cat /etc/os-release
df -h # 检查磁盘空间(建议预留至少 20GB 空闲空间)
du -sh /* # 估算各目录大小
2. 制定备份策略(推荐组合方案)
| 备份类型 | 工具/方法 | 保留内容 | 优先级 |
|---|---|---|---|
| 全量系统镜像 | dd + tar 或 rsync |
整个根文件系统 | ⭐⭐⭐⭐⭐ |
| 用户数据专项备份 | tar / rsync |
/home, /root, /var/www, /opt 等自定义目录 |
⭐⭐⭐⭐⭐ |
| 配置文件快照 | git 或手动归档 |
/etc 中关键配置(如 httpd.conf, sshd_config) |
⭐⭐⭐⭐ |
| 数据库备份 | mysqldump / pg_dump |
所有业务数据库 | ⭐⭐⭐⭐⭐ |
✅ 重要提示:避免仅依赖“升级脚本自动备份”,务必人工验证备份完整性。
📦 二、具体备份操作示例
▶ 备份用户主目录与常用数据
# 创建独立备份目录(建议放在外部存储/NFS)
BACKUP_DIR="/backup/centos7-to-new"
mkdir -p "$BACKUP_DIR/{home,etc,data}"
# 备份 /home(排除临时文件)
rsync -avHAX --delete /home/ "$BACKUP_DIR/home/"
--exclude='*/tmp/*' --exclude='*/cache/*'
# 备份 root 家目录及关键配置
rsync -avHAX /root/ "$BACKUP_DIR/data/root_home/"
rsync -avHAX /etc/ "$BACKUP_DIR/etc/" --exclude='network-scripts/'
# 备份 Web 服务数据(示例)
rsync -avHAX /var/www/ "$BACKUP_DIR/data/www/"
▶ 数据库备份(以 MySQL 为例)
# 停止服务确保一致性(生产环境建议用 LVM 快照或热备工具)
systemctl stop mysqld
mysqldump --all-databases --single-transaction > "$BACKUP_DIR/data/all_dbs.sql"
systemctl start mysqld
# PostgreSQL 示例
pg_dumpall -U postgres > "$BACKUP_DIR/data/pg_all.sql"
▶ 可选:生成系统清单(便于恢复后比对)
rpm -qa --queryformat '%{NAME}-%{VERSION}-%{RELEASE}n' > "$BACKUP_DIR/system_packages.txt"
dpkg -l >> "$BACKUP_DIR/system_packages.txt" 2>/dev/null || true
🔄 三、升级路径选择(CentOS 已停更,需迁移)
| 原系统 | 推荐目标 | 官方迁移工具 |
|---|---|---|
| CentOS 7 | Rocky Linux 8/9 | migrate2rocky |
| CentOS 7 | AlmaLinux 8/9 | almalinux-deploy |
| CentOS 7 → 8 | CentOS Stream 8 | centos-release-stream + dnf system-upgrade |
⚠️ 注意:CentOS 7 已于 2024-06-30 EOL,不建议直接升级到 CentOS Stream(非 LTS),优先选择 Rocky/AlmaLinux。
示例:迁移到 Rocky Linux 8
# 1. 安装迁移工具
sudo dnf install migrate2rocky
# 2. 执行迁移(会重启)
sudo migrate2rocky --yes
# 3. 迁移后验证
cat /etc/os-release
🧪 四、升级后验证清单
| 检查项 | 命令/操作 |
|---|---|
| 系统版本确认 | cat /etc/os-release |
| 关键服务状态 | systemctl is-active httpd sshd mysql |
| 用户数据完整性 | diff -r /home/old_backup /home/ |
| 配置文件差异 | diff -r /etc /etc_backup |
| 日志异常扫描 | grep -i "error|fail" /var/log/messages | tail -50 |
🆘 五、回滚方案(必须提前准备!)
- 保留旧系统分区:升级前对根分区做 LVM 快照
lvcreate -L 10G -s -n centos7_snapshot /dev/vg0/root - 记录启动参数:保存
/boot/grub2/grub.cfg和内核版本 - 测试恢复流程:在隔离环境演练一次完整恢复
💡 最佳实践建议
- ✅ 在测试环境先行验证整个升级+恢复流程
- ✅ 使用自动化备份脚本(含校验和验证)
- ✅ 升级期间保持监控告警(CPU/内存/磁盘 IO)
- ❌ 禁止在生产环境直接运行
yum distro-sync跨大版本升级
需要我针对您的具体场景(如是否含 Docker/容器、特定应用栈)提供定制化备份脚本吗?
PHPWP博客