在阿里云 ECS 上将 CentOS 8 平滑迁移到 Rocky Linux,官方不推荐直接升级(CentOS 8 已于 2021 年停止维护),而是建议通过系统重建或数据迁移方式完成。以下是安全、可操作的完整方案:
✅ 推荐方案:使用 migrate2rocky 工具 + 备份验证
适用于希望保留现有配置、应用和数据的最小化变更场景。
🔧 前置准备
-
创建快照备份
在阿里云控制台对当前 ECS 实例创建磁盘快照(至少包含系统盘/dev/vda)。# 可选:本地备份关键目录 tar -czf /tmp/backup-configs.tar.gz /etc /var/log /root/.ssh -
确认兼容性
检查是否运行了仅支持 CentOS 的专有软件(如某些旧版 RHEL/CentOS 专用驱动或脚本):rpm -qa | grep -E 'centos|rhel' systemctl list-unit-files | grep -i centos -
安装迁移工具
CentOS 8 已无 yum 源,需先临时启用 EPEL 或手动安装migrate2rocky:# 方法1:从 GitHub 下载并执行(推荐) wget https://raw.githubusercontent.com/rocky-linux/migrate2rocky/main/migrate2rocky.sh chmod +x migrate2rocky.sh # 方法2:若已有网络访问,尝试临时挂载 CentOS Stream 8 repo(不稳定) # 不推荐,易导致依赖混乱 -
执行迁移
⚠️ 务必在测试环境验证后再生产操作!sudo ./migrate2rocky.sh --force工具会自动:
- 替换所有
centos相关包为rocky版本 - 更新
/etc/os-release、GRUB 配置 - 修复 SELinux 策略和防火墙规则
- 生成迁移报告
migration-report.txt
- 替换所有
-
重启并验证
reboot # 启动后检查 cat /etc/os-release # 应显示 Rocky Linux 8.x rpm -qa | grep rocky # 确认核心包已切换 systemctl status # 检查服务状态
🔄 备选方案(更稳妥):新实例迁移法
适合对稳定性要求高、允许短暂停机或支持灰度发布场景。
步骤:
-
在新区域/可用区创建 Rocky Linux 8/9 ECS 实例
- 选择镜像:阿里云市场 → “Rocky Linux 8” 或 “Rocky Linux 9”
- 配置相同安全组、VPC、标签等
-
同步数据与应用
# 原 CentOS 8 实例上打包数据 rsync -avz --exclude '/proc/*' --exclude '/sys/*' /home/ user@new-rocky-ip:/home/ # 或使用阿里云 OSS 中转大文件 ossutil cp -r /data/oss://bucket-name/data-backup/ -
迁移配置文件与代码
- 手动迁移
/etc/nginx,/etc/my.cnf, 自定义脚本等 - 使用 Ansible/SaltStack 批量部署(推荐)
- 手动迁移
-
DNS 切换或负载均衡重定向
- 修改 CNAME 指向新 IP
- 或在 SLB 后端服务器组中替换旧实例
-
监控与回滚预案
- 观察日志、性能指标 ≥24 小时
- 保留旧实例快照,7 天内可随时回退
❌ 避免的做法
- 直接运行
yum update或dnf system-upgrade(CentOS 8 已无官方源) - 手动替换
/etc/yum.repos.d/后强制升级(极易破坏依赖链) - 忽略 SELinux/AppArmor 策略差异(可能导致服务无法启动)
📌 阿里云专属优化建议
| 项目 | 操作 |
|---|---|
| 云助手命令 | 用 aliyuncli ecs ExecuteCommand 远程执行迁移脚本 |
| 自动快照策略 | 迁移前设置“每日快照”,持续保留 7 天 |
| 云监控告警 | 新增 CPU/内存/磁盘 IO 阈值告警,对比迁移前后基线 |
| 镜像定制 | 迁移成功后保存为新自定义镜像,供后续复用 |
需要我提供:
migrate2rocky.sh的完整校验脚本?- Ansible Playbook 示例(自动化迁移配置)?
- 针对特定应用(如 WordPress、MySQL)的迁移 checklist?
请告诉我您的具体场景(业务类型、停机窗口、是否允许双跑),我可进一步定制方案。
PHPWP博客