我如何找出为什么 systemctl 服务“systemd-modules-load”失败?

我如何找出为什么 systemctl 服务“systemd-modules-load”失败?

一段时间以来,我在启动过程中看到一些红色文本闪烁。今天我决定研究一下。systemctl 服务systemd-modules-load.service失败并显示以下文本:

tomas@bonus-debian:~$ sudo systemctl status systemd-modules-load
● systemd-modules-load.service - 加载内核模块
   已加载:已加载(/lib/systemd/system/systemd-modules-load.service;静态;供应商预设:已启用)
   活动:失败(结果:退出代码)自 2015-11-09 02:58:48 CET;5 分钟前
     文档:man:systemd-modules-load.service(8)
           手册:modules-load.d(5)
  进程:644 ExecStart=/lib/systemd/systemd-modules-load(代码=已退出,状态=1/失败)
 主 PID:644(代码=已退出,状态=1/失败)

11 月 09 日 02:58:48 bonus-debian systemd[1]: 正在开始加载内核模块...
11 月 09 日 02:58:48 bonus-debian systemd-modules-load[644]: 无法找到模块“-r usbhid”
11 月 09 日 02:58:48 bonus-debian systemd[1]: systemd-modules-load.service: 主进程已退出,代码=已退出,状态=1/失败
11 月 09 日 02:58:48 bonus-debian systemd[1]: 无法启动加载内核模块。
11 月 09 日 02:58:48 bonus-debian systemd[1]: systemd-modules-load.service: 单元进入失败状态。
11 月 09 日 02:58:48 bonus-debian systemd[1]: systemd-modules-load.service: 失败,结果为“退出代码”。

我想先用谷歌搜索一下这个问题:

截屏

哎哟。

我的系统似乎并不介意驱动程序加载失败,因为我没有注意到体验下降,但我仍然想修复它。

由于 Google 一无所获,我已经陷入困境。我不知道从哪里开始寻找。

我如何找出为什么 systemctl 服务“systemd-modules-load”失败?

答案1

我也遇到了这个问题。我按照 Arch Linux 上的说明解决了这个问题systemd 维基页面。以下是我所做工作的总结:

  1. 让我们找出启动失败的 systemd 服务

    $ systemctl --failed  
    ------------------------------------------------------------------------
    systemd-modules-load.service   loaded failed failed  Load Kernel Modules
    
  2. 好的,我们发现 systemd-modules-load 服务存在问题。我们想了解更多信息。

    $ systemctl status systemd-modules-load  
    ------------------------------------------------------------------------
    systemd-modules-load.service - Load Kernel Modules      
       Loaded: loaded (/usr/lib/systemd/system/systemd-modules-load.service; static)     
       Active: failed (Result: exit-code) since So 2013-08-25 11:48:13 CEST; 32s ago  
         Docs: man:systemd-modules-load.service(8).  
               man:modules-load.d(5)
      Process: 15630 ExecStart=/usr/lib/systemd/systemd-modules-load (code=exited, status=1/FAILURE)
    

    如果未列出进程 ID,只需使用以下命令重新启动失败的服务

    $ systemctl restart systemd-modules-load
    
  3. 现在我们有了进程 ID (PID),可以深入调查此错误。使用当前进程 ID(此处为:15630)输入以下命令:

    $ journalctl _PID=15630
    ----------------------------------------------------------------------
    -- Logs begin at Sa 2013-05-25 10:31:12 CEST, end at So 2013-08-25 11:51:17 CEST. --
    Aug 25 11:48:13 mypc systemd-modules-load[15630]: Failed to find module 'blacklist usblp'
    Aug 25 11:48:13 mypc systemd-modules-load[15630]: Failed to find module 'install usblp /bin/false'
    
  4. 我们发现一些内核模块配置有错误。因此,我们在 /etc/modules-load.d/ 中查看这些设置

    $ ls -Al /etc/modules-load.d/
    ----------------------------------------------------------------------
    ...  
    -rw-r--r--   1 root root    79  1. Dez 2012  blacklist.conf  
    -rw-r--r--   1 root root     1  2. Mär 14:30 encrypt.conf  
    -rw-r--r--   1 root root     3  5. Dez 2012  printing.conf  
    -rw-r--r--   1 root root     6 14. Jul 11:01 realtek.conf  
    -rw-r--r--   1 root root    65  2. Jun 23:01 virtualbox.conf  
    ...  
    
  5. 无法找到模块“blacklist usblp”错误消息可能与 blacklist.conf 中的错误设置有关。让我们通过在步骤 3 中找到的每个选项前插入尾随 # 来停用它:

    /etc/modules-load.d/blacklist.conf  
    ----------------------------------------------------------------------
    # blacklist usblp  
    # install usblp /bin/false  
    
  6. 现在尝试启动 systemd-modules-load:

    $ systemctl restart systemd-modules-load  
    

    如果成功,则不会提示任何内容。如果看到任何错误,请返回步骤 3 并使用新的 PID 解决剩余的错误。

    如果一切正常,您可以使用以下命令验证服务是否已成功启动:

    $ systemctl status systemd-modules-load
    ----------------------------------------------------------------------
    systemd-modules-load.service - Load Kernel Modules
       Loaded: loaded (/usr/lib/systemd/system/systemd-modules-load.service; static)
       Active: active (exited) since So 2013-08-25 12:22:31 CEST; 34s ago
         Docs: man:systemd-modules-load.service(8)
               man:modules-load.d(5)
     Process: 19005 ExecStart=/usr/lib/systemd/systemd-modules-load (code=exited, status=0/SUCCESS)
    Aug 25 12:22:31 mypc systemd[1]: Started Load Kernel Modules.
    

答案2

就我而言

sudo update-initramfs -u

解决了问题。

答案3

我遇到此问题是因为 droidcam 卸载不完整。尽管已删除了所有恶意模块的痕迹,但我还是在启动时看到相同的错误(systemd-modules-load 失败)。对该模块的引用位于初始 ramdisk 中。我必须通过以 root 身份运行“dracut”来创建一个新的初始 ramdisk。要生成新的 ramdisk,请使用 bash 语法:

cd /boot
mv initramfs-$(uname -r).img initramfs-$(uname -r).img-bak
dracut initramfs-$(uname -r).img

相关内容