覆盖 modprobe.d 黑名单

覆盖 modprobe.d 黑名单

我使用的是 Ubuntu 18.04。我正在尝试在启动时加载模块;有问题的模块是 iTCO_wdt。关于将内核模块列入黑名单有很多问题,但我正在尝试将其中一个列入白名单。

以下是我尝试在启动时加载模块所遵循的步骤:

  1. 添加iTCO_wdt到 /etc/modules (符号链接到 /etc/modules-load.d/modules.conf)
  2. 注释掉blacklist iTCO_wdt/etc/modprobe.d/blacklist-watchdog.conf 中的行

我认为这已经足够了,但 syslog 仍然显示该模块已被列入黑名单:

systemd-modules-load[331]: Module 'iTCO_wdt' is blacklisted

经过一番调查,我发现该模块也在 /lib/modprobe.d 中的几个维护者安装的黑名单文件中被列入黑名单:

$ grep -l 'blacklist iTCO_wdt' /lib/modprobe.d/*
/lib/modprobe.d/blacklist_linux_4.15.0-20-generic.conf
/lib/modprobe.d/blacklist_linux_4.15.0-23-generic.conf

我发现每个文件确实影响了 modprobe 行为,这令人惊讶,因为当 linux_4.15.0.23-generic 是当前内核时,我不希望 linux_4.15.0.20-generic.conf 文件影响机器的行为。

注释掉blacklist iTCO_wdt每个文件中的行并重新启动后,模块会自动加载,这是所需的行为。

因此,正如我所见,有几种方法可以使模块加载,即使它被 /lib/modprobe.d 文件列入黑名单:

  • 手动注释掉blacklist iTCO_wdt每个文件中的行
  • 在我自己的启动时运行的脚本中加载模块

问题是未来的更新可能会安装新的 /lib/modprobe.d 黑名单文件,这可能会将 iTCO_wdt 重新列入黑名单。考虑到这一点,我最好的选择似乎是最后一个,尽管我真的不喜欢它,因为它依赖于我自己的脚本而不是内置的模块加载系统。

考虑到我不想在每次内核更新后编辑 /lib/modprobe.d 文件,在模块加载系统中将 iTCO_wdt 模块永久列入白名单的最佳方法是什么?

答案1

我正好遇到了这个问题。我找到的解决方案(通过阅读看门狗文档http://www.sat.dundee.ac.uk/psc/watchdog/Linux-Watchdog.html)是将内核模块的名称(iTCO_wdt)编辑到/etc/default/watchdog中。所以改变这一行:

看门狗模块=“无”

watchdog_module=“iTCO_wdt”

不需要更改任何黑名单文件或其他任何内容 - 它就可以工作(在 Mint 19.1 上)!

正如文档中所述,这绕过了 OP 描述的行为以及似乎被视为 systemd 中的错误的行为

答案2

实际上它也被 initrd (ramdisk) 阻止了。您还需要更新 ramdisk 中的黑名单配置:

$ sudo update-initramfs -u

相关内容