如何用Python在Windows系统中识别SATA、NVME等磁盘类型
如何在Windows上识别磁盘类型(SATA/NVME/M.2/PCI)
仅靠Win32_DiskDrive的InterfaceType字段无法区分SATA、NVME这类具体类型——很多NVME或SATA磁盘会被归类为SCSI。要精准识别,需要结合磁盘的PNPDeviceID、Model以及专用WMI类判断,以下是具体实现方案:
方法一:通过PNPDeviceID与Model综合判断
PNPDeviceID包含硬件总线类型信息,是识别磁盘接口的核心依据,结合Model字段可判断物理形态(比如M.2)。示例代码:
import wmi c = wmi.WMI() for disk in c.Win32_DiskDrive(): print(f"磁盘名称: {disk.Caption}") device_id = disk.PNPDeviceID.upper() # 识别NVME类型(含M.2 NVME) if "NVME" in device_id: print("类型: NVME(通常为M.2或PCIe插卡形态)") # 识别SATA类型 elif "SATA" in device_id or "IDE" in device_id: # 检查是否为M.2物理形态 if "M.2" in disk.Model.upper(): print("类型: M.2(SATA通道)") else: print("类型: SATA") # 识别PCIe磁盘(非NVME) elif "PCI" in device_id: print("类型: PCIe磁盘") # 兜底判断 else: if disk.InterfaceType == "SCSI" and "M.2" in disk.Model.upper(): print("类型: M.2(SATA通道)") else: print(f"类型: {disk.InterfaceType}(需进一步确认)") print("---")
方法二:通过Win32_NVMeController精准识别NVME设备
Windows提供Win32_NVMeController类专门管理NVME控制器,可直接关联对应的NVME磁盘:
import wmi c = wmi.WMI() # 缓存所有NVME控制器的设备ID前缀 nvme_ctrl_prefixes = {ctrl.PNPDeviceID.split("\\")[0] for ctrl in c.Win32_NVMeController()} for disk in c.Win32_DiskDrive(): print(f"磁盘名称: {disk.Caption}") disk_ctrl_prefix = disk.PNPDeviceID.split("\\")[0] if disk_ctrl_prefix in nvme_ctrl_prefixes: print("类型: NVME(含M.2 NVME)") else: # 复用方法一的逻辑处理SATA/PCI等类型 device_id = disk.PNPDeviceID.upper() if "SATA" in device_id or "IDE" in device_id: print("类型: SATA" + ("(M.2形态)" if "M.2" in disk.Model.upper() else "")) elif "PCI" in device_id: print("类型: PCIe磁盘") else: print(f"类型: {disk.InterfaceType}") print("---")
关键说明
- M.2是物理形态而非接口类型:M.2磁盘可能走SATA或NVME通道,前者属于SATA类型,后者属于NVME类型,需通过接口信息+Model标识综合判断。
- 部分老设备的PNPDeviceID可能不规范,需结合多个字段交叉验证,提升识别准确率。
内容的提问来源于stack exchange,提问作者Tsonea
相关产品推荐
相关产品推荐

