.net - 如何在 .Net 上获取 StorageSpaces 物理磁盘的所有 SMART 数据?
问题描述
有 2 种最流行的方式:PowerShell ( PowerShell.Create()...
) 和 WMI ( ManagementObjectSearcher
)。
1) PowerShellGet-PhysicalDisk
可以正确检索磁盘,但它没有 VendorSpecific 属性 (SMART)。它Get-StorageReliabilityCounter
填充了一些常见的 SAMRT 属性,但不是全部。具体来说,它没有显示“重新分配的扇区数”和“待定扇区”
SELECT * FROM Win32_DiskDrive
2)可以查询WMI ,但是这个显示的是虚拟磁盘。实际的物理磁盘不存在。对于软件 RAID(在磁盘管理中添加镜像)或存储空间,实际的物理磁盘已被过滤掉。SELECT * FROM MSStorageDriver_FailurePredictData
显示我正在寻找的 SMRART (VendorSpecific) 信息,但也没有物理驱动器,也无法将“InstanceName”与磁盘的实际列表相关联。
同时,第 3 方软件可以清楚地显示物理和虚拟磁盘(存储空间本身),并可以为它们显示 SMART:
归根结底,我想在.Net应用程序中使用它,并搜索了一些代码,如何从 WMI 对象的 VendorSpecific 字段中提取此信息(重新分配的扇区数),但我只是看不到实际物理磁盘的 WMI 对象.
解决方案
显然,对我来说主要问题是小型家用服务器上的 USB 驱动器。存储空间或 RAID 上的 USB 设备没有简单的解决方案。所有现有软件都有大量专有代码来支持不同制造商的 SMART over USB(特别是 CrystalDiskInfo,它可以轻松显示隐藏在存储空间后面的所有 USB 驱动器的所有 SMART),因此它远非 100 行 C# 代码解决方案。
但我发现最初的问题(我需要的 2 条记录)实际上是由 PowerShell 解决的,微软只是重命名了一些指标,使它们对用户友好。
这就是 SMART 转换为 -> PowerShell 的方式Get-StorageReliabilityCounter
重新分配的扇区数 ->ReadErrorsCorrected
待定部门 ->ReadErrorsUncorrected
当我在其中一个驱动器上获得两条记录时,这一点变得清晰:
推荐阅读
- ios - SWIFTUI:防止在 TextField 中按下返回键时键盘关闭
- php - 在 php 中编写可变产品 (woocommerce)
- android - 如何修复 Google Api 错误:禁止:将应用程序上传到 Play 商店时,Android App Bundle 使用错误的密钥签名
- python - 是否有一种“魔术方法”可以通过 instance[0] 而不是 instance.list[0] 访问在类中定义的列表?
- r - 为什么 ggplot2 会根据 coord_map 的 xlim 生成地图偏移量?
- javascript - 使用 componentDidUpdate 自动滚动到锚标记元素
- python - 有没有更有效的方法从给定数量的字典值中提取部分和?
- git - 为什么 Git 凭证管理器需要单独实现每个服务?
- java - 显示一项活动的项目列表
- javascript - CodeMirror 文本区域中的 onresize 事件