我使用的是 Ubuntu 18.04。我正在尝试在启动时加载模块;有问题的模块是 iTCO_wdt。关于将内核模块列入黑名单有很多问题,但我正在尝试将其中一个列入白名单。
以下是我尝试在启动时加载模块所遵循的步骤:
- 添加
iTCO_wdt
到 /etc/modules (符号链接到 /etc/modules-load.d/modules.conf) - 注释掉
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