自古以来,我们一直使用自己开发的系统来将内核模块加入黑名单(经历了各种迭代)。这个系统一直运行良好,但我们(或者更确切地说,我们的各种上游)现在已经到了不再需要它的地步。
因此,我们决定移除所有我们自己的模块黑名单逻辑,完全依赖 modprobe
提供的黑名单功能。这意味着语法上的改变以及功能上的细微变化。我们希望短期的不便能够被长期的收益所证明是值得的。
由于我们的 udev 软件包中一个不相关的更改,我们默认情况下不再加载像以前那么多的模块,因此一些有问题的模块(例如 pcspkr
和 snd-seq-oss
)可能不再需要被加入黑名单。
黑名单的不同概念
我们使用的模块黑名单概念(遗憾地)与 modprobe 使用的概念略有不同。
- 我们的黑名单:被列入黑名单的模块,或任何依赖于它的模块,永远不会被 udev 自动加载,但可以手动加载。
- modprobe 的黑名单:被列入黑名单的模块不会被自动加载,但如果另一个未被列入黑名单的模块依赖于它,或者如果它被手动加载,则可能会被加载。
- 禁用模块:可以通过强制模块总是加载失败来获得类似于我们过去提供的行为,这样就无法手动加载它。
启动时黑名单或禁用
模块可以在启动时被加入黑名单,方法是在内核命令行(在 grub、lilo 或 syslinux 中)附加 modprobe.blacklist=mod1,mod2,mod3
。或者,可以通过附加 mod1.disable=1 mod2.disable=1 mod3.disable=1
来完全禁用这些模块。这在紧急情况下非常有用,例如当一个损坏的模块导致系统无法启动时。
持久黑名单或禁用
与其在 rc.conf
中将模块加入黑名单,不如使用 modprobe 的原生配置文件。这些文件可以在 /etc/modprobe.d/
中找到,并在 man modprobe.d
中有文档说明。
rc.conf
中的 MODULES=(!mod1 !mod2 !mod3)
的替代方法是在 /etc/modprobe.d/
中添加一个 .conf
文件,内容为
blacklist mod1
blacklist mod2
blacklist mod3
或者,为了确保模块永远不会被插入,即使它们是您加载的其他模块所需要的
install mod1 /bin/false
install mod2 /bin/false
install mod3 /bin/false