【问题标题】:How to get all S.M.A.R.T. data of StorageSpaces physical disks on .Net?如何获得所有 S.M.A.R.T. .Net 上的 StorageSpaces 物理磁盘的数据?
【发布时间】:2020-06-13 17:33:03
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 这里有您要查找的代码的 .net 版本。 derekwilson.net/blog/2017/08/26/smart 。它应该让你开始。我建议你不要走那条路。这是一团糟。许多读取智能数据的程序都在后台使用 smartclt.exe。我推荐 smartclt.exe。它是命令行,您可以将输出解析到您的脚本中。
  • @Aaron,是的,谢谢,我看过这个。但是因为它只是 WMI 的一个包装器,所以它有同样的问题。不适用于软件 RAID 和 StorageSpaces。我还发现 WMI 没有显示 USB 驱动器,我需要为其他服务器使用它:(

标签: .net windows powershell wmi


【解决方案1】:

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

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

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

重新分配的扇区数 -> ReadErrorsCorrected

待处理扇区 -> ReadErrorsUncorrected

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-27
    • 2011-07-22
    • 1970-01-01
    • 2010-09-24
    • 2019-03-11
    • 2012-04-11
    • 2011-11-01
    • 1970-01-01
    相关资源
    最近更新 更多