如何解决macOS Sierra及El Capitan中禁用USB大容量存储设备的问题?
折腾过不同macOS版本禁用USB存储的过来人来答一波!这俩版本的内核驱动差异确实容易踩坑,我帮你理清楚正确的操作步骤:
El Capitan 及更早版本的操作方式
在这些旧版本里,系统依赖的是IOUSBMassStorageClass内核扩展,操作起来比较直接:
- 临时禁用(重启后失效):打开终端,执行以下命令卸载驱动:
sudo kextunload -b com.apple.iokit.IOUSBMassStorageClass - 永久禁用:如果想要开机就禁用,可以把上面的命令添加到系统启动项里,或者修改内核扩展的加载权限(注意需符合系统权限要求)。
macOS Sierra/High Sierra 的差异与问题
到了Sierra和High Sierra,苹果替换了USB存储的内核驱动——原来的IOUSBMassStorageClass不再被系统加载,取而代之的是IOUSBMassStorageDriver。你可以用下面的命令验证这一点:
kextstat | grep USBMass
执行后你会发现输出里只有com.apple.iokit.IOUSBMassStorageDriver,完全找不到旧的那个扩展。
这时候如果你还尝试卸载旧的IOUSBMassStorageClass,就会碰到你提到的错误:
(kernel) Can't remove kext com.apple.iokit.IOUSBMassStorageDriver; services failed to terminate - 0xdc008018. Failed to unloa...
这个错误的原因很直白:一是你要卸载的旧驱动根本没在运行,二是当前活跃的IOUSBMassStorageDriver因为有依赖服务(比如正连接着USB存储设备,或者系统后台在占用它),所以无法直接卸载。
Sierra/High Sierra 禁用USB大容量存储的可行方案
1. 临时禁用(重启后恢复)
先确保所有USB存储设备都已经断开,然后在终端执行以下命令卸载当前驱动:
sudo kextunload -b com.apple.iokit.IOUSBMassStorageDriver
如果还是报错服务无法终止,再检查一遍有没有遗漏的USB存储设备,或者重启后再试。
2. 永久禁用(开机不加载)
因为系统的完整性保护(SIP)会阻止修改系统内核扩展,所以需要先关闭SIP再操作:
- 重启Mac,按住
Command + R进入恢复模式 - 打开终端,执行命令关闭SIP:
csrutil disable - 重启回到正常系统后,把驱动文件重命名,让系统无法加载它:
sudo mv /System/Library/Extensions/IOUSBMassStorageDriver.kext /System/Library/Extensions/IOUSBMassStorageDriver.kext.disabled - 最后再次进入恢复模式,执行命令重新启用SIP:
csrutil enable
重启之后,USB大容量存储设备就会被完全禁用了。如果之后需要恢复,只要把改名的驱动改回原来的文件名,重启即可。
内容的提问来源于stack exchange,提问作者Ned W.

