CentOS 8停止维护之后,身边做运维的朋友基本都分成了两派,一派直接切到了Rocky Linux,另一派还在各种发行版之间来回折腾。Rocky Linux 9.7发布后,我把自己手头几台线上服务器从CentOS 7迁移过来,又用虚拟机完整走了几遍从ISO下载、系统安装到网络配置的全流程,这个过程中踩了不少坑,也总结了一套可以照着抄的操作步骤。这篇内容就把这三块完整拆开讲清楚,适合正在做系统迁移的运维老手,也适合第一次接触Rocky Linux、想拿它当主力服务器的入门用户。
1. 为什么CentOS时代的团队都在转向Rocky Linux
1.1 CentOS Linux到Rocky Linux的迁移逻辑
CentOS 8在2021年底停止维护,CentOS 7也在2024年6月彻底断更,这几乎是逼着所有基于RHEL生态的服务器重新做选型。Rocky Linux是CentOS原作者Gregory Kurtzer发起的项目,目的就是在CentOS停止维护之后,提供一个与RHEL高度兼容的免费发行版。它采用Red Hat的源码重新编译,保证软件包和RHEL保持一致,迁移时基本不用担心兼容性问题。
我实际迁移中的体会是,从CentOS 7直接升到Rocky Linux 9.7,跨度比较大的其实是内部组件版本,比如Systemd、内核、GCC这些都有明显升级,但操作习惯和命令风格基本没有变化。对于常年用yum/dnf、systemctl、firewalld这批工具的运维来说,上手成本几乎为零。
1.2 Rocky Linux 9.7与AlmaLinux、Oracle Linux的核心差异
很多人在选型时会把Rocky Linux和AlmaLinux放在一起比较。两者同源,都是RHEL的重编译版本,多数情况下二者可以互相替换,但底层理念和社区治理还是存在差异。
| 对比项 | Rocky Linux | AlmaLinux |
|---|---|---|
| 发起背景 | CentOS原作者主导,社区支持强 | CloudLinux团队发起 |
| 更新节奏 | 跟随RHEL小版本推送 | 跟随RHEL小版本推送 |
| 商业支持 | 免费,社区支持 | 免费,厂商提供支持 |
| 软件包兼容 | 与RHEL保持高一致性 | 与RHEL保持高一致性 |
| 口碑偏向 | 更接近原版CentOS的使用体验 | 企业级支持渠道更明确 |
如果你之前用的是CentOS,Rocky Linux几乎是最平滑的替代选择。至于Oracle Linux,虽然也兼容RHEL,但多了一些Oracle自身的组件,除非你本来就在用Oracle生态,否则不是首选。
1.3 什么场景适合用Rocky Linux
国内不少团队的服务器还在用CentOS 7或CentOS 8,面对停止维护的现状,最常见的三个方向是:继续硬扛、迁移到Debian/Ubuntu、迁移到Rocky Linux。硬扛的风险是安全补丁缺失,一旦出问题就只能自己兜底;迁移到Debian系则需要重新适应apt和Netplan等工具链,业务代码兼容性也存在不确定性。
Rocky Linux最适合的,其实是那些已经在RHEL系生态中跑了一段时间、不愿意改变运维习惯的团队。比如内部跑着Nginx、MySQL、Zabbix、Docker这些常见服务的服务器,切到Rocky Linux之后,业务代码基本不用动,开机的服务管理、防火墙配置、软件源操作几乎都能沿用原来的经验。
2. 官方ISO下载:版本甄别与镜像选择
2.1 官网下载路径与ISO类型说明
Rocky Linux的官网是rockylinux.org,下载页会直接列出最新稳定版本。进入download页面后,可以看到不同架构的镜像文件列表,x86_64、aarch64、ppc64le等都有。对于绝大多数个人和小团队,选择x86_64就行。
download页面里的ISO文件类型比较多,我见过不少第一次接触的人直接下了个最大的文件,结果用不到一半功能。这里整理一下区别:
| ISO类型 | 体积参考 | 适用场景 |
|---|---|---|
| Boot ISO | 约1GB左右 | 网络安装,需要联网拉取安装包 |
| Minimal ISO | 约2GB左右 | 最小化安装,只包含安装程序基础环境 |
| DVD ISO | 约4GB左右 | 离线安装,包含常用软件包 |
| Everything ISO | 约10GB左右 | 包含全部软件包,适合完全离线环境 |
日常使用最推荐的是DVD ISO,既能离线安装,又不会像Everything那样占用过大空间。Minimal ISO适合内网有本地软件源的情况,安装过程会更轻快。Boot ISO则是网络条件好、想最快启动安装界面的选择,但安装时依赖网络拉包,网络不通就装不了。
2.2 镜像站加速与SHA256校验
直接访问官网下载在国内并不稳定,建议优先使用国内镜像站,比如阿里云、清华TUNA、中科大镜像。以清华源为例,访问mirrors.tuna.tsinghua.edu.cn/rocky/,进入9.7/isos/x86_64/目录,就能看到对应版本的全部ISO文件。
ISO下载完成后,强烈建议做一次校验。官方页面会提供对应的SHA256校验值,下载后可以执行:
sha256sum Rocky-9.7-x86_64-dvd.iso把输出的校验值和官网提供的哈希值对比,一致再写入安装U盘。这一步看起来多此一举,实际中我遇到过下载过程中文件损坏导致安装到一半报错的情况,源头就是ISO文件本身不完整,浪费了好几个小时排查。
需要说明的是,Rocky Linux 9.7是9.x系列中的一个小版本更新,如果你手上有9.6或者9.8的镜像,安装后的使用流程基本一致,不存在大的破坏性变化。部分搜索习惯里提到的“9.5 64bit”之类,实际在官网对应的是Rocky-9.5-x86_64这些文件,识别的核心就是看版本号和架构号。
2.3 制作安装U盘的正确姿势
Windows下建议用Rufus或Ventoy。Rufus写ISO时选择DD镜像模式,不要选ISO模式,否则部分主板会出现启动不了的情况。Linux下可以用dd命令,例如:
sudo dd if=Rocky-9.7-x86_64-dvd.iso of=/dev/sdb bs=4M status=progress这里的/dev/sdb是U盘设备节点,执行前务必先确认盘符,别把系统盘覆盖掉。Ventoy工具则可以把ISO直接拷入U盘,启动时选择镜像,方便同一块U盘同时放Rocky、Ubuntu等多个发行版。
3. 安装向导中的关键决策:分区、软件组与安装源
3.1 进入安装界面后建议先做的一步
从U盘启动进入Rocky安装界面后,选择Install Rocky Linux 9.7即可进入安装向导。引导后默认是英文界面,如果想看中文,可以在左下角的语言选项里调整。
很多人的习惯是一上来就点“安装位置”开始分区,但我的建议是先把“网络与主机名”配置好。原因很简单:如果后续要额外添加软件源,或者需要用网络下载更新包,网络不通会非常被动。安装界面里把以太网连接开关打开,确认能拿到IP地址后再继续。
如果当前环境是DHCP分配地址,安装时可以不做静态IP配置,等装完系统后再统一设置。但如果你的网络环境要求固定IP才能上网,这里就需要先把IP、网关、DNS填好,不然系统装完可能直接无法联网。
3.2 分区策略:自动分区与手动分区的取舍
Rocky安装向导里默认是自动分区,使用LVM逻辑卷管理。对于测试环境、临时虚拟机,自动分区完全够用。但生产环境我建议手动分区,至少要按业务需求分配/,/home和swap的空间。
以下是一个常见的手动分区方案,适用于绝大多数Web服务器场景:
/boot 1024 MiB xfs / 50 GiB xfs /home 20 GiB xfs swap 8 GiB swap这里的/boot单独分区,是为了避免根分区写满后导致内核更新失败;/独立分区,日志和临时文件不会挤占其他空间;swap大小一般建议设为物理内存的1到2倍,在服务器内存比较大的情况下可以适当缩减。如果磁盘空间足够,还可以单独划分/data分区用于业务数据存储,方便后续备份和扩容。
LVM方案推荐保留,逻辑卷可以随时扩展,比直接使用物理分区灵活得多。手动分区时把“设备类型”选为LVM,后续在系统运行中用lvextend就能在线扩容,不需要停机。
3.3 软件选择:Minimal Install还是Server with GUI
安装向导的“软件选择”里,Rocky Linux 9.7提供了多个预设环境,比如“带GUI的服务器”、“最小安装”、“工作站”等。很多初学者看到图形界面复选框觉得更安心,于是选带GUI的服务器,结果白白占用系统资源。
其实对服务器而言,最小安装是最推荐的选择。理由有几点:一是攻击面小,默认装的东西少,需要什么再补什么;二是性能和磁盘占用更友好;三是排查问题更简单,组件越少,变量越少。
如果你确实需要图形化管理界面,可以在系统装完后用dnf临时补装:
sudo dnf groupinstall "Server with GUI" sudo systemctl set-default graphical.target这种方式比安装时直接选GUI更可控。同样的逻辑适用于其他软件包,比如安装Zabbix、Docker、VSCodium这类工具,都是装完基础系统后再通过dnf或二进制包来完成,不要让安装向导帮你装一堆可能用不到的组件。
3.4 用户创建与安全相关配置
向导会要求设置root密码、创建用户。如果你平时习惯直接用root干活,密码设置务必足够复杂。生产环境更推荐创建一个普通用户,并将该用户加入wheel组,之后通过sudo提权操作:
sudo usermod -aG wheel yourname在安装界面创建用户时,勾选“将此用户设为管理员”,系统会自动完成加入wheel组这一步。安装完成后,如果不想让root被远程直接登录,可以修改/etc/ssh/sshd_config中PermitRootLogin的值为no,然后重启sshd服务。这个操作建议在确认普通用户能正常SSH登录后再执行,避免把自己锁在门外。
安装过程走到最后会提示重启系统,重启前记得取出U盘,避免再次从U盘引导。
4. 安装后第一件正事:IP地址配置与网络连接管理
4.1 NetworkManager与nmcli的关系
Rocky Linux 9.x内置了NetworkManager作为默认网络管理服务,和CentOS 7时代一样。很多人在装完系统后直接去修改/etc/sysconfig/network-scripts/ifcfg-*文件,然后执行systemctl restart network,结果发现IP没变,或者NetworkManager直接把你改的内容覆盖了。
关键在于理解NetworkManager的管理模型:网卡配置、连接配置都由NetworkManager统一管理,ifcfg文件只是它的一个后端存储方式。部分系统里直接修改配置文件必须通过nmcli reload或nmcli connection reload来使配置生效,直接重启network服务在新版本里甚至可能提示找不到该服务。
因此,我强烈建议统一使用nmcli命令行工具来配置网络。它比图形工具适合脚本化和远程操作,比直接改文件更安全,且配置完成后即时生效的可靠性更好。
4.2 查看当前网络状态与网卡名称
先执行:
nmcli device status确认网卡是否处于“connected”状态,以及网卡接口名(通常叫ens33、ens160、eth0之类)。然后查看当前连接详情:
nmcli connection show这里的连接名和网卡名不一定相同,通常是一串类似“Wired connection 1”的名称,也可能是“ens33”这样的接口名。后续修改时要连接名,不是网卡名。
4.3 用nmcli配置静态IP
假设网卡叫enp0s3,需要把IP设置为192.168.1.100/24,网关192.168.1.1,DNS为223.5.5.5和114.114.114.114,可以这样操作:
nmcli connection modify enp0s3 ipv4.method manual \ ipv4.addresses 192.168.1.100/24 \ ipv4.gateway 192.168.1.1 \ ipv4.dns "223.5.5.5 114.114.114.114" \ ipv4.dns-search ""然后重新激活连接:
nmcli connection up enp0s3执行完可以验证:
ip addr show enp0s3 ip route show cat /etc/resolv.conf如果之前的连接处于自动获取IP状态,需要先把ipv4.method改为manual,否则配置不生效。这条命令也解决了搜索热度很高的“rocky linux设置静态ip”的需求,在Rocky 9.x里统一用nmcli处理最省心。
4.4 配置文件方式的静态IP配置参考
虽然推荐用nmcli,但了解配置文件方式也有实际意义,特别是需要批量部署或者故障排查时要能读懂系统里的网络配置文件。Rocky Linux 9.x的NetworkManager连接配置默认存放在:
/etc/NetworkManager/system-connections/在这个目录下,每个连接对应一个以.nmconnection结尾的文件。一个静态IP的配置示例大致如下:
[connection] id=enp0s3 uuid=xxxx-xxxx-xxxx-xxxx type=ethernet interface-name=enp0s3 [ipv4] method=manual address1=192.168.1.100/24,192.168.1.1 dns=223.5.5.5;114.114.114.114;手动修改这种文件后,需要重启NetworkManager才能生效:
sudo nmcli connection reload sudo nmcli connection up enp0s3注意这里的文件权限必须是可读且仅root可写,否则NetworkManager可能加载失败。实际部署中用nmcli命令就能生成和修改这个文件,所以掌握命令方式通常比手写文件更稳妥。
4.5 DNS配置的一个隐蔽坑
Rocky Linux 9.x中,NetworkManager默认会通过DHCP下发的DNS配置来更新/etc/resolv.conf,而且这个文件实际上是一个指向/run/NetworkManager/resolv.conf的软链接。如果你手动vim /etc/resolv.conf写入了DNS但没告诉NetworkManager,重启网络后改动会被覆盖。
解决办法有两种:要么统一用nmcli配置dns字段,要么在/etc/NetworkManager/NetworkManager.conf中设置dns=none,完全禁止NetworkManager管理resolv.conf。后一种方式适合你打算自己管理DNS的场景,比如内网有dnsmasq或者本机装了CoreDNS,不想让NetworkManager插手。服务器跑容器集群时,这个点很容易被忽略,排障半天才发现DNS被还原了。
4.6 主机名设置
Rocky Linux安装向导里会让填写主机名,如果当时没填或者想修改,可以这样操作:
sudo hostnamectl set-hostname server01.example.com改完后重新登录shell,或者执行bash刷新一下提示符。主机名会同步到/etc/hostname中,所有需要引用主机名的服务重新加载后即可识别。
5. 网络连通后的验证与排障:从端口查到防火墙
5.1 基础网络验证步骤
系统配置完IP,第一件事就是按顺序执行三组命令:
ip addr show ping -c 4 223.5.5.5 ping -c 4 www.baidu.comping通外网IP但ping不通域名,说明DNS有问题;ping不通外网IP,说明网关或上行链路有问题。逐层排除比盲目重传配置快得多。
检查监听端口时,优先用ss而不是netstat。ss命令输出更清晰:
ss -tlnp这条命令能看到所有TCP监听状态端口以及对应的进程名。查询某个具体端口是否被监听,可以用:
ss -tlnp | grep 805.2 检查Rocky Linux是否开通某个端口
搜索热度比较高的“检查rocky linux是否开通某个端口”,实际包含三层判断。第一层是进程是否监听端口,用ss命令;第二层是防火墙是否放行,用firewalld-cmd;第三层是云安全组或上层防火墙是否放行,这个需要在云控制台或物理路由器侧排查。
依次执行:
ss -tlnp | grep :22 sudo firewall-cmd --list-all防火墙输出里的ports、services列表可以看到当前已经放行的规则。如果某端口在ss中能看到监听,但在firewall-cmd的列表里没有,就需要添加放行规则。比如开放8080端口:
sudo firewall-cmd --add-port=8080/tcp --permanent sudo firewall-cmd --reload如果端口在ss里根本没有监听,则说明对应服务没启动或没绑定正确地址,此时排查重点是服务本身而不是防火墙。
5.3 firewalld区域规则与日常管理
firewalld把网卡纳入不同的zone(区域),默认区域通常是public。前面提一句的firewall-cmd --list-all,必须确认当前网卡所在zone,否则你以为放行了但实际网的zone不对,依然不生效。查看网卡对应的zone:
sudo firewall-cmd --get-active-zones给指定网卡指定zone,比如enp0s3对应public,可以用:
sudo firewall-cmd --permanent --zone=public --change-interface=enp0s3 sudo firewall-cmd --reload如果服务器上跑了Docker,要注意Docker会在iptables中插入自己的规则链,宿主机firewalld里允许的端口仍可能被Docker的转发规则影响。这种情况下端口排障要同时看iptables -L -n,单纯看firewalld不一定能定位。
5.4 SELinux对网络服务的影响
Rocky Linux 9.7默认开启SELinux,模式是enforcing。大多数场景下,对SSH、Nginx、MySQL这些标准服务没有影响,因为它们都有对应的SELinux策略。但如果自定义了非标准端口,比如把Nginx监听的端口从80改成18080,就可能触发SELinux拦截日志。
排查方法:
sudo ausearch -m avc -ts recent如果日志里出现SELinux拦截相关记录,可以通过调整布尔值或添加自定义策略来解决。修改端口场景,更实用的做法是用semanage来添加端口标签:
sudo semanage port -a -t http_port_t -p tcp 18080这条命令需要安装policycoreutils-python-utils包才能使用:
sudo dnf install -y policycoreutils-python-utils很多网络问题不是防火墙,而是SELinux在后台悄悄拦截。如果你在排障过程中发现连接被重置、连接超时,但firewalld规则完全正常,就一定要看一眼SELinux的审计日志。
5.5 常见网络故障快速排查表
| 现象 | 可能原因 | 优先排查动作 |
|---|---|---|
| ping不通外网IP | 网关配置错误、网卡未连接 | ip route、nmcli device status |
| 能ping通IP但解析不了域名 | DNS配置错误、resolv.conf被覆盖 | cat /etc/resolv.conf、nmcli connection show |
| SSH无法连接 | sshd未启动、防火墙未放行 | systemctl status sshd、firewall-cmd --list-all |
| 端口telnet不通但ss显示监听 | firewalld未放行或SELinux拦截 | ausearch -m avc -ts recent |
| 重启后网卡没有IP | 网络连接没有自启用 | nmcli connection modify 连接名 connection.autoconnect yes |
重启后网卡不自动连接,是一个高频问题。安装向导里有网络开关,但有时DHCP网络下连接没有标记为自启动,重启后等于没网。在nmcli下确认并修改:
nmcli connection show nmcli connection modify enp0s3 connection.autoconnect yes这条配置对服务器特别重要,毕竟机房断电恢复时不希望每台机器都要插显示器手动启动网络。
6. 线上环境迁移与工具链补装的几点经验
6.1 最小安装后的常用组件补装清单
最小安装的Rocky Linux 9.7干净到什么程度,很多常用命令都需要临时安装。以下是我每次装完新系统后基本都会执行的一组命令,提前装好能省掉不少后续操作中的麻烦:
sudo dnf install -y vim wget curl tar net-tools bind-utils \ lsof tree bash-completion sysstat unzip zip \ policycoreutils-python-utils其中bind-utils提供dig、nslookup等DNS排障工具;net-tools提供ifconfig、netstat等传统命令;sysstat用于看CPU、磁盘IO统计。这些都是运维排查问题时的基础工具,属于“早装早省事”的类型。
6.2 配置EPEL与常用第三方源
Rocky Linux默认源apps、baseos、extras基本能满足日常需要,但装一些常见软件时会发现版本太老或者根本没有。比如Nginx在官方源中只是1.20的低版本,如果想用较新版本,或者需要安装某些在epel仓库的包,就需要额外配置EPEL源:
sudo dnf install -y epel-releaseEPEL是Fedora社区维护的扩展包仓库,在Rocky Linux下的兼容性很好。安装完成后执行dnf repolist确认仓库列表已包含epel。
若要配置国内镜像加速dnf下载,可以把/etc/yum.repos.d/rocky.repo中的baseurl替换为阿里云或清华源的地址。替换后执行dnf clean all和dnf makecache重建缓存,下载速度会有明显提升。
6.3 修改SSH端口与禁止root直接登录
服务器上线的第一步建议先调整SSH配置。修改/etc/ssh/sshd_config中Port字段,例如把默认22改成22022,然后重启sshd。这样做能显著降低被扫描爆破的概率,实际的端口扫描日志几乎都是针对默认22的。
修改前务必确认防火墙放行了新端口:
sudo firewall-cmd --add-port=22022/tcp --permanent sudo firewall-cmd --reload同时,生产环境建议将root直接登录关闭,维护只用普通用户加sudo。这个策略配合fail2ban使用效果更好,不过fail2ban默认监控的日志路径在Rocky Linux 9.x中可能需要调整,因为系统日志服务已经从rsyslog逐步转向journald,部分发行版配置里要指向journalctl的输出格式。
6.4 从虚拟机到物理机:网络配置的迁移注意点
如果你在VMware或VirtualBox里安装Rocky Linux后,要把系统迁移到物理机,网卡名称可能会从ens33变成eno1或enp2s0。迁移前建议保留默认的biosdevname和net.ifnames命名规则,避免改写网卡名带来的额外适配工作。
虚拟机克隆场景也必须处理连接冲突。克隆后的系统和原系统会共用相同UUID,NetworkManager加载时会出现连接管理混乱的情况。解决办法是克隆后先删掉原连接并重建:
nmcli connection delete ens33 nmcli connection add type ethernet ifname ens33 con-name ens33然后重新配置IP。这是VM克隆后网络不通的最常见原因之一,建议克隆完成后第一时间处理。
我在Rocky Linux 9.7上踩过这样一个坑:用VirtualBox复制虚拟机,开机后网络一直起不来,系统日志提示“connection not active on device”。纠结很久才发现是克隆后网卡MAC地址变了,而NetworkManager里的连接记录还绑定着原MAC。用nmcli命令重建连接后问题立刻解决。如果我把这种问题定位经验用一句话概括,那就是——Rocky Linux下网络问题先找NetworkManager,再查firewalld,最后看SELinux,绝大多数配置问题都能在这一套链路里找到答案。Rocky Linux 9.7整体的稳定性在长期运行中已经得到验证,从CentOS迁移过去之后,服务表现平稳,替换成本也比想象中低。