附录 D. 防止内核模块自动载入
您可以防止自动加载内核模块,无论是直接加载模块,还是在引导过程中作为依赖项载入。
流程
模块名称必须添加到
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! -
如果模块出现在输出中,请确保它被忽略且没有加载:
modprobe --ignore-install <_module_name_>
# modprobe --ignore-install <_module_name_>
Copy to Clipboard Copied! 如果载入了正在运行的系统,从正在运行的系统中卸载该模块:
modprobe -r <_module_name_>
# modprobe -r <_module_name_>
Copy to Clipboard Copied! 通过将
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.conf
Copy to Clipboard Copied! 注意如果模块是另一个模块的必需依赖项或可选依赖项,则此步骤不会阻止模块加载。
防止根据需要载入可选模块:
echo "install <_module_name_>/bin/false" >> /etc/modprobe.d/local-dontload.conf
# echo "install <_module_name_>/bin/false" >> /etc/modprobe.d/local-dontload.conf
Copy to Clipboard Copied! 重要如果其他硬件需要排除的模块,则排除该模块可能会导致意外的副作用。
生成
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).bak
Copy to Clipboard Copied! 如果内核模块是
initramfs
的一部分,重建初始ramdisk
镜像,省略该模块:dracut --omit-drivers <_module_name_> -f
# dracut --omit-drivers <_module_name_> -f
Copy to Clipboard Copied! 获取当前的内核命令行参数:
grub2-editenv - list | grep kernelopts
# grub2-editenv - list | grep kernelopts
Copy to Clipboard Copied! 将
<_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! 例如:
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! 生成
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).bak
Copy to Clipboard Copied! 将
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/kdump
Copy to Clipboard Copied! 重启
kdump
服务以获取对kdump initrd
的更改:kdumpctl restart
# kdumpctl restart
Copy to Clipboard Copied! 重建
kdump
初始ramdisk
镜像:mkdumprd -f /boot/initramfs-$(uname -r)kdump.img
# mkdumprd -f /boot/initramfs-$(uname -r)kdump.img
Copy to Clipboard Copied! - 重启系统:
D.1. 临时删除模块
您可以临时删除模块。
流程
运行
modprobe
以删除任何当前加载的模块:modprobe -r <module name>
# modprobe -r <module name>
Copy to Clipboard Copied! -
如果模块无法卸载,则进程或其他模块可能仍在使用该模块。如果是,终止进程并运行在其他时间上写入的
modpole
命令以卸载该模块。