附录 E. 防止内核模块自动载入
您可以防止自动加载内核模块,无论是直接加载模块,还是在引导过程中作为依赖项载入。
流程
模块名称必须添加到
modprobe
实用程序的配置文件中。此文件必须位于配置目录/etc/modprobe.d
中。有关此配置目录的更多信息,请参阅 man page
modprobe.d
。确保该模块没有配置为在以下任意位置载入:
-
/etc/modprobe.conf
-
/etc/modprobe.d/*
-
/etc/rc.modules
-
/etc/sysconfig/modules/*
# modprobe --showconfig <_configuration_file_name_>
-
如果模块出现在输出中,请确保它被忽略且没有加载:
# modprobe --ignore-install <_module_name_>
如果载入了正在运行的系统,从正在运行的系统中卸载该模块:
# modprobe -r <_module_name_>
通过将
blacklist
行添加到系统专用的配置文件(如/etc/modprobe.d/local-dontload.conf
)来防止直接加载模块:# echo "blacklist <_module_name_> >> /etc/modprobe.d/local-dontload.conf
注意如果模块是另一个模块的必需依赖项或可选依赖项,则此步骤不会阻止模块加载。
防止根据需要载入可选模块:
# echo "install <_module_name_>/bin/false" >> /etc/modprobe.d/local-dontload.conf
重要如果其他硬件需要排除的模块,则排除该模块可能会导致意外的副作用。
生成
initramfs
的备份副本:# cp /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.$(date +%m-%d-%H%M%S).bak
如果内核模块是
initramfs
的一部分,重建初始ramdisk
镜像,省略该模块:# dracut --omit-drivers <_module_name_> -f
获取当前的内核命令行参数:
# grub2-editenv - list | grep kernelopts
将
<_module_name_>.blacklist=1 rd.driver.blacklist=<_module_name_>
附加到生成的输出中:# grub2-editenv - set kernelopts="<> <_module_name_>.blacklist=1 rd.driver.blacklist=<_module_name_>"
例如:
# grub2-editenv - set kernelopts="root=/dev/mapper/rhel_example-root ro crashkernel=auto resume=/dev/mapper/rhel_example-swap rd.lvm.lv=rhel_example/root rd.lvm.lv=rhel_example/swap <_module_name_>.blacklist=1 rd.driver.blacklist=<_module_name_>"
生成
kdump initramfs
的备份副本:# cp /boot/initramfs-$(uname -r)kdump.img /boot/initramfs-$(uname -r)kdump.img.$(date +%m-%d-%H%M%S).bak
将
rd.driver.blacklist=<_module_name_>
附加到/etc/sysconfig/kdump
文件中的KDUMP_COMMANDLINE_APPEND
设置中,以从kdump initramfs
中忽略它:# sed -i '/^KDUMP_COMMANDLINE_APPEND=/s/"$/ rd.driver.blacklist=module_name"/' /etc/sysconfig/kdump
重启
kdump
服务以获取对kdump initrd
的更改:# kdumpctl restart
重建
kdump
初始ramdisk
镜像:# mkdumprd -f /boot/initramfs-$(uname -r)kdump.img
- 重启系统:
E.1. 临时删除模块
您可以临时删除模块。
流程
运行
modprobe
以删除任何当前加载的模块:# modprobe -r <module name>
-
如果模块无法卸载,则进程或其他模块可能仍在使用该模块。如果是,终止进程并运行在其他时间上写入的
modpole
命令以卸载该模块。