云服务器上运行CentOS 8如何平滑迁移至AlmaLinux或Rocky Linux?

将 CentOS 8(已 EOL)平滑迁移到 AlmaLinux 或 Rocky Linux 是一项关键运维任务。由于 CentOS 8 在 2021-12-31 正式终止支持,继续使用存在严重安全与兼容性风险。以下是一套经过生产验证、低风险、可回滚的平滑迁移方案,适用于云服务器(如阿里云、腾讯云、AWS、Azure 等),以 AlmaLinux 8(推荐,社区活跃、Red Hat 兼容性强)为例,Rocky Linux 8 步骤几乎完全相同。

⚠️ 重要前提

  • 仅适用于 CentOS 8.x(非 CentOS Stream)
  • ✅ 迁移目标为同版本大系:CentOS 8 → AlmaLinux 8 / Rocky Linux 8(不跨主版本,如不可直迁至 AlmaLinux 9);
  • ✅ 所有操作均在原系统内执行(in-place upgrade),无需重装或重建实例;
  • ✅ 建议在非生产环境充分测试,并确保完整快照/备份(云平台快照 + /etc, /home, 应用数据等逻辑备份)。

✅ 一、迁移前准备(必做)

1. 检查当前系统状态

# 确认是 CentOS 8(且非 Stream)
cat /etc/redhat-release
# 输出应为:CentOS Linux release 8.x.x

# 检查内核与架构(x86_64/aarch64)
uname -r && uname -m

# 更新当前系统至最新(修复潜在依赖问题)
sudo dnf update -y --refresh

# 清理旧包缓存
sudo dnf clean all

2. 备份关键配置(自动化脚本推荐)

# 创建备份目录
sudo mkdir -p /root/migration-backup
# 备份核心配置
sudo cp -a /etc/{yum.repos.d,selinux,systemd,firewalld,ssh} /root/migration-backup/
sudo cp -a /etc/{hosts,hostname,fstab,grub2} /root/migration-backup/
# 备份已安装包列表(用于验证)
rpm -qa --qf '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}n' | sort > /root/migration-backup/rpm-list-before.txt

3. 停止非必要服务(降低迁移冲突风险)

# 示例(按需调整):
sudo systemctl stop docker nginx httpd mysql redis
# ⚠️ 注意:数据库服务停止前请确保已备份!

4. 安装必要工具

sudo dnf install -y dnf-plugins-core yum-utils python3-pip

✅ 二、执行迁移(AlmaLinux 8 为例)

✅ 推荐使用官方迁移工具 almalinux-deploy(由 AlmaLinux 团队维护,比手动替换 repo 更可靠)

方式一:使用官方 almalinux-deploy(首选 ✅)

# 下载并运行迁移脚本(自动检测、校验、替换)
curl -O https://raw.githubusercontent.com/AlmaLinux/almalinux-deploy/master/almalinux-deploy.sh
chmod +x almalinux-deploy.sh

# 🔍 首先预检(dry-run,不修改系统)
sudo ./almalinux-deploy.sh --dry-run

# ✅ 若预检通过(无 ERROR),执行实际迁移
sudo ./almalinux-deploy.sh

# 脚本会自动完成:
# - 替换所有 centos-* repo 为 almalinux-*;
# - 替换 gpgkeys;
# - 清理元数据并重置 DNF 缓存;
# - 升级所有基础包(kernel, glibc, systemd 等);
# - 生成新 initramfs & 更新 GRUB。

方式二:手动迁移(备选,适合定制化需求)

# 1. 备份原 repo
sudo mv /etc/yum.repos.d/CentOS-* /root/migration-backup/

# 2. 下载 AlmaLinux repo(国内用户建议用镜像提速)
sudo curl -o /etc/yum.repos.d/almalinux.repo https://mirrors.aliyun.com/almalinux/8/BaseOS/x86_64/os/repodata/repomd.xml?repo=BaseOS&arch=x86_64 | true
# 更规范做法(推荐):
sudo tee /etc/yum.repos.d/almalinux.repo << 'EOF'
[baseos]
name=AlmaLinux $releasever - BaseOS
baseurl=https://mirrors.aliyun.com/almalinux/$releasever/BaseOS/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=https://mirrors.aliyun.com/almalinux/RPM-GPG-KEY-AlmaLinux

[appstream]
name=AlmaLinux $releasever - AppStream
baseurl=https://mirrors.aliyun.com/almalinux/$releasever/AppStream/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=https://mirrors.aliyun.com/almalinux/RPM-GPG-KEY-AlmaLinux

[extras]
name=AlmaLinux $releasever - Extras
baseurl=https://mirrors.aliyun.com/almalinux/$releasever/extras/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=https://mirrors.aliyun.com/almalinux/RPM-GPG-KEY-AlmaLinux
EOF

