将企业服务器从 CentOS 7.6 迁移至 AlmaLinux 或 Rocky Linux(两者均为 RHEL 7 兼容发行版)是一项跨发行版的“就地升级”操作,但需特别注意:CentOS 7 → AlmaLinux/Rocky Linux 7 是可行的(同代迁移),而升级到 RHEL 8/9 或 AlmaLinux/Rocky 8/9 则属于跨大版本,官方不支持就地升级,必须重装。
以下针对 CentOS 7.6 → AlmaLinux 7.x 或 Rocky Linux 7.x(推荐 7.9) 的迁移,总结关键注意事项与最佳实践:
✅ 一、前提确认(迁移可行性判断)
| 项目 | 要求 | 检查命令 |
|---|---|---|
| 系统版本兼容性 | 必须为 CentOS 7.x(≤7.9),且内核 ≥ 3.10.0-957(7.6 可行) | cat /etc/centos-release; uname -r |
| 架构一致性 | 仅支持 x86_64(不支持 i386/ARM) | uname -m |
| 磁盘空间 | / 和 /boot 需预留 ≥2GB 空闲(升级过程需下载 RPM、重建 initramfs) |
df -h |
| SELinux 状态 | 建议 enforcing 或 permissive(禁用 SELinux 可能导致策略失效) |
sestatus |
| 系统干净度 | 无第三方内核(如 elrepo-kernel、kpatch)、无深度定制内核模块 | rpm -q kernel | grep -v centos; lsmod | head -20 |
⚠️ 重要限制:
- ❌ 不支持从 CentOS 7 升级到 AlmaLinux/Rocky 8.x 或 9.x(RHEL 8/9 架构变化大,无官方升级路径);
- ❌ 不支持
systemd版本跨大版本(如 CentOS 7 systemd-219 → RHEL 8 systemd-239);- ✅ 官方唯一支持路径:CentOS 7.x → AlmaLinux 7.x / Rocky Linux 7.x(同为 RHEL 7 衍生版,ABI/API 兼容)。
✅ 二、迁移前必备准备
-
完整备份(不可跳过!)
- 使用
rsync或专业工具(Veeam, Bacula)备份/etc,/var,/opt,/home, 数据库目录; - 备份 GRUB 配置、网络配置(
/etc/sysconfig/network-scripts/)、自定义服务单元; - 快照(VM 环境)或物理机 PXE+救援盘备份。
- 使用
-
停用非必要服务 & 清理环境
# 停止应用服务(如 httpd, nginx, mysql, custom apps) systemctl stop your-app.service # 清理旧内核(保留至少1个可用内核) package-cleanup --oldkernels --count=1 # 更新当前系统到 CentOS 7.9(强烈建议,避免补丁差异) yum update -y && reboot -
验证关键依赖与自定义软件
- 检查是否使用了
centos-release、centos-repos等包(将被替换); - 确认所有第三方仓库(EPEL、Remi、Nginx 官方等)在目标系统中仍可用(Alma/Rocky 7 默认启用 EPEL);
- 检查自编译软件(如 Python 3.9+、Node.js)是否依赖特定 CentOS 库(通常无问题,但需测试)。
- 检查是否使用了
✅ 三、迁移执行(以 Rocky Linux 7.9 为例,AlmaLinux 流程相同)
✅ 推荐使用官方迁移脚本(由 Rocky/Alma 团队维护):
# 1. 下载并校验迁移脚本(Rocky Linux) curl -O https://raw.githubusercontent.com/rocky-linux/rocky-tools/main/migrate2rocky/migrate2rocky.sh sha256sum migrate2rocky.sh # 对比官网发布的 checksum
2. 赋予执行权限并运行(自动处理 repo 替换、包替换、grub 更新)
sudo bash migrate2rocky.sh -r # -r 表示 Rocky;AlmaLinux 用 -a
3. 过程中会提示确认,选择 Y 继续
脚本将:
• 替换 /etc/yum.repos.d/ 下所有 centos- 为 rockylinux-(或 alma-*)
• 重装 core 包(glibc, systemd, kernel, etc.)
• 重建 initramfs 和 grub 配置
• 清理 centos-release 包,安装 rockylinux-release(或 almalinux-release)
> 🔍 **AlmaLinux 替代方案**(若 prefer Alma):
> ```bash
> curl -O https://raw.githubusercontent.com/AlmaLinux/almalinux-deploy/main/almalinux-deploy.sh
> sudo bash almalinux-deploy.sh
> ```
---
### ✅ 四、迁移后必检清单(生产环境上线前)
| 类别 | 检查项 | 命令/方法 |
|--------|---------|-------------|
| **基础系统** | 主机名、时区、语言 | `hostnamectl`, `timedatectl`, `localectl` |
| **内核与启动** | 默认内核是否为 Rocky/Alma 内核?GRUB 是否生效? | `uname -r`, `grubby --default-kernel`, `ls /boot/vmlinuz*` |
| **软件源** | YUM/DNF 源是否指向正确仓库?能否更新? | `yum repolist`, `yum makecache`, `yum check-update` |
| **关键服务** | SSH、network、firewalld、cron 是否自启且运行? | `systemctl list-units --state=failed`, `systemctl status sshd` |
| **安全机制** | SELinux 是否 enforcing?策略是否加载? | `sestatus -v`, `ausearch -m avc -ts recent` |
| **业务验证** | 应用端口监听、数据库连接、Web 页面访问、定时任务日志 | `ss -tlnp`, `mysql -u...`, `curl -I http://localhost` |
| **日志审计** | `/var/log/messages`, `journalctl -b` 中有无严重错误(如 kernel oops、selinux denials) | `journalctl -p 3 -b`(error 及以上) |
> 💡 提示:
> - 若遇到 `Failed to start NetworkManager-wait-online.service`:检查网卡名是否变更(CentOS 7 默认 `eno1`/`ens33`,Rocky/Alma 可能一致,但若启用了 `biosdevname=0` 或 `net.ifnames=0` 则无影响);
> - 若 `firewalld` 规则丢失:检查 `/etc/firewalld/zones/` 是否保留,或从备份恢复 `firewalld.conf` 和 zone 文件。
---
### ✅ 五、长期运维建议
- ✅ **订阅安全公告**:关注 [Rocky Linux Security Advisories](https://errata.rockylinux.org/) 或 [AlmaLinux Security](https://almalinux.org/security/);
- ✅ **启用自动安全更新**(谨慎评估):
```bash
yum install yum-cron
systemctl enable --now yum-cron
# 编辑 /etc/yum/yum-cron.conf → 设置 update_cmd = security
- ✅ 统一配置管理:将
/etc配置纳入 Git + Ansible/Puppet,避免手工修改漂移; - ✅ 规划生命周期:Rocky Linux 7 / AlmaLinux 7 支持至 2024年6月30日(RHEL 7 EOL),建议同步规划向 Rocky/Alma 8 或 9 迁移(需重装,非就地升级)。
❌ 六、常见陷阱与避坑指南
| 问题现象 | 原因 | 解决方案 |
|---|---|---|
yum update 报错 “Cannot retrieve metalink…” |
旧 epel-release 未适配新 baseurl |
yum reinstall epel-release 或手动编辑 /etc/yum.repos.d/epel.repo |
登录后提示 -bash: command not found(如 ls, cp) |
glibc 升级中断或损坏 |
从救援模式 chroot,重装 glibc: yum reinstall glibc --disablerepo=* --enablerepo=base |
Docker 启动失败(cgroup v2 相关) |
Rocky/Alma 7.9 默认启用 cgroup v2(CentOS 7.6 默认 v1) | 在 /etc/default/grub 添加 systemd.unified_cgroup_hierarchy=0,然后 grub2-mkconfig -o /boot/grub2/grub.cfg |
| 自定义内核模块(如 ZFS、NVIDIA)无法加载 | 模块未为新内核重新构建 | 重新安装对应 kmod 包,或 dkms build/install(需安装 kernel-devel) |
✅ 总结:迁移决策树
graph TD
A[CentOS 7.6] --> B{目标版本?}
B -->|Rocky/Alma 7.x| C[✅ 就地迁移:用官方脚本]
B -->|Rocky/Alma 8.x/9.x| D[❌ 不支持就地升级 → 必须重装]
C --> E[备份 → 更新至7.9 → 运行 migrate2rocky.sh → 全面验证]
D --> F[制定重装方案:PXE/Autoinstall + 配置即代码 + 数据迁移]
📌 最后建议:
- 先在测试环境完整走通流程(含回滚演练);
- 生产环境安排维护窗口,预留 2–3 小时(含验证);
- 记录所有手工调整,沉淀为自动化脚本;
- 迁移完成后,立即更新监控告警中的 OS 标签(Zabbix/Prometheus)。
如需,我可提供:
- 定制化迁移检查清单(Excel/Markdown)
- 自动化验证脚本(Shell/Ansible)
- Rocky/Alma 7.9 最小化部署模板(Kickstart)
- 向 RHEL 8/9 迁移的分阶段重装方案
欢迎随时提出具体场景(如含 Oracle DB、Kubernetes 集群、老旧 Java 应用),我可针对性补充建议。
云知道CLOUD