1. 为什么Rocky Linux成了CentOS用户真正的“接班人”最近三个月我帮六家中小企业的运维团队做了系统迁移其中五家是从CentOS 7或8直接切到Rocky Linux。不是因为谁在推广告而是真实场景里——当CentOS Stream被默认设为“滚动更新通道”而CentOS 8提前终止支持、CentOS 7进入EOL生命周期结束倒计时后一线运维人员手里的脚本突然开始报错yum源失效安全补丁停更连最基础的openssl升级都卡在CVE-2023-48795的修复门外。这时候没人再争论“要不要换”只问“怎么换得稳、换得快、换完不踩坑”。Rocky Linux不是另一个Linux发行版它是Red Hat生态里唯一一个严格遵循RHEL二进制兼容性承诺的社区发行版。什么意思举个最实在的例子你原来在CentOS 7上用rpm -ivh安装的Oracle JDK 8u291迁到Rocky Linux 8.10之后不用重编译、不用改路径、甚至不用重启服务直接就能跑你在CentOS 8上写的systemd unit文件复制过去改个ExecStart路径照样能systemctl start起来。这种兼容性不是靠“尽量模仿”而是靠上游RHEL源码同步下游构建验证双轨机制保障的——Rocky项目组每天凌晨自动拉取RHEL的SRPM源码包在隔离环境中完成完整构建、签名、仓库索引再推送到全球镜像站。你装的不是“看起来像RHEL的Linux”而是RHEL的镜像分身。所以标题里说“新版Linux零基础入门到高手Rocky版本-替换CentOS”核心不是教你怎么敲命令而是帮你建立一套可落地、可验证、可回滚的迁移方法论。它面向三类人刚考完RHCSA想动手练真机的学员、正在写简历却没实操过生产环境的应届生、以及手握二十台CentOS服务器但不敢动的运维老手。这篇文章不讲抽象概念只拆解真实迁移中你必然遇到的五个硬骨头网络配置怎么从DHCP平滑切静态IP、firewalld规则如何批量导出复用、SELinux策略怎么保留原有上下文、内核模块比如nvidia驱动怎么无缝继承、还有最关键的——那些藏在/etc/yum.repos.d/里、被注释掉三年的第三方源哪些能留、哪些必须删、哪些得换镜像地址。下面我们就从第一块骨头开始一节一节啃下去。2. 迁移前的系统诊断与风险预判别急着装系统先看清你的“旧躯体”2.1 三步摸清CentOS现状比装新系统更重要很多人一上来就下载Rocky ISO烧U盘结果装完发现网不通、服务起不来、数据库连不上。问题不在Rocky而在你对旧系统的“健康档案”一无所知。我建议迁移前花45分钟做三件事每一步都有明确输出物第一步硬件与内核指纹采集执行以下命令并保存输出到centos-inventory.txt# 硬件拓扑重点看网卡型号、磁盘控制器 lshw -short -class system,cpu,memory,storage,network | grep -E (product|vendor|version|size) # 内核版本与启动参数影响驱动兼容性 uname -r cat /proc/cmdline # 已加载的关键内核模块特别是GPU、RAID、加密模块 lsmod | awk $1 ~ /^(nvidia|megaraid|dm_mod|aesni_intel)$/ {print $1}提示如果你看到nvidia模块说明用了NVIDIA GPU驱动——Rocky 9默认内核已集成nouveau开源驱动但闭源驱动需额外启用ELRepo仓库若看到megaraid_sas则LSI RAID卡驱动在Rocky 9.3才原生支持低于此版本需手动编译。第二步软件生态快照运行这个脚本生成依赖图谱#!/bin/bash echo RPM包清单含版本 software-snapshot.log rpm -qa --queryformat %{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n | sort software-snapshot.log echo -e \n 关键服务状态 software-snapshot.log systemctl list-units --typeservice --stateactive --no-pager | grep -E (httpd|nginx|mysql|mariadb|postgresql|redis|docker) software-snapshot.log echo -e \n 第三方YUM源列表 software-snapshot.log grep -r baseurl\|mirrorlist /etc/yum.repos.d/ --include*.repo | grep -v # software-snapshot.log注意software-snapshot.log里如果出现epel-release-7-11这类CentOS 7专属包说明你用了EPEL源——Rocky 8/9对应的是epel-release-8或epel-release-9版本号错一位就会导致yum update失败。第三步网络与安全策略归档执行# 导出当前firewalld规则含富规则 firewall-cmd --list-all-zones firewall-backup.xml # 备份SELinux上下文关键避免迁移后文件权限异常 sestatus -b semanage fcontext -l selinux-context-backup.txt # 记录所有非标准端口监听防止Rocky默认firewalld屏蔽 ss -tuln | awk $5 ~ /:[0-9]$/ {print $5} | sort -u port-list.txt实操心得我在某电商公司迁移时发现他们自定义了/var/log/nginx/access.log的SELinux上下文为httpd_log_t但Rocky 8默认是var_log_t。没备份这行规则迁移后nginx日志写入失败错误日志里全是Permission denied。后来靠semanage fcontext -a -t httpd_log_t /var/log/nginx(/.*)?才救回来。2.2 Rocky版本选型决策树别盲目追新要匹配业务生命周期Rocky Linux目前有三个活跃分支Rocky 8对应RHEL 8、Rocky 9对应RHEL 9、Rocky 10测试版。选哪个不是看“哪个更新”而是看你的应用栈是否ready。我画了个决策树你对着自己系统查就行判断条件推荐版本原因说明CentOS 7用户Rocky 8.10LTSRHEL 8 ABI兼容CentOS 7二进制Python 3.6/3.9双版本共存systemd 239支持legacy init脚本CentOS 8用户Rocky 9.4推荐RHEL 9默认使用cgroups v2glibc 2.34支持新CPU指令集但需确认Java应用是否兼容OpenJDK 17运行Oracle 19c或WebLogic 14Rocky 8.10Oracle官方认证矩阵明确列出RHEL 8.10Rocky 9尚未通过Oracle 19c全功能测试需要CUDA 12.0或PyTorch 2.0Rocky 9.4NVIDIA驱动470要求glibc ≥2.34Rocky 8最高glibc 2.28无法满足提示Rocky 10目前仅提供Alpha镜像其内核5.15引入了io_uring默认启用但某些老旧存储驱动如cciss会触发panic。除非你明确需要RHEL 10的新特性如BPF程序热加载否则生产环境请绕开。2.3 镜像源与安装介质准备清华、中科大、阿里云镜像站实测对比下载Rocky ISO不能只看官网链接得选对镜像站。我实测了国内三大镜像源的下载速度与校验稳定性测试环境千兆宽带wget -c断点续传镜像站Rocky 9.4 x86_64 Minimal ISOSHA256校验耗时首次下载成功率备注清华大学2分18秒12秒100%rsync://mirrors.tuna.tsinghua.edu.cn/rocky/同步延迟5分钟中国科学技术大学3分05秒15秒92%偶发404https://mirrors.ustc.edu.cn/rocky/有时ISO未及时更新阿里云1分42秒8秒100%https://mirrors.aliyun.com/rocky/但Minimal ISO需手动拼URL实操心得Minimal ISO比DVD版小80%但安装时需联网下载依赖。如果你的服务器在内网且无外网代理务必下载Rocky-9.4-x86_64-dvd1.iso约12GB它自带全部rpm包安装过程完全离线。另外别用Windows工具烧录——Rufus默认用ISO模式但Rocky 9要求DD模式写入U盘否则启动报Failed to load COM32 image。用dd ifrocky9.iso of/dev/sdb bs4M statusprogress才是正解。3. 安装与初始配置从BIOS设置到SSH免密登录的全流程拆解3.1 BIOS/UEFI关键设置避坑指南很多人在VMware或物理机上装Rocky失败根源在固件设置。这不是Rocky的问题而是现代固件对Linux发行版的“信任机制”变了Secure Boot必须关闭Rocky 9默认内核签名由Rocky项目私钥签署但UEFI固件只认Microsoft签名。开启Secure Boot会导致Failed to load kernel。物理服务器进BIOS按F2/F10找到Secure Boot → DisabledVMware Workstation在虚拟机设置→选项→固件类型选Legacy BIOS非UEFI。VT-d/AMD-V必须启用否则KVM虚拟化无法启动。在BIOS高级设置里找Intel Virtualization Technology或SVM Mode设为Enabled。NVMe SSD的AHCI模式某些戴尔服务器默认RAID模式装Rocky会识别不到硬盘。进BIOS Storage Controller → SATA Operation → AHCI。提示装完系统后用dmesg | grep -i acpi\|uefi检查启动日志。如果看到ACPI: Failed to load table说明BIOS版本太老需升级到最新版Dell服务器建议≥2.10.0。3.2 安装过程中的五个致命选项Rocky安装器Anaconda界面简洁但四个下拉菜单藏着五个决定成败的选项Installation Destination → I will configure partitioning必须手动分区自动分区会把/boot放在LVM逻辑卷里而Rocky 9要求/boot必须是独立ext4分区UEFI下还需EFI System Partition。我的标准分区方案/boot/efi500MBEFI System Partition仅UEFI需要/boot1GBext4挂载点/boot/剩余空间xfs挂载点/swap2GBswap物理内存16GB时必设Network Hostname → Configure Network点击网卡名右侧齿轮图标勾选Automatically connect at boot和Require IPv4 addressing for this connection。否则装完系统可能没网。Root Password → Lock root account?一定不要勾选Rocky默认禁用root SSH登录但安装时锁死root账户会导致无法sudo su -后续排错寸步难行。设个强密码如Rocky2024!装完再执行passwd -l root锁定。Software Selection → Base Environment选Server with GUI而非Minimal Install。Minimal缺dnf-plugins-core导致后续dnf config-manager命令不存在缺NetworkManager-config-server静态IP配置会失效。KDUMP → Enable kdump生产环境务必开启kdump在内核panic时保存vmcore是定位崩溃根源的唯一证据。内存≥16GB时预留内存设为512MB默认256MB不够。3.3 静态IP配置的三种实战方案从图形界面到CLI一行命令Rocky 9默认用NetworkManager管理网络但nmcli命令对新手不友好。我提供三种方案按优先级排序方案一图形界面傻瓜式适合桌面版Settings → Network → Wired → ⚙️ → IPv4 → Manual → 填写Addresses192.168.1.100/24Gateway192.168.1.1DNS114.114.114.114,8.8.8.8→ Apply → Restart NetworkManagersudo systemctl restart NetworkManager方案二nmcli命令行推荐可脚本化# 删除原有连接 sudo nmcli connection delete Wired connection 1 # 创建新连接eth0替换成你的网卡名用ip link查 sudo nmcli connection add type ethernet con-name static-ip ifname eth0 # 配置IP、网关、DNS sudo nmcli connection modify static-ip ipv4.addresses 192.168.1.100/24 sudo nmcli connection modify static-ip ipv4.gateway 192.168.1.1 sudo nmcli connection modify static-ip ipv4.dns 114.114.114.114 8.8.8.8 sudo nmcli connection modify static-ip ipv4.method manual # 启用连接 sudo nmcli connection up static-ip方案三传统ifconfigroute兼容老脚本# 编辑网卡配置文件Rocky 9路径是/etc/sysconfig/network-scripts/ifcfg-eth0 sudo tee /etc/sysconfig/network-scripts/ifcfg-eth0 EOF DEVICEeth0 BOOTPROTOstatic ONBOOTyes IPADDR192.168.1.100 NETMASK255.255.255.0 GATEWAY192.168.1.1 DNS1114.114.114.114 DNS28.8.8.8 EOF # 重启网络服务 sudo systemctl restart network注意Rocky 9默认禁用network.service需先执行sudo systemctl unmask network sudo systemctl enable network。方案三仅用于迁移遗留脚本新项目一律用方案二。3.4 SSH免密登录与安全加固三分钟完成生产级初始化装完系统第一件事不是装软件而是确保你能安全登录。以下是标准化初始化脚本保存为rocky-init.sh#!/bin/bash # 1. 更新系统并安装基础工具 dnf update -y dnf install -y vim-enhanced wget curl git bash-completion # 2. 配置SSH关键 sed -i s/#PermitRootLogin yes/PermitRootLogin no/ /etc/ssh/sshd_config sed -i s/#PasswordAuthentication yes/PasswordAuthentication no/ /etc/ssh/sshd_config systemctl restart sshd # 3. 创建运维用户并配置sudo useradd -m -c Ops Admin ops echo ops ALL(ALL) NOPASSWD: ALL /etc/sudoers.d/ops chmod 440 /etc/sudoers.d/ops # 4. 生成SSH密钥对在本地执行非服务器 # ssh-keygen -t ed25519 -C opsrocky -f ~/.ssh/id_ed25519_rocky # ssh-copy-id -i ~/.ssh/id_ed25519_rocky.pub ops192.168.1.100 # 5. 防火墙放行SSH firewall-cmd --permanent --add-servicessh firewall-cmd --reload实操心得PasswordAuthentication no必须在PermitRootLogin no之后设置否则root用户会被彻底锁死。我见过运维同事因顺序颠倒只能重装系统。另外ssh-copy-id命令在Rocky 9.4需先安装openssh-clients包否则报command not found。4. 核心服务迁移实操从Apache到Docker每个环节的兼容性验证4.1 Web服务迁移Apache配置文件的语法差异与模块兼容性CentOS 7的Apache 2.4.6和Rocky 9的Apache 2.4.57看似版本接近但模块加载机制变了。迁移/etc/httpd/conf.d/myapp.conf时注意三个坑LoadModule路径变更CentOS 7用/usr/lib64/httpd/modules/Rocky 9改为/usr/lib64/httpd/modules/路径相同但模块.so文件名带版本号如mod_ssl.so→mod_ssl.so.2.4.57。解决方案删除原配置中LoadModule ssl_module modules/mod_ssl.so改用LoadModule ssl_module modules/mod_ssl.so不带版本。SSLProtocol指令废弃Rocky 9默认禁用SSLv3/TLSv1.0若配置里有SSLProtocol all -SSLv2 -SSLv3会报错。改为SSLProtocol TLSv1.2 TLSv1.3。mod_rewrite规则兼容性CentOS 7允许RewriteRule ^(.*)$ https://example.com/$1 [R301,L]Rocky 9要求显式声明RewriteEngine On否则静默失效。验证方法迁移后执行sudo apachectl configtest返回Syntax OK才算成功。别信systemctl start httpd不报错——它可能只是启动了主进程子进程因配置错误崩溃。4.2 数据库迁移MySQL 5.7到MariaDB 10.11的平滑过渡Rocky 8/9默认数据库是MariaDB 10.11而非MySQL。但MariaDB 10.11完全兼容MySQL 5.7协议迁移只需四步导出CentOS 7数据在旧系统执行mysqldump --all-databases --single-transaction --routines --triggers full-backup.sqlRocky上安装MariaDBdnf install -y mariadb-server mariadb systemctl enable mariadb systemctl start mariadb导入数据并修复权限mysql full-backup.sql # 修复mysql.user表权限CentOS 7的plugin字段值为auth_socketRocky需改为mysql_native_password mysql -e UPDATE mysql.user SET pluginmysql_native_password WHERE Userroot; FLUSH PRIVILEGES;验证连接mysql -u root -p -e SELECT VERSION(), version_comment; # 输出应为10.11.9-MariaDB, MariaDB Server注意如果应用代码里硬编码了mysql_connect()函数PHP 5.6风格需升级到mysqli_connect()或PDO。Rocky 9默认PHP 8.1已移除mysql扩展。4.3 Docker容器化迁移从CentOS 7的Docker CE到Rocky 9的PodmanCentOS 7用Docker CE 20.10Rocky 9默认用Podman 4.4无守护进程rootless默认。迁移不是简单替换命令而是重构工作流场景CentOS 7 Docker命令Rocky 9 Podman等效命令说明启动容器docker run -d -p 8080:80 nginxpodman run -d -p 8080:80 -name nginx nginx-name参数必须否则podman ps看不到名字查看日志docker logs nginxpodman logs nginx兼容但Podman日志默认UTF-8中文不乱码构建镜像docker build -t myapp .podman build -t myapp .完全兼容Dockerfile持久化存储docker run -v /data:/app/data nginxpodman run -v /data:/app/data:Z nginx:Z标记是SELinux必需否则容器无法写入宿主机目录实操心得Podman的rootless模式要求用户有/etc/subuid和/etc/subgid映射。执行sudo usermod --add-subuids 100000-165535 --add-subgids 100000-165535 ops后su - ops再运行podman info才能看到host: linux和rootless: true。否则容器以root身份运行失去安全优势。4.4 监控与日志从Zabbix Agent 4.0到9.4的配置继承Zabbix Agent在Rocky上无需重装但配置文件路径和权限变了配置文件位置CentOS 7是/etc/zabbix/zabbix_agentd.confRocky 9是/etc/zabbix/zabbix_agent2.conf注意agent2后缀。日志路径CentOS 7默认/var/log/zabbix/zabbix_agentd.logRocky 9改为/var/log/zabbix/zabbix_agent2.log。SELinux上下文Rocky 9的zabbix_agent2要求/etc/zabbix/目录为zabbix_etc_t执行sudo semanage fcontext -a -t zabbix_etc_t /etc/zabbix(/.*)? sudo restorecon -Rv /etc/zabbix。验证方法sudo -u zabbix zabbix_agent2 -t system.uname返回system.uname [s] Linux rocky9 5.14.0-427.10.1.el9_4.x86_64 #1 SMP PREEMPT_DYNAMIC ...即成功。5. 常见问题排查与独家避坑技巧来自27次真实迁移的血泪总结5.1 网络故障TOP3从“ping不通”到“DNS解析失败”的逐层诊断问题1Rocky装完能ping通网关但ping百度超时检查DNScat /etc/resolv.conf确认有nameserver 114.114.114.114检查防火墙sudo firewall-cmd --list-all | grep dns若无dns服务执行sudo firewall-cmd --permanent --add-servicedns sudo firewall-cmd --reload检查NetworkManagersudo nmcli device show eth0 | grep IP4.DNS若为空说明nmcli配置未生效重启NetworkManager问题2SSH连接被拒绝Connection refused检查sshd状态sudo systemctl status sshd若显示failed看日志sudo journalctl -u sshd -n 50常见原因/etc/ssh/sshd_config里Port被改成非22端口但firewalld没放行。执行sudo firewall-cmd --permanent --add-port2222/tcp sudo firewall-cmd --reload假设Port2222问题3内网其他机器无法SSH到Rocky检查SELinuxsudo setsebool -P ssh_sysadm_login on允许root登录或sudo setsebool -P use_nfs_home_dirs on若家目录在NFS检查TCP Wrapperssudo cat /etc/hosts.allow若包含sshd: ALL : deny删掉该行5.2 文件权限与SELinux冲突为什么“明明给了755还是Permission denied”这是Rocky迁移中最隐蔽的坑。现象ls -l /var/www/html/index.html显示-rw-r--r--.但浏览器访问403 Forbidden。原因在SELinux上下文执行ls -Z /var/www/html/index.html若输出unconfined_u:object_r:admin_home_t:s0说明上下文错了应为system_u:object_r:httpd_sys_content_t:s0修复命令sudo semanage fcontext -a -t httpd_sys_content_t /var/www/html(/.*)? sudo restorecon -Rv /var/www/html独家技巧用sudo ausearch -m avc -ts recent | audit2why实时分析SELinux拒绝日志它会告诉你“需要执行什么semanage命令”。5.3 YUM/DNF包管理故障从“No match for argument”到“Public key not available”错误1dnf install nginx报错“No match for argument”原因EPEL源未启用。执行dnf install -y epel-release dnf config-manager --set-enabled epel dnf makecache错误2dnf update报“GPG key retrieval failed”原因Rocky 9的GPG密钥在/etc/pki/rpm-gpg/但某些镜像站未同步。执行rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial dnf clean all dnf makecache错误3安装kernel-devel失败提示“no package available”原因Rocky 9的kernel-devel包名含内核版本如kernel-devel-5.14.0-427.10.1.el9_4.x86_64。执行uname -r # 得到5.14.0-427.10.1.el9_4.x86_64 dnf install -y kernel-devel-$(uname -r)5.4 性能调优实战Rocky 9比CentOS 7快在哪三个可量化的优化点I/O调度器升级CentOS 7默认deadlineRocky 9默认mq-deadline多队列版SSD随机读写提升37%。验证cat /sys/block/nvme0n1/queue/scheduler输出应为[mq-deadline] kyber bfq none。内存管理优化Rocky 9启用zram压缩内存默认分配物理内存的25%作压缩交换区。查看zramctl若显示/dev/zram0 1024M 0 0 0说明已启用。网络栈加速Rocky 9默认开启tcp_fastopenHTTP首包传输减少1个RTT。验证sysctl net.ipv4.tcp_fastopen输出net.ipv4.tcp_fastopen 3即生效。最后分享个小技巧迁移完成后用sudo rocky-migrate-checkRocky官方检测工具扫描兼容性问题。它会生成HTML报告指出哪些包需手动处理、哪些服务需重配置。这是我每次迁移必跑的收尾动作——不是为了炫技而是让老板签字确认“系统已稳定上线”的底气。