【Linux】解决开机启动时的systemd-modules-load.service失败的问题

这篇博客讲述了用户在CentOS Stream 8上遇到systemd-modules-load.service启动失败的问题,通过编辑modprobe.d/blacklist-ipmi.conf文件,添加模块黑名单解决'ipmi'相关错误,并详细展示了操作步骤和成功后的状态。

!解决开机启动时的systemd-modules-load.service失败的问题

昨天我运行了dnf更新,Centos Stream 8 内核是 4.18.0-365.el8.x86_64,重新启动多次失败。

[root@Harbor ~]# systemctl status systemd-modules-load.service
● systemd-modules-load.service - Load Kernel Modules
   Loaded: loaded (/usr/lib/systemd/system/systemd-modules-load.service; static; vendor preset: disabled)
   Active: failed (Result: exit-code) since Mon 2022-03-07 16:22:22 CST; 52s ago
     Docs: man:systemd-modules-load.service(8)
           man:modules-load.d(5)
  Process: 923 ExecStart=/usr/lib/systemd/systemd-modules-load (code=exited, status=1/FAILURE)
 Main PID: 923 (code=exited, status=1/FAILURE)

3月 07 16:22:22 Harbor systemd-modules-load[923]: Module 'msr' is builtin
3月 07 16:22:22 Harbor systemd-modules-load[923]: Failed to insert 'ipmi_si': No such device
3月 07 16:22:22 Harbor systemd[1]: systemd-modules-load.service: Main process exited, code=exited, status=1/FAILURE
3月 07 16:22:22 Harbor systemd[1]: systemd-modules-load.service: Failed with result 'exit-code'.
3月 07 16:22:22 Harbor systemd[1]: Failed to start Load Kernel Modules.
[root@Harbor ~]# journalctl _PID=912
-- Logs begin at Mon 2022-03-07 16:38:27 CST, end at Mon 2022-03-07 16:39:43 CST. --
3月 07 16:38:33 Harbor systemd-modules-load[912]: Module 'msr' is builtin
3月 07 16:38:33 Harbor systemd-modules-load[912]: Failed to insert 'ipmi_si': No such device
[root@Harbor ~]# journalctl _SYSTEMD_UNIT=systemd-modules-load.service
-- Logs begin at Mon 2022-03-07 16:38:27 CST, end at Mon 2022-03-07 16:39:43 CST. --
3月 07 16:38:33 Harbor systemd-modules-load[912]: Module 'msr' is builtin
3月 07 16:38:33 Harbor systemd-modules-load[912]: Failed to insert 'ipmi_si': No such device

解决办法如下:

vi /etc/modprobe.d/blacklist-ipmi.conf 
blacklist ipmi_si
blacklist ipmi_devintf
blacklist ipmi_msghandler
blacklist ipmi_ssif
blacklist ipmi_watchdog
blacklist ipmi_poweroff
blacklist acpi_ipmi
blacklist ibmaem
blacklist ibmpex

启动正常了!

[root@Harbor ~]# systemctl restart systemd-modules-load.service
[root@Harbor ~]# systemctl status systemd-modules-load.service
● systemd-modules-load.service - Load Kernel Modules
   Loaded: loaded (/usr/lib/systemd/system/systemd-modules-load.service; static; vendor preset: disabled)
   Active: active (exited) since Mon 2022-03-07 16:51:50 CST; 1s ago
     Docs: man:systemd-modules-load.service(8)
           man:modules-load.d(5)
  Process: 1860 ExecStart=/usr/lib/systemd/systemd-modules-load (code=exited, status=0/SUCCESS)
 Main PID: 1860 (code=exited, status=0/SUCCESS)

