
1. 从 CentOS 停更说起为什么大家都在找下一个落脚点如果你在运维圈待过几年大概率经历过那个让无数团队连夜开会的消息CentOS 8 提前结束维护CentOS 7 也进入了生命周期的尾声。这不是一次普通的版本迭代而是整个企业级 Linux 生态的一次地震。我身边不少朋友的公司服务器上跑着几百台 CentOS业务系统、数据库、中间件全都绑在这个发行版上突然要面对系统还能用但没人给你打补丁了的尴尬局面。这件事的核心矛盾在于CentOS 曾经是免费又稳定的代名词但它本质上不是上游而是 Red Hat Enterprise LinuxRHEL的下游重建版本。Red Hat 调整策略后CentOS Stream 变成了 RHEL 的上游预览版定位从稳定复刻变成了滚动前瞻。对于生产环境来说这个变化是致命的——没人愿意拿核心业务去当新特性的试验田。于是问题就变成了有没有一个系统能让我几乎零成本地从 CentOS 迁移过去命令不变、包管理不变、配置文件位置不变甚至连运维脚本都不用改答案在社区里逐渐收敛到几个候选Rocky Linux、AlmaLinux、Oracle Linux。而其中讨论度最高、被提及为平滑过渡第一选择的就是 Rocky Linux。这篇内容适合三类人看一是手上还压着一堆 CentOS 机器、正在做迁移调研的运维二是刚接触 Linux、想搞清楚发行版之间到底差在哪的新手三是需要在 VMware 虚拟机里搭实验环境、想找一个长期稳定底座的技术爱好者。我会从迁移决策逻辑、系统安装实操、静态 IP 配置、离线环境部署、常见坑排查这几个角度把 Rocky Linux 这套东西讲透。2. Rocky Linux 凭什么接得住 CentOS 的班2.1 它不是另一个新系统而是 CentOS 的二进制级复刻很多人第一次听到 Rocky Linux会下意识觉得又是一个新发行版学习成本肯定高。这个判断其实反了。Rocky Linux 的定位非常明确它是 RHEL 的下游重建版本目标是做到与 RHEL 二进制兼容bug-for-bug compatible。这句话翻译成人话就是RHEL 里能跑的东西Rocky Linux 里基本都能跑而且行为一致。这一点为什么关键因为 CentOS 当年也是这么干的。CentOS 之所以能成为服务器市场的霸主就是因为它把 RHEL 的源代码重新编译去掉了商标和闭源组件做成了一个免费可用的等价物。Rocky Linux 走的是同一条路由 CentOS 的联合创始人 Gregory Kurtzer 发起某种程度上算是正统续作。所以从迁移角度看你原来在 CentOS 上用的yum现在叫dnf、systemctl、firewalld、selinux这些工具链在 Rocky Linux 上原封不动。配置文件路径、服务管理方式、日志位置几乎一模一样。这就是平滑二字的底气所在。2.2 版本节奏跟着 RHEL 走生命周期可预期选发行版本质上是在选未来五年到十年我能不能安心用下去。Rocky Linux 的版本策略是紧跟 RHELRHEL 发大版本Rocky 在几周内跟进RHEL 发小版本Rocky 同样跟进。每个大版本提供约 10 年的支持周期前几年是完整更新后面进入维护阶段。对比一下就很清楚发行版上游关系支持周期与 CentOS 迁移成本CentOS 7RHEL 下游已进入尾声基准CentOS StreamRHEL 上游滚动定位变化不适合保守生产Rocky LinuxRHEL 下游约 10 年极低命令与路径基本一致AlmaLinuxRHEL 下游约 10 年极低同为重建版本Oracle LinuxRHEL 下游约 10 年低但带 Oracle 生态倾向从这张表能看出来Rocky 和 Alma 是直接竞品迁移成本都极低。那为什么 Rocky 的呼声更高一方面是社区治理结构更开放由非营利组织主导不绑定任何商业公司另一方面是它的血统叙事更强很多老 CentOS 用户情感上更认这个。2.3 生态兼容性你的老脚本、老工具基本不用动我实际做过一次迁移测试把一台跑了三年的 CentOS 7 上的运维脚本直接拷到 Rocky Linux 9 上。结果如何大部分 shell 脚本直接能跑少数因为 Python 版本从 2 升到 3 需要微调还有个别依赖老版本库的编译脚本要重新处理。但整体工作量比换到 Debian 系或者 Ubuntu 系要小一个数量级。这里要提醒一个容易忽略的点CentOS 7 到 Rocky Linux 9 是跨了两个大版本7→8→9不是简单的原地升级。跨大版本意味着 glibc、OpenSSL、Python、systemd 这些基础组件都有较大变化。所以平滑是相对的——命令习惯平滑但底层依赖需要你认真评估。如果你的业务对老版本库有强依赖可以考虑先迁到 Rocky Linux 8等条件成熟再上 9。3. 在 VMware 里把 Rocky Linux 跑起来安装环节的取舍3.1 镜像选择minimal、DVD、boot 到底选哪个下载 Rocky Linux 的时候你会看到好几个镜像选项新手很容易懵。我按实际用途给你拆一下Minimal ISO最小化安装镜像只有基础系统装完大概 1GB 出头。适合做服务器、虚拟机、容器底座。缺点是装完啥都没有网络工具、编译工具都得自己补。DVD ISO完整安装镜像包含大量常用软件包几个 GB。适合不想联网、想一次性把常用工具装齐的场景。Boot ISO网络引导镜像体积小安装时从网络仓库拉包。适合网络稳定、想装最新包的场景。我的建议是做服务器实验环境优先选 Minimal。原因很简单最小化安装能让你清楚知道系统里到底有什么减少不必要的攻击面也方便你理解每个依赖是怎么补上的。如果你是在完全离线的环境里折腾那就选 DVD。热词里出现的 rocky linux 9 minimal 下载安装配置 和 rocky linux 9.5 64bit说的就是这个场景。9.x 是目前的主流稳定线64 位是标配现在基本没有 32 位服务器场景了。3.2 VMware 新建虚拟机的关键参数在 VMware Workstation 里新建虚拟机有几个参数直接决定后续体验我一个个说内存Minimal 安装 日常实验2GB 能跑但会有点紧。建议 4GB 起步如果你要在上面跑 Docker、数据库直接给 8GB。内存给少了系统会频繁 swap操作卡顿会让你怀疑人生。CPU2 核够用4 核更舒服。注意 VMware 里处理器数量和每个处理器的核心数量是两个概念总核心数 两者相乘。一般设成 1 处理器 × 2 核心就行。磁盘建议 40GB 起步选将虚拟磁盘拆分成多个文件方便迁移。如果你打算做 CentOS 扩容相关的实验可以给大一点比如 60GB 或 80GB留出折腾空间。网络模式这是最容易出问题的地方。VMware 有三种主要模式模式特点适用场景桥接Bridged虚拟机像独立设备接入物理网络需要被局域网其他机器访问NAT虚拟机通过宿主机上网外部访问需端口转发个人实验最省心仅主机Host-only只能和宿主机通信纯隔离实验新手建议先用 NAT能上网、能装包宿主机也能通过 NAT 网段访问虚拟机。等你需要模拟真实服务器被外部访问时再切桥接。3.3 安装过程中的分区与用户设置安装界面里分区和用户这两步值得多说两句。分区方面Minimal 安装默认用自动分区会给你一个 LVM 结构。如果你只是实验自动分区完全够用。但如果你想模拟生产环境建议手动分/boot给 1GBswap给内存的 1-2 倍内存大于 16GB 时可以少给或不给剩下的给/。用 LVM 的好处是后续扩容方便这点和 CentOS 扩容的逻辑是一样的。用户方面root 密码一定要设同时建议创建一个普通用户并勾选将此用户设为管理员。为什么因为直接拿 root 登录操作是坏习惯日常用普通用户 sudo才是正道。这个习惯从 CentOS 时代就该养成迁移到 Rocky 后继续保持。安装完成后第一次登录先做两件事ip addr看网卡有没有拿到地址ping一下外网看通不通。热词里 centos ping 不通网关 是个高频问题Rocky 上同样会遇到后面我会专门讲排查思路。4. 静态 IP 配置Rocky Linux 9 和 CentOS 7 的写法差异4.1 为什么服务器必须配静态 IP虚拟机默认用 DHCP 拿地址方便是方便但地址可能会变。对于服务器来说IP 变了意味着 SSH 连不上、服务注册失效、监控失联。所以只要这台机器要长期跑服务静态 IP 是必须的。Rocky Linux 9 用的是 NetworkManager 管理网络配置方式和 CentOS 7 的ifcfg-eth0时代有区别。CentOS 7 里你改/etc/sysconfig/network-scripts/ifcfg-ens33Rocky 9 虽然还兼容这个路径但官方推荐用nmcli或者新的 keyfile 格式。我两种都讲你按习惯选。4.2 用 nmcli 配置静态 IP 的完整流程先看当前连接名nmcli connection show假设你的连接名是ens160要配成 IP192.168.1.100网关192.168.1.1DNS223.5.5.5nmcli connection modify ens160 \ ipv4.method manual \ ipv4.addresses 192.168.1.100/24 \ ipv4.gateway 192.168.1.1 \ ipv4.dns 223.5.5.5 8.8.8.8 \ connection.autoconnect yes然后重启连接nmcli connection down ens160 nmcli connection up ens160验证ip addr show ens160 ip route show cat /etc/resolv.conf这套命令的好处是即时生效、不用重启网络服务而且写进配置持久化。我实测下来比手改配置文件再systemctl restart network要稳不容易出现配置写错导致网络直接断掉的情况。4.3 手改 ifcfg 文件的传统方式与注意事项如果你更习惯 CentOS 7 的写法Rocky 9 里对应文件在/etc/sysconfig/network-scripts/ifcfg-ens160。关键字段TYPEEthernet BOOTPROTOnone NAMEens160 DEVICEens160 ONBOOTyes IPADDR192.168.1.100 PREFIX24 GATEWAY192.168.1.1 DNS1223.5.5.5 DNS28.8.8.8注意BOOTPROTO从dhcp改成none或staticONBOOT必须是yes。改完执行nmcli connection reload nmcli connection up ens160提示改网络配置时如果你是通过 SSH 连过去的重启网络有断连风险。建议在 VMware 控制台里操作或者用nmcli的即时生效方式避免把自己关在门外。4.4 配完不通按这个顺序排查静态 IP 配完 ping 不通网关是新手最常卡住的地方。我按排查优先级列一下先看网卡状态ip addr确认地址真的生效了没生效说明配置没加载。看路由ip route确认默认网关在不在。没有默认路由外网肯定不通。看 VMware 网络模式NAT 模式下网关应该是 VMware 虚拟网卡的地址不是你随便写的。在 VMware 的虚拟网络编辑器里能看到 NAT 网关的真实地址。看 IP 段是否冲突你配的静态 IP 必须在 VMware 的 NAT 网段内且没被 DHCP 池占用。看防火墙systemctl status firewalld临时关掉测试systemctl stop firewalld排除防火墙拦截。看宿主机宿主机能不能 ping 通虚拟机反过来能不能通定位是单向还是双向问题。这个顺序的逻辑是从本机到网关从网关到外部逐层往外推。大部分问题出在第 3 步——网关地址写错了。5. 离线环境部署Docker 和常用工具的安装思路5.1 为什么离线安装是个绕不开的坎很多生产环境是不通外网的尤其是金融、制造、内网实验环境。热词里 rocky linux 离线安装 docker、centos 7 linux 离线安装 docker、centos 离线安装 nodejs 反复出现说明这是真实高频需求。离线安装的核心逻辑是在一台能联网的同版本机器上把依赖包下载全再拷到目标机器上本地安装。难点在于依赖关系漏一个包就装不上。5.2 用 dnf download 打包依赖在联网的 Rocky Linux 上先装下载工具dnf install -y dnf-plugins-core下载 Docker 及其全部依赖到指定目录dnf download --resolve --alldeps --destdir/tmp/docker-offline docker-ce docker-ce-cli containerd.io--resolve是关键它会把依赖树一起拉下来。下载完把/tmp/docker-offline整个目录拷到离线机器然后dnf install -y --disablerepo* /tmp/docker-offline/*.rpm--disablerepo*是告诉 dnf 别去联网找仓库只用本地包。这一步如果报缺依赖说明下载时漏了回到联网机器补下。5.3 配置 Docker 镜像加速与开机自启装完 Docker 后国内环境建议配镜像加速否则拉镜像慢到怀疑人生。编辑/etc/docker/daemon.json{ registry-mirrors: [https://your-mirror.example.com], log-driver: json-file, log-opts: { max-size: 100m, max-file: 3 } }然后systemctl daemon-reload systemctl enable --now docker systemctl status dockerenable --now一步到位既设开机自启又立即启动。日志限制那两行很重要不然容器日志能把磁盘撑爆这个坑我在 CentOS 时代踩过迁移到 Rocky 后同样适用。5.4 Node.js 等其他运行时的离线处理Node.js 的离线安装思路类似但更推荐用官方预编译的二进制包解压即用不依赖系统包管理tar -xJf node-v20.x.x-linux-x64.tar.xz -C /usr/local/ ln -s /usr/local/node-v20.x.x-linux-x64/bin/node /usr/bin/node ln -s /usr/local/node-v20.x.x-linux-x64/bin/npm /usr/bin/npm这种方式的好处是版本隔离、升级方便不污染系统包。缺点是得手动管理 PATH 和软链。如果你要装多个 Node 版本可以上 nvm但 nvm 本身也需要联网离线场景下还是二进制包最实在。6. 迁移路上那些没人提前告诉你的坑6.1 跨大版本迁移不是换个源那么简单我见过最典型的误区是有人以为把 CentOS 的 yum 源地址换成 Rocky 的就能升级。这是行不通的。CentOS 7 到 Rocky 9 跨越了 systemd 大版本、Python 2→3、OpenSSL 1.0→3.0、glibc 2.17→2.34 等一系列基础组件变更。正确做法是新装 Rocky再迁移业务而不是原地升级。迁移业务时重点检查这几类东西依赖 Python 2 的脚本、依赖老版本 OpenSSL 的编译产物、写死了/etc/sysconfig/network-scripts路径的自动化工具、依赖特定内核模块的驱动。6.2 SELinux 和防火墙别一上来就关新手遇到服务起不来第一反应往往是setenforce 0加systemctl stop firewalld。这在实验环境无所谓但生产环境这么干等于自废武功。Rocky Linux 默认开启 SELinux enforcing 模式这是它的安全底座。正确做法是学会看日志ausearch -m avc -ts recent看 SELinux 拒绝记录journalctl -u 服务名看服务日志。大部分问题通过加正确的 SELinux 上下文或者放行端口就能解决不需要整个关掉。6.3 时间同步和时区小细节引发大问题虚拟机迁移或新建后时间经常是错的。时间不对会导致证书校验失败、日志时间错乱、集群节点通信异常。Rocky Linux 用 chrony 做时间同步timedatectl set-timezone Asia/Shanghai systemctl enable --now chronyd chronyc sources -v时区设对、chrony 跑起来这两个动作花不了一分钟但能省掉后面一堆莫名其妙的故障排查。6.4 快照是你的后悔药在 VMware 里做任何有风险的配置变更前先打快照。改网络、装驱动、升级内核之前一个快照几秒钟出问题回滚也是几秒钟。我吃过没打快照的亏——一次改网络配置把 SSH 弄断了又没有控制台访问权限最后只能重装。从那以后快照成了我的肌肉记忆。7. 从 CentOS 到 Rocky 的迁移决策清单7.1 先评估再动手迁移不是拍脑袋的事。动手前先回答几个问题现有系统跑的是什么业务有没有对特定版本库的强依赖停机窗口有多长回滚方案是什么我一般会做一张资产清单把每台机器的角色、依赖、迁移优先级标出来。核心数据库和对外服务放最后迁边缘的、无状态的先迁用它们验证流程、积累经验。7.2 分阶段迁移的实操节奏我的建议节奏是第一阶段在 VMware 里搭 Rocky 实验机把安装、网络、常用工具跑一遍熟悉差异。第二阶段选一台非核心业务做真实迁移记录所有踩到的坑和解决方式。第三阶段把迁移过程脚本化形成可复用的 checklist 和自动化脚本。第四阶段按优先级批量迁移每批迁完做验证和观察。这个节奏的核心是先小步验证再大步推进避免一次性全量迁移导致问题集中爆发。7.3 迁移后必须验证的几件事迁完不是结束验证才是。重点验证服务能否正常启动、端口是否正常监听、日志是否正常输出、定时任务是否正常执行、监控是否正常上报、备份是否正常跑通。这几项都过了才算真正迁移完成。8. 我个人的一些实操体会折腾 Rocky Linux 这段时间最大的感受是它没有试图成为更好的 Linux而是老老实实做CentOS 的替代品。这个定位听起来不性感但对运维来说恰恰是最需要的。你不需要重新学习一套哲学不需要重新适应一套工具链原来怎么干现在还怎么干。另一个体会是关于平滑这个词。平滑是相对的命令层面确实平滑但底层组件的跨版本变化是实打实的。所以别被平滑过渡四个字麻痹该做的兼容性测试一个都不能少。我见过太多人以为换个系统就完事结果被 Python 版本和 OpenSSL 版本教做人。最后分享一个我常用的小技巧在正式迁移前用rsync把老机器的/etc目录整个同步到新机器的一个临时目录然后用diff -r对比配置差异。这样能快速发现哪些配置文件需要手动调整比一个个翻要高效得多。这个动作花不了十分钟但能帮你提前发现大部分配置层面的坑。