应使用kextstat或kmutil命令筛选块设备相关内核扩展,并结合ioreg -p ioservice -n "ioblockstoragedevice"验证驱动是否绑定到/dev/diskx节点;catalina后还需在隐私设置中授权内核扩展。
要查看 macos 当前所有已加载的底层块设备驱动,核心是定位与存储类硬件(如 ssd、hdd、usb/thunderbolt 外置盘、sd 卡读卡器等)直接关联的内核扩展(kext),并确认它们是否已成功绑定到实际块设备节点(如 /dev/diskx)。macos 不使用 linux 风格的“模块”概念,而是通过 i/o kit 驱动框架加载 kext,并由 i/o registry(ioreg)管理设备树关系。
查已加载的块设备相关内核扩展
块设备驱动通常以 AppleAHCIPort(SATA)、AppleNVMe、IOBlockStorageDriver、AppleUSBCardReader、AppleSDXC、IOUSBMassStorageDriver 等为标识。运行以下命令可筛选出典型块设备驱动:
kextstat | grep -E "(NVMe|AHCI|BlockStorage|CardReader|SDXC|MassStorage|USB.*Storage)"- 若需更宽泛匹配,可用:
kextstat | grep -i "storage\|disk\|block\|sd\|usb.*mass" - 注意:macOS 13+ 已逐步用
kmutil替代kextstat;如遇提示弃用,改用:kmutil showloaded | grep -E "(NVMe|AHCI|BlockStorage|CardReader)"
查驱动是否真正绑定到块设备节点
仅加载 kext 不代表设备已被识别为可用块设备。需验证 I/O 层是否生成了 IOBlockStorageDevice 实例:
- 执行:
ioreg -p IOService -n "IOBlockStorageDevice" -w 0 - 有输出说明系统已将物理设备抽象为块设备,驱动链路完整;无输出则设备未被枚举或驱动未正确挂载
- 配合
diskutil list对照:若某diskX出现在列表中,但上述 ioreg 无对应节点,大概率是驱动加载失败或权限阻断
查 USB/Thunderbolt 存储设备的驱动状态
外置存储依赖桥接驱动,常是排查重点:
- 先确认设备是否被 USB/Thunderbolt 总线识别:
system_profiler SPUSBDataType | grep -A5 -B2 "Product\|Vendor" - 再检查其是否触发块设备层:
ioreg -p IOUSB -l | grep -A10 -B2 "IOBlockStorageDevice" - 若设备出现在 USB 列表但未在块设备注册表中出现,说明
IOUSBMassStorageDriver或具体芯片驱动(如ch34x、cp210x)未加载或被阻止
查驱动签名与授权状态(Catalina 及以后必需)
未获用户授权的第三方块设备驱动(如某些 SD 卡读卡器或 NVMe 扩展卡驱动)会静默失败:
- 终端中无法直接读取授权状态,但可通过日志辅助判断:
log show --predicate 'subsystem == "com.apple.driver.AppleUSBCardReader" || subsystem == "com.apple.driver.AppleSDXC"' --last 10m | grep -i "load\|deny\|failed" - 更直接的方式是前往「系统设置 → 隐私与安全性 → 内核扩展」,查看是否有灰色禁用项;若有,需点击“允许”并重启
- 也可用:
spctl kext-consistency --list(需管理员权限)查看所有已安装但未授权的 kext











