如何在启动期间将 zfs 内核模块列入黑名单?

如何在启动期间将 zfs 内核模块列入黑名单?

如何在 grub 启动前禁用 ZFS 内核模块?

提到一些模块可以通过 grub 命令行禁用,类似问题。不幸的是,此方法不适用于 zfs:

module_to_blacklist.blacklist=yes

下一条消息:未知参数‘黑名单’被忽略

答案1

如果我没有记错的话,您是通过 dkms 安装了 ZFS,那么看起来您需要通过相同的工具将其删除。

dkms remove [module/module-version] [-k kernel/arch] [--all]

       Removes a module/version or module/version/kernel/arch  combination
       from  the  tree.   If  the  module is currently installed, it first
       uninstalls  it  and  if  applicable,  will  replace  it  with   its
       original_module.   Use  the  --all  option  in  order to remove all
       instances for every kernel at once.

来源:http://manpages.ubuntu.com/manpages/trusty/man8/dkms.8.html

笔记:您可能希望避免使用 --all 选项,直到您确定已获得所需的结果。

答案2

我遇到这个问题是因为我想启动最新的 Ubuntu Live CD,这样内核就不会被污染。然而 ZFS 模块污染了内核。

TLDR;使用内核参数启动systemd.mask=zfs.target允许在启动时无需自动加载 zfs 模块。

在调查此事时,我发现有 3 个地方可以加载 zfs 模块。

  1. 初始化磁盘
    • 该文件/scripts/zfs尝试在 load_module_initrd 中加载模块,但只有存在内核参数时才会调用此方法boot=zfs
  2. 初始化文件
    • 脚本/etc/init.d/zfs-import在启动时会加载模块,但是这个初始化脚本默认只在运行级别S(单用户模式)启动,所以通常不会。
  3. systemd
    • zfs.target由 启动的目标multi-user.target将通过 加载模块zfs-load-module.service。可以使用内核启动参数禁用此功能systemd.mask=zfs.target

相关内容