如何在C#中获取/计算磁盘S.M.A.R.T剩余寿命百分比?
获取Windows 11磁盘剩余寿命(CrystalDiskInfo风格)的通用方案
问题本质
CrystalDiskInfo显示的「剩余寿命」(Health Status)是基于厂商自定义的SMART属性逻辑计算的,不同品牌磁盘的寿命判定规则差异极大——没有统一的通用SMART属性对应寿命值,这就是你手动加权求和无效、PowerShell Wear 字段返回0的核心原因:Wear 仅适配部分厂商的磁盘固件,多数设备不会返回有效值。
可行解决方案
1. 直接调用CrystalDiskInfo命令行工具
CrystalDiskInfo自带CLI版本,可直接导出标准化的健康状态,无需自行解析SMART:
- 导出命令示例:
& "C:\Program Files\CrystalDiskInfo\CrystalDiskInfo64.exe" /export txt "C:\temp\disk_health.txt" - 提取健康值的PowerShell脚本:
提取结果和CrystalDiskInfo GUI显示的数值完全一致。$healthContent = Get-Content "C:\temp\disk_health.txt" $healthStatus = ($healthContent | Where-Object { $_ -match "Health Status" }).Split(":")[1].Trim()
2. 分厂商解析SMART属性
若不想依赖第三方工具,需针对主流厂商的专属SMART属性适配:
- 三星/金士顿:关注SMART属性ID
177(Wear Leveling Count),剩余寿命 = 当前值 / 阈值 × 100%(例:当前值99、阈值100时,寿命为99%) - 西部数据/希捷:关注SMART属性ID
231(Media Wearout Indicator),剩余寿命等于该属性的当前值 - 英特尔:关注SMART属性ID
225(Host Writes Percentage),剩余寿命 = 100% - 当前值(例:当前值1时,寿命为99%) - 其他厂商:查阅厂商官方文档,寻找标注为「Wear Leveling」「Media Wearout」类的SMART属性,这类属性直接关联寿命计算
3. 关于PowerShell Wear 字段返回0的说明
Get-StorageReliabilityCounter 的 Wear 字段依赖磁盘固件对Windows存储可靠性计数器标准的支持,返回0意味着你的磁盘不兼容该接口,只能用上述两种方案替代。
关键提示
不存在完全通用的手动计算方法——各厂商的寿命算法均为闭源逻辑,CrystalDiskInfo也是靠内置的厂商规则库实现统一显示,因此优先使用其CLI工具是最稳妥的方案。
内容的提问来源于stack exchange,提问作者Дмитрий Витязь
相关产品推荐
相关产品推荐

