真正起作用的是install 模块名 /bin/false配合blacklist 模块名,需写入/etc/modprobe.d/*.conf文件、权限644,禁用后须更新initramfs并重启验证。

配置文件必须规范
在 /etc/modprobe.d/ 下新建一个以 .conf 结尾的文件(如 disable-usb-storage.conf),内容需同时包含两行:
- blacklist 模块名:语义明确,兼容旧工具
- install 模块名 /bin/false:强制所有加载尝试失败,覆盖依赖、udev、脚本调用等全部路径
例如禁用 USB 存储驱动:
blacklist usb-storage<br>install usb-storage /bin/false<br>blacklist uas<br>install uas /bin/false
注意:模块名不带 .ko 或扩展名;大小写需与 lsmod 输出一致(如 btusb 不是 BTUSB)。
避开静默失效的坑
配置写对但没生效?大概率卡在这几个环节:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- 文件名不是
.conf后缀(blacklist、disable.txt都被忽略) - 权限含 group 或 other 可写(如
chmod 664),modprobe 直接跳过读取;推荐chmod 644 - 只写了
blacklist,没配install /bin/false—— 一旦其他模块(如ums-realtek)依赖它,仍会被拉起 - 误禁底层总线模块(如
usbcore、pci_core),导致整条设备链瘫痪
验证是否真正生效
不能只看 lsmod | grep xxx,要分三步确认:
- 运行
modprobe -n -v 模块名:输出中必须出现install /bin/false,而非insmod路径 - 插入对应硬件(如 U 盘)后立即执行
dmesg | tail -10:不应出现该模块 probe 成功的日志(如usb-storage、scsi add-single-device) - 执行
lsmod | grep 模块名:无任何输出;若之前已加载,需先sudo modprobe -r 模块名再查
配套动作不可跳过
仅改配置文件远远不够,必须更新 initramfs 并重启:
- Debian/Ubuntu 系统:
sudo update-initramfs -u - RHEL/CentOS/Fedora 系统:
sudo dracut --force
否则旧 initramfs 仍在启动早期加载模块,新配置形同虚设。若模块是编译进内核的(grep CONFIG_USB_STORAGE /boot/config-$(uname -r) 显示 =y),黑名单完全无效,只能通过 GRUB 添加 modprobe.blacklist=模块名 参数并更新引导配置。

















