首页 > 解决方案 > 如何在 .Net 上获取 StorageSpaces 物理磁盘的所有 SMART 数据?

问题描述

有 2 种最流行的方式:PowerShell ( PowerShell.Create()...) 和 WMI ( ManagementObjectSearcher)。

1) PowerShellGet-PhysicalDisk可以正确检索磁盘,但它没有 VendorSpecific 属性 (SMART)。它Get-StorageReliabilityCounter填充了一些常见的 SAMRT 属性,但不是全部。具体来说,它没有显示“重新分配的扇区数”和“待定扇区”

在此处输入图像描述 在此处输入图像描述

SELECT * FROM Win32_DiskDrive2)可以查询WMI ,但是这个显示的是虚拟磁盘。实际的物理磁盘不存在。对于软件 RAID(在磁盘管理中添加镜像)或存储空间,实际的物理磁盘已被过滤掉。SELECT * FROM MSStorageDriver_FailurePredictData显示我正在寻找的 SMRART (VendorSpecific) 信息,但也没有物理驱动器,也无法将“InstanceName”与磁盘的实际列表相关联。

在此处输入图像描述

同时,第 3 方软件可以清楚地显示物理和虚拟磁盘(存储空间本身),并可以为它们显示 SMART:

在此处输入图像描述

归根结底,我想在.Net应用程序中使用它,并搜索了一些代码,如何从 WMI 对象的 VendorSpecific 字段中提取此信息(重新分配的扇区数),但我只是看不到实际物理磁盘的 WMI 对象.

标签: .netwindowspowershellwmi

解决方案


显然,对我来说主要问题是小型家用服务器上的 USB 驱动器。存储空间或 RAID 上的 USB 设备没有简单的解决方案。所有现有软件都有大量专有代码来支持不同制造商的 SMART over USB(特别是 CrystalDiskInfo,它可以轻松显示隐藏在存储空间后面的所有 USB 驱动器的所有 SMART),因此它远非 100 行 C# 代码解决方案。

但我发现最初的问题(我需要的 2 条记录)实际上是由 PowerShell 解决的,微软只是重命名了一些指标,使它们对用户友好。

这就是 SMART 转换为 -> PowerShell 的方式Get-StorageReliabilityCounter

重新分配的扇区数 ->ReadErrorsCorrected

待定部门 ->ReadErrorsUncorrected

当我在其中一个驱动器上获得两条记录时,这一点变得清晰:

在此处输入图像描述


推荐阅读