附录 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 --showconfig <_configuration_file_name_>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
如果模块出现在输出中,请确保它被忽略且没有加载:
modprobe --ignore-install <_module_name_>
# modprobe --ignore-install <_module_name_>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果载入了正在运行的系统,从正在运行的系统中卸载该模块:
modprobe -r <_module_name_>
# modprobe -r <_module_name_>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过将
blacklist行添加到系统专用的配置文件(如/etc/modprobe.d/local-dontload.conf)来防止直接加载模块:echo "blacklist <_module_name_> >> /etc/modprobe.d/local-dontload.conf
# echo "blacklist <_module_name_> >> /etc/modprobe.d/local-dontload.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果模块是另一个模块的必需依赖项或可选依赖项,则此步骤不会阻止模块加载。
防止根据需要载入可选模块:
echo "install <_module_name_>/bin/false" >> /etc/modprobe.d/local-dontload.conf
# echo "install <_module_name_>/bin/false" >> /etc/modprobe.d/local-dontload.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要如果其他硬件需要排除的模块,则排除该模块可能会导致意外的副作用。
生成
initramfs的备份副本:cp /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.$(date +%m-%d-%H%M%S).bak
# cp /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.$(date +%m-%d-%H%M%S).bakCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果内核模块是
initramfs的一部分,重建初始ramdisk镜像,省略该模块:dracut --omit-drivers <_module_name_> -f
# dracut --omit-drivers <_module_name_> -fCopy to Clipboard Copied! Toggle word wrap Toggle overflow 获取当前的内核命令行参数:
grub2-editenv - list | grep kernelopts
# grub2-editenv - list | grep kerneloptsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
<_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="<> <_module_name_>.blacklist=1 rd.driver.blacklist=<_module_name_>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
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_>"
# 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_>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 生成
kdump initramfs的备份副本:cp /boot/initramfs-$(uname -r)kdump.img /boot/initramfs-$(uname -r)kdump.img.$(date +%m-%d-%H%M%S).bak
# cp /boot/initramfs-$(uname -r)kdump.img /boot/initramfs-$(uname -r)kdump.img.$(date +%m-%d-%H%M%S).bakCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
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
# sed -i '/^KDUMP_COMMANDLINE_APPEND=/s/"$/ rd.driver.blacklist=module_name"/' /etc/sysconfig/kdumpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重启
kdump服务以获取对kdump initrd的更改:kdumpctl restart
# kdumpctl restartCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重建
kdump初始ramdisk镜像:mkdumprd -f /boot/initramfs-$(uname -r)kdump.img
# mkdumprd -f /boot/initramfs-$(uname -r)kdump.imgCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 重启系统:
E.1. 临时删除模块 复制链接链接已复制到粘贴板!
您可以临时删除模块。
流程
运行
modprobe以删除任何当前加载的模块:modprobe -r <module name>
# modprobe -r <module name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
如果模块无法卸载,则进程或其他模块可能仍在使用该模块。如果是,终止进程并运行在其他时间上写入的
modpole命令以卸载该模块。