1. 为什么现在还要认真学装Rocky Linux?这可不是“又一个CentOS替代品”那么简单
Rocky Linux 9.8发布后,我连续三天收到不同行业朋友的私信:“真要换吗?”“和AlmaLinux比到底差在哪?”“我们生产环境跑着CentOS 7,现在切Rocky 9.8,中间那三年空白怎么填?”——这些问题背后,不是对操作系统的简单好奇,而是企业IT决策者在真实运维压力下的技术焦虑。Rocky Linux从来就不是“复制粘贴式”的CentOS复刻,它是一套完整的、面向现代数据中心的稳定型操作系统演进方案。9.8版本看似只是小版本迭代,实则在内核(5.14.0-503.el9)、SELinux策略集、RPM包签名验证机制、以及默认启用的BPF JIT编译器上做了大量静默加固。这些改动不体现在安装界面上,却直接决定你部署的Kubernetes节点能否通过等保三级基线扫描,也影响着容器运行时在高并发IO场景下的稳定性表现。
我去年帮某金融后台系统做迁移评估时发现:同样一套Jenkins流水线,在CentOS 7.9上构建耗时平均2分17秒,在Rocky Linux 9.5上首次运行反而慢了8秒——排查到最后,是9.5默认启用了fs.protected_regular=2内核参数,导致CI工具频繁触发路径保护检查。而9.8已将该参数优化为按需加载模式。这种细节,恰恰是“图文教程”里最容易被忽略、但线上出问题时最致命的一环。所以这篇内容不只教你点几下鼠标完成安装,更要带你理解:每一步选择背后的合规逻辑、每一份配置文件修改所承担的风险边界、每一个ISO镜像哈希值验证环节所防范的真实攻击面。适合三类人直接收藏:正在规划国产化替代的技术负责人、需要独立搭建测试环境的DevOps工程师、以及准备RHCSA/RHCE认证但苦于找不到稳定实验平台的备考者。你不需要懂C语言,但得明白为什么/boot/efi分区必须用FAT32;你不用背SELinux上下文,但得知道restorecon -Rv /var/www/html这条命令在部署Web服务时为何比chmod 755更安全。
2. 安装前必须搞清的四个底层逻辑:别让“顺利安装”成为后续故障的起点
2.1 Rocky Linux 9.8的架构定位:它不是CentOS的“平替”,而是RHEL生态的“守门人”
很多人把Rocky Linux简单理解为“CentOS停更后的接班人”,这是个危险的认知偏差。CentOS曾是RHEL的上游社区版,而Rocky Linux是RHEL的下游兼容发行版——这个方向性差异决定了它的核心使命:在完全不修改RHEL源码的前提下,实现100%二进制兼容,并承担起RHEL补丁延迟发布期间的安全兜底责任。举个具体例子:RHEL 9.3在2023年10月发布了关键内核漏洞CVE-2023-4587的修复补丁,但该补丁需经过Red Hat QA团队72小时回归测试。Rocky Linux团队会在收到补丁后4小时内完成本地验证并打包进rockylinux-updates仓库,这就是所谓“zero-day backport”。因此,当你下载Rocky Linux 9.8 ISO时,里面预置的内核版本号(5.14.0-503.el9)实际对应的是RHEL 9.3的第503次安全更新,而非某个独立开发的内核分支。这个逻辑直接影响你的安装策略:如果你的业务系统依赖特定内核模块(比如某些网卡驱动),就不能只看ISO发布日期,而必须查证该ISO对应的RHEL base version和kernel errata编号。我在某次银行核心系统迁移中就吃过亏——选了最新发布的9.8 ISO,结果发现其内核缺少某款加密卡所需的kvm-intel模块热插拔支持,最后不得不回退到9.6+手动打补丁的组合方案。
2.2 硬件兼容性清单的隐藏规则:别迷信官网列表,要看PCI ID数据库
Rocky Linux官网硬件兼容性页面只列出主流服务器厂商型号,但这远远不够。真正决定安装成败的是Linux内核对PCI设备ID的识别能力。以某国产GPU加速卡为例,其PCI Vendor ID为0x10de(NVIDIA),Device ID为0x2235,Subvendor ID为0x1234(某OEM厂商)。Rocky Linux 9.8内核默认只加载Vendor ID+Device ID匹配的驱动,而OEM定制卡的Subvendor ID若未被收录,就会出现“设备识别为Unknown device”的情况。解决方案不是换硬件,而是通过modprobe参数强制注入:
echo "options nvidia NVreg_EnableGpuFirmware=1" > /etc/modprobe.d/nvidia.conf dracut -f这个操作必须在安装完成后的首次启动前执行,否则initramfs里没有加载参数会导致系统卡在启动界面。我建议你在安装前先用Live CD模式启动,执行lspci -nn获取所有设备的完整ID串,然后去https://pci-ids.ucw.cz/ 查询对应驱动状态。如果发现关键设备(如RAID卡、HBA卡)的Subsystem ID未被收录,就要提前准备好驱动ISO或U盘——Rocky Linux 9.8安装程序支持在启动时按Tab键编辑内核参数,添加inst.ks=http://your-server/kickstart.cfg inst.dd来动态加载驱动。
2.3 分区方案的合规陷阱:为什么LVM不是万能解药,而/boot/efi必须独立
很多教程推荐“自动分区+LVM”,这在测试环境没问题,但在金融、政务等强监管场景是重大隐患。LVM的逻辑卷快照功能虽好,但会破坏文件系统级的写时复制(CoW)一致性,导致备份软件无法准确识别块级变更。某省社保系统就因LVM快照与Oracle RMAN备份冲突,造成归档日志丢失。Rocky Linux 9.8默认分区方案其实暗含深意:
/boot/efi:强制要求FAT32格式,大小固定1GB(非传统500MB),因为UEFI固件在Secure Boot模式下需预留足够空间存储PK/KEK密钥链/boot:独立ext4分区,最小512MB,禁用journal日志(tune2fs -O ^has_journal /dev/sda2),避免启动阶段journal replay失败导致内核panic/:根分区建议XFS格式(非ext4),因XFS的延迟分配(delayed allocation)机制在大文件写入时性能更优,且9.8内核对其配额管理做了深度优化- swap:不再推荐固定大小swap分区,改用zram+swapfile组合,内存小于16GB时启用zram,大于16GB则创建2GB swapfile(
fallocate -l 2G /swapfile && mkswap /swapfile)
特别注意:如果你的服务器启用了TPM 2.0芯片,必须在分区时勾选“Encrypt system”选项,否则后续无法启用BitLocker兼容的全盘加密(虽然Rocky用LUKS,但密钥派生流程需TPM绑定)。
2.4 网络配置的双重验证机制:DHCP不是终点,而是安全审计的起点
Rocky Linux 9.8安装器中的网络配置界面看似简单,实则埋着两层验证逻辑。第一层是传统DHCP租约获取,第二层是NetworkManager对DHCP响应包的DNSSEC验证。这意味着:如果你的内网DHCP服务器未启用DNSSEC签名(绝大多数老旧设备都不支持),安装过程会卡在“Configuring network...”长达3分钟,然后自动降级为无DNS配置。这不是bug,而是9.8新增的安全策略。解决方案有两个:
- 在安装启动时按Tab键,在内核参数末尾添加
ip=dhcp nameserver=114.114.114.114强制指定DNS - 进入TUI安装界面后,按Ctrl+Alt+F2切换到tty2,执行:
nmcli connection modify "Wired connection 1" ipv4.ignore-auto-dns yes nmcli connection down "Wired connection 1" && nmcli connection up "Wired connection 1"这个操作必须在安装程序开始复制文件前完成,否则网络配置会被覆盖。我在某高校超算中心部署时发现,其DHCP服务器使用ISC DHCPd 4.2版本,不支持RFC 8094定义的DNSSEC选项,最终采用方案2才顺利完成批量部署。
3. 安装过程全链路拆解:从ISO校验到首次登录的17个关键动作
3.1 ISO镜像下载与完整性验证:为什么SHA256还不够,必须交叉验证GPG签名
Rocky Linux官网提供多个镜像源,但最稳妥的选择永远是https://dl.rockylinux.org/pub/rocky/9.8/isos/x86_64/。这里要注意三个细节:
- 文件名中的
rocky-9.8-x86_64-dvd1.iso表示这是完整安装镜像(含所有软件包),而boot.iso仅用于PXE启动 - 同目录下的
rocky-9.8-x86_64-dvd1.iso.CHECKSUM文件包含SHA256和GPG两种校验方式,但很多教程只教SHA256验证,这是重大疏漏 - GPG签名文件
rocky-9.8-x86_64-dvd1.iso.asc必须用Rocky官方密钥验证,而非系统自带密钥环
完整验证流程如下(在Mac或Linux终端执行):
# 下载ISO和签名文件 curl -O https://dl.rockylinux.org/pub/rocky/9.8/isos/x86_64/rocky-9.8-x86_64-dvd1.iso curl -O https://dl.rockylinux.org/pub/rocky/9.8/isos/x86_64/rocky-9.8-x86_64-dvd1.iso.asc # 导入Rocky官方GPG密钥(密钥ID: 0x6D5E4572A27A5E2A) gpg --recv-keys 6D5E4572A27A5E2A # 验证签名 gpg --verify rocky-9.8-x86_64-dvd1.iso.asc rocky-9.8-x86_64-dvd1.iso # 同时校验SHA256(CHECKSUM文件里的值) sha256sum -c <(grep "rocky-9.8-x86_64-dvd1.iso" rocky-9.8-x86_64-dvd1.iso.CHECKSUM)提示:如果
gpg --verify显示“BAD signature”,说明ISO文件在传输过程中被篡改,或下载源不可信。此时应立即停止使用该文件,改用其他镜像站(如USTC、清华源)重新下载并验证。
3.2 制作启动介质的物理层要求:USB3.0接口的隐藏风险
用Rufus或balenaEtcher制作启动U盘时,99%的教程不会告诉你:Rocky Linux 9.8的启动加载器(grub2)对USB控制器供电有特殊要求。当U盘插入USB3.0接口时,某些主板(特别是Intel 300系芯片组)的xHCI控制器会在启动阶段关闭USB端口供电,导致安装程序无法读取U盘上的驱动模块。解决方案不是换U盘,而是修改BIOS设置:
- 进入BIOS后找到
Advanced → USB Configuration - 将
XHCI Hand-off设为Enabled(而非Disabled) - 将
Legacy USB Support设为Enabled - 保存退出后,必须冷重启(关机断电10秒),不能热重启
我在某次现场交付中遇到过极端案例:同一台Dell R740服务器,用同一U盘在USB2.0口能正常启动,在USB3.0口黑屏。最终发现是BIOS版本太旧(2.4.10),升级到2.8.10后问题解决。这个细节之所以重要,是因为Rocky Linux 9.8安装器在检测到USB设备异常时,不会报错提示,而是静默跳过驱动加载,导致后续RAID卡无法识别。
3.3 安装向导中的“隐藏菜单”:如何绕过图形界面直接进入高级配置
Rocky Linux 9.8安装器默认启动GUI模式,但很多服务器没有显卡或显存不足。此时按Ctrl+Alt+F2可切换到tty2命令行,但更高效的方式是在GRUB启动菜单按e键编辑启动参数:
- 找到以
linuxefi开头的行 - 在行尾添加
inst.text inst.ks=hd:LABEL=ROCKY98:/ks.cfg(假设U盘卷标为ROCKY98) - 按
Ctrl+X启动
这个操作能让你跳过所有图形向导,直接进入文本模式安装。更重要的是,它允许你加载自定义Kickstart文件(ks.cfg),实现全自动无人值守安装。一个典型的ks.cfg关键段落如下:
# 关键安全配置 auth --enableshadow --passalgo=sha512 firewall --enabled --ssh selinux --enforcing firstboot --disabled # 磁盘分区(XFS格式) part /boot/efi --fstype="efi" --size=1024 --fsoptions="umask=0077,shortname=winnt" part /boot --fstype="xfs" --size=1024 part pv.01 --size=100 --grow volgroup rhel --pesize=4096 pv.01 logvol / --fstype="xfs" --size=10240 --grow --name=root --vgname=rhel logvol swap --fstype="swap" --size=2048 --name=swap --vgname=rhel注意:
--fsoptions参数对/boot/efi分区至关重要,umask=0077确保EFI系统分区文件权限严格,防止恶意UEFI应用写入。
3.4 软件包选择的“最小必要”原则:为什么不要选“Everything”
安装界面的“Software Selection”页面提供多个环境组,新手常选“Everything”,这会导致安装时间延长3倍且引入大量冗余包。Rocky Linux 9.8的正确做法是:
- 生产服务器:选“Infrastructure Server” + 勾选“Headless Management”(启用cockpit远程管理)
- 开发测试机:选“Server with GUI” + 取消“Office Suite”和“Sound and Video”
- 容器主机:选“Minimal Install” + 手动添加
container-selinux和podman
特别提醒:如果你计划部署Kubernetes,务必在安装时勾选“Development Tools”组,否则gcc、make等编译工具缺失,后续编译内核模块(如nvidia-driver)会失败。我在某AI实验室部署时,因忘记勾选该选项,导致GPU驱动编译卡在/lib/modules/5.14.0-503.el9/build路径不存在的错误,折腾了4小时才发现是基础开发包缺失。
3.5 用户创建环节的密码强度博弈:为什么root密码必须满足8字符+大小写+数字+符号
Rocky Linux 9.8的密码策略由pam_pwquality.so模块控制,其配置文件/etc/security/pwquality.conf默认启用以下规则:
minlen = 8(最小长度)dcredit = -1(至少1个数字)ucredit = -1(至少1个大写字母)lcredit = -1(至少1个小写字母)ocredit = -1(至少1个特殊字符)maxrepeat = 3(禁止连续3个相同字符)
这个策略看似严苛,实则是为满足等保2.0三级要求。但很多用户在此卡住,因为输入法切换导致特殊字符(如@)被误输为中文符号(如@)。解决方案是:在密码输入框右键选择“Show password”,实时查看字符编码。更稳妥的做法是在安装完成后立即执行:
# 临时降低策略(仅限测试环境) sed -i 's/minlen = 8/minlen = 6/' /etc/security/pwquality.conf authconfig --update但请记住:生产环境绝对不要这样做,而应使用密码管理器生成符合要求的密码,例如用openssl rand -base64 12 | tr '+/' '-_'生成12位随机字符串。
4. 安装后必做的7项加固操作:让Rocky Linux 9.8真正达到生产就绪状态
4.1 内核参数调优:针对SSD和NVMe的I/O栈重配置
Rocky Linux 9.8默认内核对NVMe设备的调度器仍使用mq-deadline,这在高并发随机读写场景下不如none(即绕过内核调度器,由设备自身处理)。验证当前调度器:
cat /sys/block/nvme0n1/queue/scheduler # 输出应为 [mq-deadline] kyber bfq none永久修改方法(需重建initramfs):
# 创建内核参数文件 echo 'options nvme_core default_ps_max_latency_us=0' > /etc/modprobe.d/nvme.conf echo 'options nvme_core msi_irqs=1' >> /etc/modprobe.d/nvme.conf # 修改GRUB配置 echo 'nvme_core.default_ps_max_latency_us=0 nvme_core.msi_irqs=1' >> /etc/default/grub grubby --update-kernel=ALL --args="nvme_core.default_ps_max_latency_us=0 nvme_core.msi_irqs=1" # 重建initramfs dracut -f reboot重启后验证:
cat /sys/block/nvme0n1/queue/scheduler # 应显示 [none] mq-deadline kyber bfq这个调整能让NVMe SSD的4K随机写IOPS提升37%,某电商订单库实测TPS从8200提升至11300。
4.2 SELinux策略微调:在安全与可用性间找平衡点
Rocky Linux 9.8默认启用Enforcing模式,但某些应用(如自建GitLab)会因SELinux上下文限制无法正常工作。粗暴执行setenforce 0是危险操作,正确做法是:
# 先查看拒绝日志 ausearch -m avc -ts recent | audit2why # 生成自定义策略模块 ausearch -m avc -ts recent | audit2allow -M mygitlab semodule -i mygitlab.pp # 永久启用该模块 semodule -e mygitlab这个流程的关键在于audit2why输出的解释性文字,它会明确告诉你:“拒绝访问是因为/var/opt/gitlab/nginx/conf目录缺少httpd_config_t类型标签”。此时你可以选择:
- 给目录打标签:
semanage fcontext -a -t httpd_config_t "/var/opt/gitlab/nginx/conf(/.*)?" - 或修改策略:
setsebool -P httpd_can_network_connect 1
注意:
setsebool修改的是布尔值开关,而semanage fcontext修改的是文件标签,两者适用场景完全不同。
4.3 时间同步服务的双保险配置:chronyd vs systemd-timesyncd
Rocky Linux 9.8默认启用chronyd作为NTP客户端,但它在虚拟化环境中可能因CPU节流导致时间漂移。更稳妥的方案是启用双服务:
# 启用systemd-timesyncd作为备用 timedatectl set-ntp true systemctl enable systemd-timesyncd # 配置chronyd主服务(/etc/chrony.conf) server ntp.aliyun.com iburst server time1.cloud.tencent.com iburst driftfile /var/lib/chrony/drift makestep 1.0 3 rtcsync关键参数解释:
iburst:启动时快速同步,发送8个包而非默认的1个makestep 1.0 3:如果时间偏差超过1秒,且系统启动时间小于3秒,则立即跳跃校正(避免长时间偏差)rtcsync:每11分钟将系统时间同步到RTC硬件时钟
验证同步状态:
chronyc tracking # 查看偏移量(Offset字段) chronyc sources -v # 查看NTP源状态(MS字段应为^*表示主用)某次金融系统割接中,因chronyd未配置makestep,导致系统启动后时间偏差达42秒,引发Kafka消息时间戳校验失败。
4.4 SSH服务的纵深防御:从端口修改到密钥轮换的全流程
Rocky Linux 9.8的SSH默认配置存在两个隐患:
- 使用密码认证(易受暴力破解)
- 监听所有IP(0.0.0.0)
加固步骤:
# 生成ED25519密钥对(比RSA更安全) ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -N "" # 修改SSH配置(/etc/ssh/sshd_config) Port 2222 ListenAddress 192.168.1.100 # 仅监听内网IP PermitRootLogin no PasswordAuthentication no PubkeyAuthentication yes AllowUsers deployer ClientAliveInterval 300 ClientAliveCountMax 2 # 重启服务 systemctl restart sshd提示:修改Port后,必须更新firewalld规则:
firewall-cmd --permanent --add-port=2222/tcp && firewall-cmd --reload
4.5 日志集中管理:用journald+rsyslog实现双通道留存
Rocky Linux 9.8的journald默认只保留最近2周日志,这对故障追溯远远不够。正确做法是配置rsyslog转发到中央日志服务器:
# 启用journald持久化 mkdir -p /var/log/journal systemd-tmpfiles --create --prefix /var/log/journal # 配置rsyslog(/etc/rsyslog.conf) $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat *.* @@192.168.1.200:514 # @@表示TCP协议,@表示UDP # 重启服务 systemctl restart rsyslog同时,为防止网络中断导致日志丢失,需配置本地磁盘缓存:
# 创建缓存目录 mkdir -p /var/spool/rsyslog chown syslog:syslog /var/spool/rsyslog # 在rsyslog配置中添加 $WorkDirectory /var/spool/rsyslog $ActionQueueFileName fwdRule1 $ActionQueueMaxDiskSpace 1g $ActionQueueSaveOnShutdown on $ActionQueueType LinkedList $ActionResumeRetryCount -1这个配置确保即使中央日志服务器宕机,本地仍能缓存1GB日志,待网络恢复后自动补传。
4.6 内存压缩的智能启用:zram与zswap的协同策略
Rocky Linux 9.8默认启用zram作为压缩交换空间,但对内存大于32GB的服务器,zswap(压缩页缓存)更合适。判断标准:
- 内存≤16GB:启用zram(
systemctl enable zram-generator) - 内存16-32GB:zram+zswap双启用
- 内存>32GB:仅启用zswap(减少CPU开销)
配置zswap(/etc/default/grub):
# 在GRUB_CMDLINE_LINUX中添加 zswap.enabled=1 zswap.compressor=lz4 zswap.max_pool_percent=20 zswap.zpool=z3fold然后执行:
grubby --update-kernel=ALL --args="zswap.enabled=1 zswap.compressor=lz4 zswap.max_pool_percent=20 zswap.zpool=z3fold" dracut -f reboot验证:
cat /sys/module/zswap/parameters/enabled # 应输出Y cat /sys/module/zswap/parameters/max_pool_percent # 应输出20lz4压缩算法比默认的lzo快3倍,z3fold内存池比zbud节省15%元数据开销。
4.7 安全审计的自动化脚本:用aide检测文件完整性
Rocky Linux 9.8自带aide(Advanced Intrusion Detection Environment),但默认未启用。初始化步骤:
# 安装并初始化数据库 dnf install aide -y aide --init mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz # 配置定期检查(/etc/cron.daily/aide-check) #!/bin/bash /usr/bin/aide --check | /usr/bin/mail -s "AIDE Report $(hostname)" admin@example.com # 设置权限 chmod 700 /etc/cron.daily/aide-check chown root:root /etc/cron.daily/aide-check关键点:aide数据库必须存储在只读介质(如挂载为ro的/boot分区),否则攻击者可篡改数据库。某次渗透测试中,攻击者正是通过rm /var/lib/aide/aide.db.gz删除数据库,使后续文件篡改无法被检测。
5. 常见故障排查手册:从黑屏到服务失效的21个真实案例解析
5.1 安装过程黑屏:不是显卡驱动问题,而是UEFI固件的Secure Boot策略冲突
现象:安装程序启动后显示Rocky Logo,然后黑屏,键盘灯不亮。
根本原因:某些OEM厂商(如Lenovo ThinkSystem)的UEFI固件在Secure Boot开启时,会阻止加载未签名的GRUB模块,而Rocky 9.8的某些驱动模块(如nvme驱动)签名证书未被该固件信任。
排查步骤:
- 重启进入UEFI设置(开机按F1/F2/Del)
- 找到
Security → Secure Boot,暂时设为Disabled - 保存退出后重试安装
- 安装完成后,再进入UEFI启用Secure Boot,并在
Key Management中导入Rocky官方密钥(位于ISO的/EFI/BOOT/目录下)
注意:禁用Secure Boot只是临时方案,生产环境必须恢复并完成密钥导入,否则无法通过等保测评。
5.2 网络无法连接:DHCP租约获取成功但无DNS解析
现象:ip a显示已获取IP,但ping www.baidu.com失败,ping 114.114.114.114成功。
根本原因:Rocky 9.8的NetworkManager默认启用dns=systemd-resolved,而systemd-resolved服务未正确配置上游DNS。
解决方案:
# 编辑resolved配置 echo "DNS=114.114.114.114 223.5.5.5" > /etc/systemd/resolved.conf echo "FallbackDNS=8.8.8.8 1.1.1.1" >> /etc/systemd/resolved.conf systemctl restart systemd-resolved # 验证 resolvectl status | grep "DNS Servers"如果仍无效,检查/etc/NetworkManager/conf.d/99-custom-dns.conf是否存在并覆盖了DNS设置。
5.3 SSH无法登录:公钥认证失败但密码认证正常
现象:ssh -i key user@host提示“Permission denied (publickey)”,但密码登录正常。
根本原因:Rocky 9.8的sshd默认禁用PubkeyAuthentication,且用户家目录权限过于宽松(如755)。
排查命令:
# 检查sshd配置 sshd -T | grep pubkey # 检查家目录权限 ls -ld /home/deployer ls -l /home/deployer/.ssh # 正确权限应为: # /home/deployer: 700 # /home/deployer/.ssh: 700 # /home/deployer/.ssh/authorized_keys: 600修复命令:
chmod 700 /home/deployer chmod 700 /home/deployer/.ssh chmod 600 /home/deployer/.ssh/authorized_keys chown -R deployer:deployer /home/deployer/.ssh5.4 Docker服务启动失败:cgroup v2与systemd的兼容性问题
现象:systemctl start docker报错“failed to start daemon: cgroups: cannot found cgroup mount destination: unknown”.
根本原因:Rocky 9.8默认启用cgroup v2,而旧版Docker(<20.10)不支持。
解决方案:
# 方法1:升级Docker(推荐) dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo dnf install docker-ce docker-ce-cli containerd.io # 方法2:强制启用cgroup v1(临时) # 编辑GRUB配置,添加内核参数: # systemd.unified_cgroup_hierarchy=0 grubby --update-kernel=ALL --args="systemd.unified_cgroup_hierarchy=0" dracut -f reboot提示:cgroup v2是未来趋势,建议优先升级Docker而非降级内核特性。
5.5 磁盘空间告警:/var/log/journal占用过大
现象:df -h显示/var占满,du -sh /var/log/journal显示超过20GB。
根本原因:journald默认不限制日志大小,且未配置轮转。
清理命令:
# 保留最近30天日志 journalctl --vacuum-time=30d # 或限制最大占用1G mkdir -p /etc/systemd/journald.conf.d echo "[Journal]" > /etc/systemd/journald.conf.d/limit.conf echo "SystemMaxUse=1G" >> /etc/systemd/journald.conf.d/limit.conf systemctl restart systemd-journald注意:
journalctl --vacuum-time是即时清理,而配置文件修改需重启服务才生效。
5.6 时间不同步:chronyd服务显示“Leap status : Not synchronised”
现象:chronyc tracking显示Leap status : Not synchronised,且Offset值持续增大。
根本原因:防火墙阻止了NTP端口(123/udp)。
验证命令:
# 检查端口连通性 nc -uz ntp.aliyun.com 123 # 应返回0 # 检查firewalld规则 firewall-cmd --list-ports | grep 123修复:
firewall-cmd --permanent --add-service=ntp firewall-cmd --reload如果仍失败,检查是否启用了fail2ban服务,它可能误封NTP请求。
5.7 SELinux拒绝访问:Apache无法绑定80端口
现象:systemctl start httpd失败,ausearch -m avc -ts recent显示“avc: denied { name_bind } for port=80”。
根本原因:Rocky 9.8的SELinux策略默认禁止httpd绑定低端口(1-1023),除非明确授权。
解决方案:
# 查看当前端口标签 semanage port -l | grep http_port_t # 添加80端口到http_port_t类型 semanage port -a -t http_port_t -p tcp 80 semanage port -a -t http_port_t -p tcp 443 # 重启服务 systemctl restart httpd提示:
semanage port -l输出中的http_port_t表示“允许httpd绑定的端口类型”,添加新端口即扩展其权限范围。
5.8 内核崩溃:dmesg显示“BUG: unable to handle kernel NULL pointer dereference”
现象:系统随机崩溃,dmesg输出大量NULL pointer错误。
根本原因:Rocky 9.8内核与某些第三方驱动(如旧版NVIDIA驱动)不兼容。
排查步骤:
- 检查驱动版本:
nvidia-smi或dkms status - 查看内核日志:
dmesg -T | grep -i "nvidia\|gpu" - 升级驱动:
dnf install kmod-nvidia(Rocky官方仓库版本) - 若仍失败,临时禁用NVIDIA驱动:
rmmod nvidia_uvm nvidia_drm nvidia
5.9 YUM更新失败:Error: Failed to download metadata for repo 'appstream'
现象:dnf update报错“Failed to download metadata for repo 'appstream'”。
根本原因:Rocky 9.8的默认仓库URL已更新,旧配置指向不存在的路径。
修复命令:
# 清理缓存 dnf clean all # 重建仓库配置 dnf install -y dnf-plugins-core dnf config-manager --set-enabled powertools dnf distro-sync --refresh如果仍失败,手动编辑