# 3. 清理并切换
sudo dnf clean all
sudo dnf distro-sync -y --releasever=8

# 4. 替换发行版标识文件(关键!)
sudo sed -i 's/CentOS/Linux/g' /etc/os-release
sudo sed -i 's/centos/almalinux/g' /etc/os-release
sudo sed -i 's/8.[0-9]*/8/g' /etc/os-release
# 手动确认 /etc/os-release 内容已更新为 AlmaLinux
cat /etc/os-release | grep -E "NAME|VERSION|ID"

✅ 三、迁移后验证与加固

1. 基础验证

# ✅ 检查 OS 信息
cat /etc/os-release  # 应显示 ID=almalinux, NAME="AlmaLinux"

# ✅ 检查内核与基础包是否更新
uname -r  # 应为 AlmaLinux 提供的 kernel(如 4.18.0-477.*)
rpm -q kernel glibc systemd

# ✅ 检查仓库源是否生效
dnf repolist  # 应只显示 almalinux-* repo,无 centos-*(若有,禁用:sudo dnf config-manager --disable centos-*)

2. 关键服务验证(按需)

# 启动并检查核心服务
sudo systemctl start firewalld sshd chronyd
sudo systemctl enable firewalld sshd chronyd
sudo firewall-cmd --state  # 应输出 running

# 验证网络、DNS、SELinux(若启用)
getenforce  # 应为 Enforcing/Permissive(与迁移前一致)

3. 应用兼容性检查(重点!)

  • ✅ Web 服务(Nginx/Apache):nginx -t / httpd -t,重启服务
  • ✅ 数据库(MySQL/PostgreSQL):启动服务,连接测试,检查字符集/权限
  • ✅ Python/Node.js 环境:python3 --version, node --version,验证 pip/npm 包
  • ✅ 自定义脚本/定时任务:检查 /etc/cron.*, /var/spool/cron/
  • ✅ SELinux 策略:若应用报 AVC denied,用 ausearch -m avc -ts recent | audit2why 分析

4. 安全加固(迁移后立即执行)

# 更新全部包(含安全补丁)
sudo dnf update -y

# 安装 EPEL(如需)
sudo dnf install -y epel-release

# 可选:启用 AlmaLinux 安全公告订阅(https://wiki.almalinux.org/security/)

✅ 四、回滚方案(万一失败)

⚠️ 迁移前已创建云平台快照,则直接回滚最安全!
若需手动回滚(仅限未重启前):

# 1. 恢复原 repo
sudo rm -f /etc/yum.repos.d/almalinux.repo
sudo mv /root/migration-backup/CentOS-* /etc/yum.repos.d/

# 2. 清理并重装 CentOS 核心包(谨慎!)
sudo dnf clean all
sudo dnf distro-sync -y --releasever=8 --setopt=install_weak_deps=False

# 3. 恢复 os-release
sudo cp /root/migration-backup/os-release /etc/os-release  # 如之前备份过
# 或手动编辑 /etc/os-release 恢复为 CentOS 内容

💡 提示:若已重启且系统异常,优先使用云平台快照恢复,切勿强行修复。


✅ 五、Rocky Linux 8 迁移差异说明

  • 工具:使用 rocky-upgrade(https://github.com/rocky-linux/rocky-tools)
    curl -O https://raw.githubusercontent.com/rocky-linux/rocky-tools/main/rocky-upgrade
    chmod +x rocky-upgrade
    sudo ./rocky-upgrade --dry-run  # 先预检
    sudo ./rocky-upgrade
  • repo 地址替换为 https://mirrors.aliyun.com/rocky/8/...
  • 其余步骤(验证、回滚)完全一致。

🌟 最佳实践建议

项目 建议
时机 选择业务低峰期,预留 2 小时窗口(含测试)
监控 迁移前后对比 df -h, free -h, ss -tuln
日志 全程记录命令输出:script /root/migration.log
云平台适配 阿里云/腾讯云需确认 cloud-init 兼容性(AlmaLinux 8 默认支持);AWS 需检查 ec2-net-utils 是否需更新
长期规划 CentOS 8 → AlmaLinux 8 是过渡;建议 6–12 个月内升级至 AlmaLinux 9(RHEL 9 兼容)

总结

使用 almalinux-deploy.sh --dry-run 预检 → 全量更新 → 严格验证 → 快速回滚能力 = 平滑迁移。
真正的“平滑”不在于速度,而在于可预测性、可观测性与可逆性。

如需我为你生成一键迁移脚本(含预检+备份+回滚函数)针对特定应用(如宝塔面板、Docker、MySQL 8.0)的兼容性检查清单,欢迎随时提出,我可以立即为你定制。

未经允许不得转载:CLOUD云枢 » 云服务器上运行CentOS 8如何平滑迁移至AlmaLinux或Rocky Linux?