关闭不必要的内核模块可降低内存占用、缩短启动时间并减少攻击面,须通过lsmod和modinfo确认模块状态,用rmmod临时卸载,再以blacklist+install /bin/true永久阻止加载,并更新initramfs。

关闭不必要的内核模块能有效降低内存占用、缩短启动时间,并减少潜在攻击面。这不是“禁用某个服务”,而是阻止内核加载它——模块不进内存,自然不耗资源。
确认哪些模块在运行且可卸载
先看当前已加载的模块及其依赖和大小:
- lsmod:列出所有已加载模块,重点关注 size 列(单位 KB)和 used by 列(是否被其他模块或子系统引用)
- modinfo 模块名:查看模块用途、参数、作者等,判断是否与你系统用途无关(如 bluetooth、firewire、snd_hda_codec_hdmi、ip6_tables)
- cat /proc/modules:和 lsmod 类似,但更原始,适合脚本解析
临时卸载(验证用途,不持久)
对已加载但当前无实际使用需求的模块,可用 rmmod 卸载:
- 确保模块未被使用:
rmmod -n 模块名(-n 表示只模拟,不真卸载,看是否允许) - 若无依赖报错,执行
rmmod 模块名 - 注意:某些模块(如 ext4、xhci_hcd)是根文件系统或 USB 控制器必需的,强行卸载会导致系统异常甚至崩溃
永久阻止加载(推荐方式)
让内核启动时直接跳过该模块,从源头节省内存:
- 在
/etc/modprobe.d/下新建配置文件(如blacklist-custom.conf) - 写入:
blacklist 模块名(例如blacklist bluetooth) - 若模块被其他模块自动拉起,还需加:
install 模块名 /bin/true(强制拦截加载请求) - 执行
sudo update-initramfs -u(Debian/Ubuntu)或sudo dracut --force(RHEL/CentOS/Fedora),确保 initramfs 不含被屏蔽模块
精简内核编译(终极方案,适用于嵌入式或定制环境)
如果你控制内核构建过程,最彻底的方式是在编译前剔除不需要的功能:
- 运行
make menuconfig进入图形化配置界面 - 将非必需驱动(如 IDE、SCSI 备用控制器)、协议栈(IPv6、DECnet)、文件系统(hfs、minix、smb)、调试功能(CONFIG_DEBUG_KERNEL、ftrace)设为
N(不编译)或M(编译为模块,再配合黑名单禁用) - 保存配置后重新编译安装,生成的内核体积更小、内存驻留更少、启动更快


