3月 07 16:51:50 Harbor systemd[1]: Starting Load Kernel Modules...
3月 07 16:51:50 Harbor systemd[1]: Started Load Kernel Modules.
你看到的状态是: ```text ● load-wifi-module.service - Load WiFi Driver Module (88x2cu_v2.0.ko) Loaded: loaded (/lib/systemd/system/load-wifi-module.service; enabled; vendor preset: enabled) Active: inactive (dead) ``` 这说明: - ✅ 服务已正确加载(配置文件存在且语法合法) - ✅ 已启用开机自启(`enabled`) - ❌ 但**从未成功启动过**,或上次运行失败后未重试 > 🔴 `inactive (dead)` 表示服务没有运行,也没有完成执行(不像 `active (exited)` 那样表示“运行完了”)。 --- ## 🚨 常见原因分析 | 可能原因 | 检查方式 | |--------|---------| | 1. 上次启动失败导致未激活 | `systemctl status` 和 `journalctl` 显示错误 | | 2. 脚本路径错误 / 权限不足 | systemd 找不到或无法执行脚本 | | 3. 模块文件不存在 | `.ko` 文件不在指定路径 | | 4. Secure Boot 阻止加载 | 日志中出现 "Required key not available" | | 5. 内核版本不匹配 | 模块为其他内核编译 | | 6. 服务未手动触发且依赖未满足 | 等待某个 target 失败 | --- ## ✅ 第一步:查看详细日志(关键!) 运行以下命令找出真正失败原因: ```bash sudo systemctl status load-wifi-module.service ``` 输出示例: ```text ● load-wifi-module.service - Load WiFi Driver Module (88x2cu_v2.0.ko) Loaded: loaded (/etc/systemd/system/load-wifi-module.service; enabled; vendor preset: enabled) Active: failed (Result: exit-code) since Mon 2025-04-05 10:20:00 CST; 1min ago Process: ExecStart=/usr/local/bin/load_wifi_module.sh (code=exited, status=1/FAILURE) Main PID: 1234 (code=exited, status=1/FAILURE) Apr 05 10:20:00 ubuntu load_wifi_module.sh[1234]: insmod: error inserting '...': -1 Invalid module format ``` 如果上面没信息,用: ```bash sudo journalctl -u load-wifi-module.service --boot ``` 或者看最近一次启动的日志: ```bash sudo journalctl -u load-wifi-module.service -b ``` > `-b` 表示当前 boot 的日志。这是最关键的诊断工具! --- ## ✅ 第二步:确认服务是否真的尝试运行了 你可以强制重新启动一次服务来触发并观察: ```bash # 重载配置(确保最新) sudo systemctl daemon-reload # 尝试启动服务 sudo systemctl start load-wifi-module.service # 立即查看状态 sudo systemctl status load-wifi-module.service ``` 现在你应该能看到更详细的错误信息。 --- ## ✅ 典型错误场景与修复方法 ### 🟡 场景 1:`insmod: error inserting: -1 Invalid module format` #### 🔍 原因: 模块不是为当前运行的内核编译的。 #### ✅ 解决方案: 1. 查看当前内核版本: ```bash uname -r # 输出如:5.10.209-rt89 ``` 2. 确保你的驱动是为此版本内核编译的。 3. 安装对应头文件并重新编译: ```bash sudo apt install linux-headers-$(uname -r) cd /path/to/driver/source make clean && make sudo cp 88x2cu_v2.0.ko /lib/modules/$(uname -r)/kernel/drivers/wifi/ sudo depmod -a ``` --- ### 🟡 场景 2:`Required key not available` 或 `Operation not permitted` #### 🔍 原因: Secure Boot 启用,禁止加载未签名模块。 #### ✅ 检查是否开启: ```bash mokutil --sb-state ``` 输出如果是: ``` SecureBoot enabled ``` 就必须签名模块或关闭 Secure Boot。 #### ✅ 临时解决方案(测试用): 进入 BIOS → 关闭 Secure Boot。 #### ✅ 正式解决方案: 使用 MOK(Machine Owner Key)对模块签名,后续问题会详解。 --- ### 🟡 场景 3:脚本找不到或无权限 检查服务文件中的 `ExecStart=` 路径是否准确: ```ini ExecStart=/usr/local/bin/load_wifi_module.sh ``` 验证是否存在: ```bash ls -l /usr/local/bin/load_wifi_module.sh ``` 应显示可执行权限,如: ``` -rwxr-xr-x 1 root root ... ``` 否则修复: ```bash sudo chmod +x /usr/local/bin/load_wifi_module.sh ``` --- ### 🟡 场景 4:模块已存在 / 被占用 日志中可能有: ``` File exists ``` 先卸载再试: ```bash sudo rmmod 88x2cu_v20 # 注意实际模块名可能不同 ``` 查看真实模块名: ```bash modinfo /lib/modules/$(uname -r)/kernel/drivers/wifi/88x2cu_v2.0.ko | grep "^name:" ``` --- ## ✅ 推荐调试脚本增强版(带日志) 更新 `/usr/local/bin/load_wifi_module.sh`: ```bash #!/bin/bash LOGFILE="/var/log/wifi-module-load.log" { echo "[$(date)] Starting module load..." MODULE_PATH="/lib/modules/$(uname -r)/kernel/drivers/wifi/88x2cu_v2.0.ko" echo "Module path: $MODULE_PATH" if [ ! -f "$MODULE_PATH" ]; then echo "❌ ERROR: Module file not found!" echo "Contents of directory:" ls -la "$(dirname "$MODULE_PATH")" exit 1 fi echo "Loading module..." insmod "$MODULE_PATH" RESULT=$? case $RESULT in 0) echo "✅ Success: Module loaded." ;; 1) echo "❌ Error 1: Operation not permitted (Secure Boot?)" ;; 2) echo "❌ Error 2: Invalid module format (version mismatch)" ;; *) echo "❌ Unknown error: $RESULT" ;; esac echo "Current loaded modules (grep 88x2cu):" lsmod | grep -i 88x2cu } >> "$LOGFILE" 2>&1 exit $RESULT ``` 设置日志文件权限: ```bash sudo touch /var/log/wifi-module-load.log sudo chmod 644 /var/log/wifi-module-load.log ``` 然后重启服务测试: ```bash sudo systemctl restart load-wifi-module.service sudo systemctl status load-wifi-module.service cat /var/log/wifi-module-load.log ``` --- ## ✅ 最终建议操作流程 ```bash # 1. 重载配置 sudo systemctl daemon-reload # 2. 启动服务 sudo systemctl start load-wifi-module.service # 3. 查看状态 sudo systemctl status load-wifi-module.service # 4. 查看完整日志 sudo journalctl -u load-wifi-module.service -b --no-pager # 5. 检查模块是否加载 lsmod | grep 88x2cu ``` --- ##
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值