查磁盘驱动版本应使用modinfo配合lspci -k:先用lspci -nnk | grep -a3 'class.*storage'定位硬件绑定的模块名(如nvme、ahci),再执行modinfo 模块名 | grep -e '^(version|vermagic)'获取驱动版本及内核兼容性信息。

查磁盘驱动版本,别用 ethtool —— 它只管网卡
磁盘驱动(如 ahci、nvme、megaraid_sas)和网卡驱动是两套完全不同的内核模块,ethtool 对硬盘设备无效,运行 ethtool sda 会直接报错 No such device。想查磁盘驱动,得从模块本身入手。
modinfo 是最直接的方式,但必须先知道模块名
磁盘驱动模块名不等于设备名(sda 不是模块名),也不能靠猜。常见组合如下:
-
nvme驱动对应 NVMe SSD,模块名就是nvme - SATA 主板芯片组通常用
ahci,模块名就是ahci - LSI/Avago/Broadcom RAID 卡常用
megaraid_sas或mpt3sas - 某些老式 IDE 或虚拟化磁盘(如 Xen 的
xen-blkfront)需结合lspci -k确认
确认模块名后,直接执行:modinfo ahci | grep -E '^(version|srcversion|vermagic)'
输出里 version 字段是驱动自带版本号(如 3.0),vermagic 里的内核版本(如 6.6.16-1.el9.x86_64)才是真正决定兼容性的关键——它必须和 uname -r 输出一致。
lspci -k 能帮你定位到底加载了哪个模块
对 SATA/NVMe/RAID 控制器这类 PCI 设备,lspci -k 比 lsmod 更可靠,因为它显示的是「该硬件当前绑定的驱动」,而非所有已加载模块:
-
lspci -nnk | grep -A3 'Class.*storage'—— 快速筛选存储类设备 - 输出中找
Kernel driver in use:行,后面就是真实模块名(如nvme) - 若显示
Kernel modules:但in use为空,说明驱动没加载成功,modinfo就查不到有效version
注意:有些设备(如 USB 接口的移动硬盘)走的是 usb-storage 或 uas 模块,不能只盯着 storage 类,得加 grep -i usb 辅助排查。
/sys/bus/pci/devices/.../driver 下的 version 文件不一定存在
文档里常提的路径 /sys/bus/pci/devices/0000:00:1f.2/driver/version 看似直观,但多数磁盘驱动根本没暴露这个文件——ahci、nvme 都不提供。只有少数厂商驱动(如某些 QLogic FC HBA 的 qla2xxx)才写入该字段。硬去读会遇到 No such file or directory,不是你路径写错,是驱动压根没实现。
真正稳定可依赖的,还是 modinfo + lspci -k 组合。如果 modinfo 输出里 version 字段为空,说明该驱动没声明版本号,此时只能看 vermagic 和内核版本匹配度来判断是否为原厂适配版本。











