CentOS停服后迁移实战:Rocky Linux兼容性、静态IP与离线部署全攻略
发布时间:2026/9/20 14:46:05 作者:尧图编辑部 阅读量:1,286

1. CentOS 停服之后Rocky Linux 凭什么接住这批存量用户先还原一个几乎是所有运维同行都经历过的场景你打开监控系统扫了一眼还有几十台 CentOS 7.9 的服务器在跑生产业务然后想起来 Red Hat 官方早就停了 CentOS 7 的维护CVE 漏洞库里的新洞已经没人给你补了。紧接着你打开浏览器搜索框里留着昨天没关的标签页——“centos 7.9 下载”“centos 镜像 清华”“centos 离线安装 docker”。那一刻你会意识到不管以前多喜欢 CentOS现在都得认真考虑一个问题这批机器到底往哪迁。我当时的第一反应是切 Debian 系但评估了一轮之后放弃了原因很简单我们团队手头的脚本、Ansible 角色、系统调优参数、监控采集项全部是按 RHEL 系的路径设计的。贸然跳到 Debian 系等于把底层习惯重学一遍迁移成本远高于收益。所以把目光放在了 RHEL 的兼容发行版上当时候选有三个Rocky Linux、AlmaLinux、Oracle Linux。逐个试过之后我最终选择 Rocky Linux 作为主力迁移目标并且在几十台生产机器和若干新项目里稳定跑了大半年。这篇文章就把我为什么选它、怎么迁、迁移之后踩过的坑全部分享出来。先说结论Rocky Linux 是由 CentOS 原联合创始人 Gregory Kurtzer 发起的项目定位就是 CentOS 的直接继承者目标是与 RHEL 保持高度兼容而且是社区驱动的免费发行版。它不是在 CentOS 死掉之后硬蹭热度而是从项目第一天起就按“不要改变老用户习惯”的思路做的。你原来怎么写 systemd unit、怎么配 yum 源、怎么打 RPM 包、怎么用 firewalld 和 SELinux在 Rocky Linux 上基本可以原样照搬。这一点对于生产环境尤其重要不是所有的迁移都要趁这个机会“重构”很多时候业务方只希望换一个底层上层应用不动。在展开实操之前先给这篇文章划个大概的阅读地图。如果你还处于“要不要迁”的犹豫阶段重点看第 2 和第 3 章搞清楚 Rocky Linux 和 CentOS 的兼容边界以及从选型到实施的整体路线。如果你已经决定迁了可以直接跳到第 4 章里面有实际的操作步骤。第 5 章是迁移之后最容易踩的坑包括网络配置、磁盘扩容、离线环境装软件这些日常高频问题基本每一条我都实际遇到过排查过程也写在了里面。2. Rocky Linux 和 CentOS 的兼容边界哪些能直接用哪些必须重配很多人对“兼容”两个字有误解以为 Rocky Linux 就是 CentOS 换了个名字所有东西都能无缝平移。实际用下来我的结论是绝大部分能平滑过渡但有那么几个地方确实是需要手动处理的。搞清楚这条边界是迁移的起点。2.1 直接兼容的部分包管理、服务管理、内核参数先说最让人省心的部分。Rocky Linux 使用 RPM 包格式yum/dnf 包管理器systemd 服务管理这些和 CentOS 7/8 是完全一致的。你在 CentOS 上写的 shell 脚本、systemd unit 文件、cron 任务、rsyslog 配置、logrotate 规则迁到 Rocky Linux 之后基本都是直接能跑的。我举个具体的例子。我们公司有个内部的数据同步任务原来跑在 CentOS 7.9 上核心是一个 systemd 服务里面依赖了若干环境变量、一个 Python 虚拟环境、还有两个自定义的定时任务。迁移到 Rocky Linux 9 的时候我原以为要改一堆东西结果实际操作里只是把整个应用目录打包拷过去装好 Python 依赖把 systemd unit 文件拷到 /etc/systemd/system/ 下systemctl daemon-reload 然后 enable --now就起来了。连环境变量路径都是绝对路径压根不用动。内核参数方面Rocky Linux 也保留了 RHEL 系的默认风格。比如你习惯在 /etc/sysctl.conf 里调整 vm.swappiness、net.core.somaxconn、fs.file-max 这些参数Rocky Linux 的加载机制和 CentOS 完全一样sysctl -p 依然能直接重载配置。SELinux 也是默认开启的而且 enforcing 模式下的行为和各种布尔值开关比如 httpd_can_network_connect、ftp_home_dir都跟 CentOS 一脉相承。如果你只是跑常规的 Web 服务、数据库、缓存、消息队列这些组件在 Rocky Linux 上的安装方式和行为跟 CentOS 几乎没差别。Nginx、MySQL/MariaDB、PostgreSQL、Redis、RabbitMQ、Kafka 这类软件官方仓库、EPEL 仓库、或者用容器方式部署都和原来的流程一致。2.2 底层版本差异带来的不兼容GLIBC、OpenSSL、Python真正需要提防的是底层的系统库版本差异。Rocky Linux 9 对应的 RHEL 9 内核是 5.14GLIBC 是 2.34而 CentOS 7 的 GLIBC 是 2.17CentOS 8 是 2.28。这意味着你在 CentOS 7 上编译的一些旧软件直接拿到 Rocky Linux 9 上可能链接不到旧版 GLIBC 符号导致启动报错。这里我踩过最大的一个坑是旧版 Oracle 客户端。我们有一套老的 ETL 流程依赖 Oracle Instant Client 11g在 CentOS 7 上跑得好好的迁到 Rocky Linux 9 之后运行时报错./sqlplus: /lib64/libc.so.6: version GLIBC_2.34 not found原因就是老客户端是拿旧版 GLIBC 编译的放到新版系统上反向不兼容。遇到这种情况一般的解法有几个一是升级软件版本换官方支持新版系统的客户端二是用容器把旧软件封在一个兼容镜像里跑三是临时装一个兼容层比如把旧版库文件手动放到指定路径但这种方式不推荐容易破坏系统。所以我的建议是在迁移之前先做一轮“软件兼容性盘点”把现有的应用、数据库客户端、编译工具链、监控 Agent 全部列出来逐个确认是否有对应 Rocky Linux 版本的安装包或者源码是否能在新版系统上编译通过。这一步做得越早后面迁移时越从容。2.3 网络管理方式的变化network-scripts 退役与 NetworkManager 接管这是 CentOS 7 用户迁移到 Rocky Linux 9 时最容易懵的地方。CentOS 7 还保留着 /etc/sysconfig/network-scripts/ifcfg-eth0 这种配置方式虽然默认也装了 NetworkManager但很多人习惯直接改 ifcfg 文件然后用 systemctl restart network 重启网络。Rocky Linux 9 里ifcfg 文件依然存在但 network-scripts 服务已经被移除了网络配置靠 NetworkManager 管理。具体表现是你执行 systemctl restart network 会提示找不到服务正确做法是用 nmcli 或者 nmtui 操作 NetworkManager。这个变化在热搜词里也有体现很多人搜“rocky linux设置静态ip”和“rocky linux系统怎么连有线网”其实就是这个问题。另一个容易忽略的点是Rocky Linux 9 的默认网卡命名规则和 CentOS 7 不一样不是 eth0 而是 ens33、ens160 这类基于固件/拓扑的命名。这在虚拟机里特别明显你用 VMware 装的 CentOS 7 网卡叫 eth0装 Rocky Linux 9 大概率叫 ens160。如果你有脚本里硬编码了 eth0迁移后要记得改。同时Rocky Linux 9 对 NetworkManager 的依赖更强了如果你在配置里手动改了 ifcfg 文件不会自动生效需要执行 nmcli connection reload 或者 nmcli connection up 来让配置重新加载。这一点很多从 CentOS 7 迁过来的人不知道导致改了 IP 不生效、服务起不来还以为是系统坏了。2.4 软件仓库变化BaseOS 与 AppStream 的拆分逻辑CentOS 8 引入了 BaseOS 和 AppStream 仓库的概念Rocky Linux 9 沿用了这套机制。BaseOS 提供核心系统组件AppStream 提供用户态应用和多版本选择能力。比如你在 CentOS 7 上装 PostgreSQL默认装的是 9.2CentOS 8/9 上可以用 dnf module 命令切换不同的 PostgreSQL 版本。这个机制比旧版灵活但也意味着你要适应新的心智模型。实际操作里最常见的困惑是为什么 dnf install nginx 装出来的版本跟原来的不一样因为 AppStream 里默认的 nginx 版本比原 CentOS 7 的旧仓库版本高很多。如果你对版本有明确要求一定要用 dnf module list 查清楚当前流stream提供的版本必要时用 dnf module enable 或 dnf module reset 切换。还有一种情况是某些软件 EPEL 里也有一份AppStream 里也有一份如果不指定仓库可能出现“包装上了但版本不是你想要的”这种尴尬。我自己在迁移时吃过这个亏原来 CentOS 7 上用 EPEL 装了一个特定版本的 PHP迁到 Rocky Linux 9 之后dnf install php 装的是默认版本导致业务代码里的一个扩展不兼容。后来用 dnf module list php 看了一下发现 Rocky 提供了多个 PHP 版本流切到对应版本才解决问题。3. 为什么说 Rocky Linux 而不是 AlmaLinux选型对比和实施路线既然都是 RHEL 兼容版为什么要选 Rocky 而不是 AlmaLinux这个问题我经常被问到这里把我在选型时考虑的维度列出来。我不打算说“Rocky 一定比 Alma 好”这种绝对的话每个团队的情况不一样但我可以把我的判断依据和决策过程摊开讲。3.1 治理模式与社区信任度Rocky Linux 的发起人是 CentOS 的联合创始人 Gregory Kurtzer项目由 Rocky Enterprise Software FoundationRESF管理走的是社区路线强调“永远免费、社区所有”。AlmaLinux 是由 CloudLinux 公司主导发起的也有很强的技术支持而且承诺“永远免费”但治理模式上更偏向企业赞助背景。对我来说这两个都是成熟项目但 Rocky 的社区基因和 CentOS 的历史渊源更让我放心。尤其是 CentOS 停服这件事已经证明了一件事一个发行版能不能活不仅要看技术还要看项目治理是否可持续。Rocky 把“CentOS 的精神”作为核心卖点在这个层面的驱动力更强。当然Alma 这几年发展也很稳如果你的团队更偏好商业公司支持的项目选 Alma 也没问题。3.2 版本节奏与兼容性验证两个发行版都跟 RHEL 保持小版本同步Rocky Linux 9.5 也已经在官方源里发布。我的实际使用体验是Rocky 的版本发布周期很规律大版本发布后短期内就能跟上 RHEL 的次版本更新。而且 Rocky 的安装镜像提供 Minimal、DVD、Everything 等多个变体对网络安装和离线安装都支持得很好。对于生产环境我更看重的是“能不能拿到安全补丁”。Rocky Linux 从 RHEL 源码重新构建安全公告包括 CVE 修复都会同步推送只要你把源指向 Rocky 官方或者镜像源dnf update 就能拿到对应的安全更新。这一点是 CentOS 停服后最核心的诉求Rocky 在这块做得比较让人安心。3.3 迁移的整体实施路线如果你决定往 Rocky Linux 迁移我建议分四步走而不是直接拿着 ISO 把所有机器重装一遍。第一步是盘点。把所有服务器的操作系统版本、应用依赖、网络配置、数据存储方式全部列出来明确哪些是可以重装的、哪些是必须原地升级的、哪些可以迁移到容器里。这一步听起来简单但实际做起来最容易漏很多机器跑了几年上面有什么服务、有什么计划任务可能已经没人说得清了。第二步是选试点。挑一两台业务影响最小的机器用 Rocky Linux 安装并迁移应用跑通之后再逐步扩大范围。我强烈不建议一上来就大范围铺开因为 Rocky Linux 9 相对 CentOS 7 的变化点你还没完全摸清冒进容易翻车。第三步是分批迁移。同一套业务的多台机器可以按照“先边缘、后核心”的顺序。边缘节点比如 Jenkins 从节点、日志采集器、跳板机核心节点比如数据库主库、业务 API 集群放到后面等前面验证充分了再动。第四步是验证和回滚预案。每台机器迁移完成后至少观察 24 小时确认监控指标正常、业务无报错、日志无异常。同时保留迁移前的快照或者备份一旦发现问题能快速回滚。4. 从 CentOS 到 Rocky Linux 的完整实操链路安装、网络、软件源、Docker 环境现在进入动手环节。这一部分我按实际操作的顺序来写覆盖从拿 ISO 镜像到配置业务环境的完整链路。所有命令我都实测过可以直接放到你的迁移文档里。4.1 获取镜像并完成最小化安装获取 Rocky Linux 镜像建议去清华镜像站或者阿里云镜像站下载速度比官方站快得多。Rocky Linux 9 的 ISO 有两种常用变体DVD 版包含了常用软件包适合离线安装Minimal 版只有基础系统适合网络安装源场景。我建议生产环境用 Minimal 装装上之后需要什么再用 dnf 装保持系统最小化减少安全暴露面。用 VMware 或者物理机启动 ISO 后安装界面非常好认跟你装 CentOS 7 的体验几乎一样。如果你是给生产服务器做纯命令行的最小化安装在安装目标里要手动选择“软件选择”只勾选 Minimal Install。磁盘分区可以用自动分区但如果你要跑数据库我建议手动分区尤其是给 /var/lib/mysql 或者 /var/lib/pgsql 单独划分数据盘这样以后扩容和备份都方便。安装过程中的 root 密码和用户创建就不展开了跟 CentOS 没有区别。装完后重启系统默认就是 NetworkManager 在管网络这为之后的静态 IP 配置打下了基础。4.2 配置静态 IPnmcli 是最靠谱的方式从热词里能看到“rocky linux设置静态ip”是搜索量很大的问题这确实是 CentOS 老用户迁移路上第一道坎。我直接把配置过程写出来以最常见的 ens160 网卡为例查看当前网络状态nmcli device status查看连接名称nmcli connection show设置静态 IPnmcli connection modify ens160 \ ipv4.method manual \ ipv4.addresses 192.168.1.100/24 \ ipv4.gateway 192.168.1.1 \ ipv4.dns 8.8.8.8 114.114.114.114使配置生效nmcli connection up ens160注意Rocky Linux 9 里网卡设备名和连接名可能不一样。大多数情况下连接名跟设备名是一样的都是 ens160但有些场景下连接名会是“System ens160”或者类似的名字执行 nmcli connection show 确认一下。如果你写的是设备名而不是连接名modify 会报错。顺带说一句如果你看到网卡配置里用的是 DHCP但想改静态 IP上面这几条命令就是在命令行里完整地完成了这件事。改完后验证一下ip addr show ens160 ip route show如果网关没显示检查一下 NetworkManager 是否自动把连接里的 DEFROUTE 打开了可以用 nmcli connection show ens160 | grep route 查看。4.3 软件源切换官方源还是国内镜像源怎么选装完系统之后第一件事是处理软件源。如果你在国内服务器上直接用官方源大概率慢到怀疑人生。我的做法是直接换成清华或者阿里的镜像源。Rocky Linux 9 的源配置分布在 /etc/yum.repos.d/ 下主要文件是 Rocky-BaseOS.repo 和 Rocky-AppStream.repo。最快的切换方式是用 sed 把源地址里的 mirror.rockylinux.org 换成 mirror.tuna.tsinghua.edu.cn/rocky或者直接用 curl 下载清华提供的对应 repo 文件覆盖。这里我多说一句不要所有机器都一股脑用同一个源我建议把内网构建一个本地镜像源尤其当你有一批机器要迁移的时候。原理很简单所有新机器都往同一个外网镜像拉数据带宽一紧张慢不说还可能被限流。本地镜像源可以先用一台 Rocky Linux 9 机器装 Nginx然后定期用 reposync 从外网同步 BaseOS 和 AppStream 仓库到本地内网机器把 baseurl 指向这台 Nginx 即可。第一次搭建大概需要几小时同步时间之后就是增量同步了带宽占用很低。4.4 Docker 离线安装没有外网的服务器这样装“centos 离线安装 docker”和“rocky linux离线安装docker”是热搜词里出现频率非常高的需求因为生产内网环境里大量服务器不连外网。这事的核心就是在一台有网的机器上把 RPM 包下载好拷到目标机器上离线安装。最简单的方法是使用 dnf 的 downloadonly 插件。在有网的 Rocky Linux 9 机器上执行dnf install --downloadonly --downloaddir/root/docker-rpms docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin这样 RPM 包就会全部落到 /root/docker-rpms 目录下。然后把整个目录拷到内网服务器执行dnf localinstall /root/docker-rpms/*.rpm或者更保守一点先装 containerd.io 再装 docker-ce因为 docker-ce 依赖 containerd新版本 Docker 的依赖关系更复杂直接 localinstall 也会自动解析当前目录下的包顺序不是大问题。装完之后启动 Docker 并设置开机自启systemctl enable --now docker这里有一个我在实际环境里踩过的坑如果你之前在内网机器上用过旧版本的 Docker里面有残留的 iptables 规则或者原来的 docker 组配置装新版 Docker 后 docker0 网桥可能起不来容器之间网络不通。处理办法是把旧的 docker 和 containerd 服务彻底停掉清空 /var/lib/docker 下不需要的历史数据再重新启动。如果只是普通迁移没有历史包袱就不会遇到这个问题。如果你要离线安装特定版本的 Docker先在有网的机器上查一下可用版本dnf list docker-ce --showduplicates确定版本号之后指定即可dnf install --downloadonly --downloaddir/root/docker-rpms docker-ce-27.3.1 docker-ce-cli-27.3.1 containerd.io4.5 NFS 服务搭建与挂载文件共享的高频需求热搜词里也有“centos搭建nfs文件系统”这个需求在迁移到 Rocky Linux 之后同样适用。NFS 在网络存储、应用共享目录、日志集中管理这些场景里太常用了。在 Rocky Linux 9 上安装 NFS 服务端dnf install nfs-utils -y systemctl enable --now rpcbind nfs-server配置共享目录编辑 /etc/exports/data/shared 192.168.1.0/24(rw,sync,no_root_squash,no_subtree_check)然后导出并查看exportfs -r exportfs -v客户端安装并挂载dnf install nfs-utils -y mount -t nfs 192.168.1.10:/data/shared /mnt/shared如果要开机自动挂载在 /etc/fstab 里加上192.168.1.10:/data/shared /mnt/shared nfs defaults,_netdev 0 0这里的 _netdev 选项很关键它告诉系统在网络就绪后再挂载否则开机的时候网络还没起来挂载就会失败。我在 CentOS 7 时代用这个选项一直没问题但 Rocky Linux 9 里如果不加 _netdevsystemd 在开机顺序上就会因为挂载失败打一堆错误。另外 NFS 在 Rocky Linux 9 上默认是 NFSv4如果你有老客户端用 NFSv3 访问需要在 /etc/nfs.conf 里确认开启相关协议版本。一般同版本迁移不会遇到但如果有跨版本混合场景要注意这个兼容点。4.6 系统扩容根分区不够用了怎么办“centos扩容”也是一个高频词。生产服务器跑着跑着根分区满了是运维最头疼的问题之一。Rocky Linux 9 使用 XFS 作为默认文件系统XFS 的特性是支持在线扩容但不能缩容。扩容的常见场景有两种在 VMware 里把磁盘调大然后在系统里扩展分区和文件系统第二种是新增一块磁盘挂载到某个目录。我重点说第一种。先在 VMware 设置里把磁盘大小从 50G 调到 100G然后到系统里lsblk你会看到 sda 磁盘已经变为 100G但分区 sda2 还是 50G且 sda2 是 LVM 的 PV。接下来用 parted 扩展分区parted /dev/sda resizepart 2 100% quit内核重新读取分区表partprobe /dev/sda扩展 LVM 物理卷pvresize /dev/sda2查看卷组和逻辑卷vgdisplay lvdisplay假设根逻辑卷是 /dev/mapper/rl-root扩展它lvextend -l 100%FREE /dev/mapper/rl-root xfs_growfs /最后一行的 xfs_growfs 是 XFS 文件系统扩容命令这个跟 ext4 的 resize2fs 不一样CentOS 7 里用了 ext4 的话是 resize2fsRocky Linux 9 默认 XFS 就是 xfs_growfs千万别搞混。执行完 df -h 确认一下根分区就变大了。这个操作本身不难但有一点要注意如果在 resizepart 之前系统分区已经有数据在写会有一定的风险。生产环境扩容还是建议在业务低峰期操作并且先打快照。4.7 遇到启动卡死dracut initqueue 问题的排查思路热搜词里有“centos卡在starting dracut initqueue hook”这个问题在 Rocky Linux 迁移时我也遇到过。执行 dracut 重新生成 initramfs 之前如果磁盘配置有变动开机就可能卡在这一步。最常见的触发条件是你改了根文件系统或者 swap 分区对应的 UUID而 /etc/default/grub 里的 grub 配置还是旧的。排查思路是这样的在启动卡死界面等一会儿它会自动进入 emergency mode 或者让你输入 root 密码。进入 shell 后先看journalctl -xb | grep -i dracut一般会报找不到某个根设备比如ERROR: Failed to mount the real root device.这时要检查 /etc/fstab 里的根分区 UUID 是否和实际分区一致blkid /dev/mapper/rl-root cat /etc/fstab如果不一致先把 fstab 改对然后重新生成 initramfsdracut --force grub2-mkconfig -o /boot/grub2/grub.cfg如果你用的 BIOS 引导而不是 UEFI上面 grub2-mkconfig 的输出路径是 /boot/grub2/grub.cfgUEFI 引导的话路径是 /boot/efi/EFI/rocky/grub.cfg。这里最容易犯的错误就是路径写错导致 grub 配置没生效。这个问题的根源说到底就是磁盘变化之后引导层和文件系统层的链接丢失了。理解了 dracut 和 fstab 的关系排查起来就很快。4.8 单用户模式重置密码最后补一个高频运维操作单用户模式重置 root 密码。在 Rocky Linux 9 上如果你忘了 root 密码开机时在 GRUB 菜单上按 e 编辑启动项找到 linux 开头的行行尾加上rd.break enforcing0然后按 Ctrlx 启动。系统会进入一个临时的 initramfs shell执行mount -o remount,rw /sysroot chroot /sysroot passwd root如果之前开启了 SELinux重置密码后要执行 touch /.autorelabel否则重启后 SELinux 会因为你改变了 /etc/shadow 文件的上下文而出问题。Rocky Linux 9 的 GRUB 菜单和 CentOS 7 略有不同但操作思路完全一致。这一步在迁移过程中基本都会遇到几次因为迁移时很多人会顺手重置一批机器的密码。5. 迁移后最容易踩的五个坑以及完整的排查链路这一章是我最想写的一部分因为所有的迁移教程讲步骤但很少讲“出了错怎么一步步定位”。以下五个问题基本覆盖了 CentOS 用户迁到 Rocky Linux 之后最常遇见的坑。5.1 网卡名称变了导致脚本失效现象迁移后原来的监控采集脚本、备份脚本因为引用了 eth0 和 eth1 的网卡名全部失效。排查步骤先看 ip addr 确认网卡实际名称发现变成了 ens160 和 ens192。然后检查脚本里对网卡名的引用用 sed 批量替换。如果你希望沿用 eth 风格命名可以在内核启动参数里加 net.ifnames0 biosdevname0但我不建议这么干还是让脚本适配新命名更符合长期维护的方向。这个坑的根源在 systemd 的网卡命名规则CentOS 7 默认用 eth 系列但 Rocky Linux 9 继承了 RHEL 9 的行为优先使用基于设备拓扑的命名。习惯一旦养成了就要在迁移清单里明确标注。5.2 应用服务启动报 GLIBC 版本错误现象某个在 CentOS 7 上编译好的二进制程序在 Rocky Linux 9 上启动直接报 “GLIBC_2.34 not found”。排查步骤先确认二进制文件的依赖库版本objdump -T /path/to/binary | grep GLIBC如果发现它引用的是旧版 GLIBC 符号基本就断定是二进制和新系统不兼容。这种时候不要尝试手动拷贝旧版 libc.so.6 文件到新系统那是给自己挖坑极有可能把系统搞挂。合理的方案是直接升级应用版本或者用容器把旧二进制封装起来在容器镜像里使用兼容的基础镜像跑。5.3 静态 IP 配置不生效现象改了 /etc/sysconfig/network-scripts/ifcfg-ens160 文件里的 IPADDR执行 systemctl restart network结果报错或者不生效。排查步骤先停一下检查一下你的操作方式是否还在用 CentOS 7 的思维。Rocky Linux 9 没有 network.service要用 NetworkManager。如果改了 ifcfg 文件执行nmcli connection reload nmcli connection up ens160如果还是不行用 nmcli connection show ens160 查看当前生效配置。另一种可能你改了 IP 之后网络管理里还残留着旧连接导致新配置跟旧连接冲突。这种直接 nmcli connection delete 掉不需要的连接再重新配。5.4 根分区扩容后系统识别不到新空间现象VMware 里把磁盘调大但 df -h 还是原来的大小。排查步骤先 lsblk 看磁盘整体大小是否变化。如果磁盘大小已经变了但分区没变说明扩展还没做到分区层。按第 4 章里用 parted 的 resizepart 扩展分区。如果分区已经变了但 LVM 里的 PV 没变执行 pvresize。如果 PV 变了但 LV 没变执行 lvextend。最后文件系统这层XFS 要用 xfs_growfsext4 要用 resize2fs。这套链路是“磁盘→分区→PV→LV→文件系统”逐层推进任何一层没操作到最终 df -h 都不会有变化。5.5 离线安装 Docker 后容器网络不通现象在内网服务器上离线安装 Docker 后docker run 一个测试容器发现容器里上不了外网甚至容器之间互相 ping 不通。排查步骤先看 Docker 的 daemon 配置docker info | grep -i iptables如果 iptables 显示 disabled大概率之前手动改过 iptables 规则或者 systemctl 里屏蔽了 docker 的 iptables 管理。解决办法是编辑 /etc/docker/daemon.json把 iptables 设为 true{ iptables: true }然后重启 dockersystemctl restart docker如果还不行再检查一下 firewalld 是否开启以及 docker0 网桥是否正常ip addr show docker0如果 docker0 没有地址可能是旧版本 Docker 的数据残留。清掉 /var/lib/docker 里不必要的容器和镜像注意保留数据再重启 Docker。离线环境里最容易忽略的就是 iptables 和 firewalld 的关系两个都在管网络规则时经常出现“规则一会儿生效一会儿不生效”的诡异现象。6. 最后的补充一个提高迁移效率的小技巧如果看完上面的内容你已经准备动手迁移了我再分享一个我实际用下来效率很高的做法在迁移期间把所有机器都改成统一的主机名前缀。比如 app-01、db-02 这样然后在 Ansible 或脚本里按角色批量处理而不是一台台人工登录操作。迁移这种活最怕的就是每台机器情况不同需要单独处理。把所有配置尽量集中到同一个自动化脚本或同一个 Ansible playbook 里虽然前期准备会花一点精力但后期批量推进的时候节省的时间是成倍的。另外迁移完成后一定要做一次完整的安全加固修改 SSH 默认端口、关闭 root 远程登录、配置 fail2ban、启用 SELinux 并检查 audit 日志。Rocky Linux 9 默认的 SELinux 策略比 CentOS 7 更严格你原来在 CentOS 7 上能跑的应用到了 Rocky Linux 9 上可能会被 SELinux 拦截比如 Nginx 想读某个非标准目录下的文件会报 permission denied但 dmesg 或者 audit.log 里能明确看到 denied 记录。遇到这类问题不要直接 setenforce 0先看ausearch -m avc -ts recent根据具体策略去配置布尔值或者文件上下文保持 SELinux 处于 enforcing 状态才是安全的。这也是 Rocky Linux 作为 RHEL 系发行版的一个核心优势安全机制开箱即用你只要学会怎么跟它配合就行了。就写到这里希望这些内容能帮你顺利跨过 CentOS 到 Rocky Linux 这道坎。迁移本身不难难的是把各种细节想明白、把坑提前避开。如果你在迁移中遇到别的有意思的坑欢迎按着文里的思路去排查大部分都能解决。