Rocky Linux 9.7迁移实战:从CentOS到网络配置全指南
CentOS 8停止维护之后身边做运维的朋友基本都分成了两派一派直接切到了Rocky Linux另一派还在各种发行版之间来回折腾。Rocky Linux 9.7发布后我把自己手头几台线上服务器从CentOS 7迁移过来又用虚拟机完整走了几遍从ISO下载、系统安装到网络配置的全流程这个过程中踩了不少坑也总结了一套可以照着抄的操作步骤。这篇内容就把这三块完整拆开讲清楚适合正在做系统迁移的运维老手也适合第一次接触Rocky Linux、想拿它当主力服务器的入门用户。1. 为什么CentOS时代的团队都在转向Rocky Linux1.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 LinuxAlmaLinux发起背景CentOS原作者主导社区支持强CloudLinux团队发起更新节奏跟随RHEL小版本推送跟随RHEL小版本推送商业支持免费社区支持免费厂商提供支持软件包兼容与RHEL保持高一致性与RHEL保持高一致性口碑偏向更接近原版CentOS的使用体验企业级支持渠道更明确如果你之前用的是CentOSRocky 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 ifRocky-9.7-x86_64-dvd.iso of/dev/sdb bs4M statusprogress这里的/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.1DNS为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] idenp0s3 uuidxxxx-xxxx-xxxx-xxxx typeethernet interface-nameenp0s3 [ipv4] methodmanual address1192.168.1.100/24,192.168.1.1 dns223.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中设置dnsnone完全禁止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-port8080/tcp --permanent sudo firewall-cmd --reload如果端口在ss里根本没有监听则说明对应服务没启动或没绑定正确地址此时排查重点是服务本身而不是防火墙。5.3 firewalld区域规则与日常管理firewalld把网卡纳入不同的zone区域默认区域通常是public。前面提一句的firewall-cmd --list-all必须确认当前网卡所在zone否则你以为放行了但实际网的zone不对依然不生效。查看网卡对应的zonesudo firewall-cmd --get-active-zones给指定网卡指定zone比如enp0s3对应public可以用sudo firewall-cmd --permanent --zonepublic --change-interfaceenp0s3 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 showSSH无法连接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-port22022/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命名规则避免改写网卡名带来的额外适配工作。虚拟机克隆场景也必须处理连接冲突。克隆后的系统和原系统会共用相同UUIDNetworkManager加载时会出现连接管理混乱的情况。解决办法是克隆后先删掉原连接并重建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迁移过去之后服务表现平稳替换成本也比想象中低。