有一个损坏的内核模块,导致我甚至无法加载操作系统,因此我无法删除或修复它。是否可以使用内核参数或其他方法在启动时跳过此模块?
答案1
上一个答案中提到的将模块列入黑名单是完全避免使用内核模块的最佳方法。除了列入黑名单之外,没有通用方法可以禁用模块。
一些 Linux 发行版确实提供了内核启动参数来执行此类操作。
- 在 Arch Linux 中,
load_modules=off
强制 udev 跳过自动加载。这将允许您在不加载模块的情况下启动,将导致问题的模块列入黑名单,并正常重新启动而不加载有问题的模块。 - Knoppix 有一系列额外的启动参数(又称“作弊代码”);这些是正常内核启动参数和 Knoppix 特定的附加参数的混合。
如需了解更多信息,请参阅内核参数文档。有用于禁用特定子系统的参数。例如:
nousb
禁用内核 USB 支持cgroup_disable=[name]
禁用特定控制器;但是,“内存”是唯一特别支持的示例libata.noacpi
禁用 libata(SATA 控制器)中的 ACPI 使用;这是通过内核传递模块参数的示例
答案2
禁用特定模块是可能从引导加载程序实现,但看起来确实依赖于发行版。
一方面,Linux 内核参数文献指出,截至 2016 年 8 月:
module_blacklist=
[KNL] 不加载以逗号分隔的模块列表。这对于调试问题模块很有用。
另一方面,对于我来说,openSUSE 42.1(Linux 4.1.31)的选项在 Arch 内核模块维基百科:
您还可以将引导加载程序中的模块列入黑名单。只需添加
modprobe.blacklist=modname1,modname2,modname3
到引导加载程序的内核行,如内核参数中所述。将多个模块列入黑名单时,请注意它们仅用逗号分隔。空格或其他任何字符都可能会破坏语法。
(感谢@gertvdijk unix系统指出这一点。
另外值得一提的是以下方法:
为了防止内核使用 grub 命令行加载某些模块,您需要使用以下语法将它们作为参数传递给内核行。
$module_name.blacklist=yes
我不知道他们是从哪里得到这个的,但如果其他方法都失败了,尝试其他方法肯定不会有坏处。
答案3
您应该能够将其添加到 /etc/modprobe.d/blacklist,或将“modulename”列入黑名单
答案4
在 Grub 2 中,我添加(输入)了一个命令
modprobe.blacklist=radeon
将在我的笔记本电脑上无法运行的 radeon 图形模块/驱动程序列入黑名单,并且成功了。
(出现 GRUB 2 菜单时按 Tab 键添加参数。)
(不要忘记 modprobe.blacklist 前面的空格!)
(详细信息:我从 Live USB 启动来安装 Linux Mint,但这在这里并不重要。)