SMART信息——你的固态硬盘实时体检报告

news2024/11/28 20:40:33

SMART,或者严谨地说:S.M.A.R.T (Self-Monitoring Analysis and Reporting Technology),即“自我监测分析与报告技术”,在硬盘行业耳熟能详。无论是传统的机械硬盘,还是作为后起之秀的固态硬盘,它们都在使用这个技术,让用户可以非常直观的了解手中硬盘的使用情况和健康状态,为故障分析和后续使用带来重要参考。

它的出现最早可以追溯到1992年,当时,IBM首次在自己的硬盘上使用类似的故障预警分析技术,并在其他厂商的跟进以及标准化协会的支持下,最终演变成后来大家熟知的SMART。技术发展到固态硬盘,虽然存储原理不同,但SATA固态硬盘几乎完全沿用了机械硬盘的SMART及其字段定义,也是SATA固态硬盘为了兼容机械硬盘交互设计而做出的重要举措之一。

进入NVMe时代,SMART经过了重新设计,与过去的SMART内容项目有所差别,且厂商之间的信息内容也更加一致和规范,不再各自为政,自行定义。今天的文章不介绍企业级固态硬盘的特有功能,而是和大家详细解读一下,属于NVMe固态硬盘自己的SMART,也方便各位读者通过nvme-cli、AIDA64、CrystalDiskInfo等工具,对自己的硬盘状态有所了解。

一份典型的NVMe固态硬盘SMART信息

标题协议解读 SMART / Health Information (Log Identifier 02h)

当使用NVMe Admin Command的Get Log Page命令请求Log ID 02h时,你就能得到这份日志(该命令在nvme-cli中为smart-log),此日志页面用于提供SMART和一般健康信息,这些信息涵盖控制器的整个生命周期,且掉电保存。

若要请求基于控制器的此日志页,Host指定的命名空间标识符须为 FFFFFFFFh 或 0h。如若需要提供NVMe 1.4或更早版本NVMe的兼容,Host应使用值为 FFFFFFFFh 的命名空间标识符。根据Identify Controller数据结构中的LPA字段Bit0取值不同,Host也可以被允许获取基于指定命名空间的日志内容。

如果不支持基于命名空间请求该日志页,则可以指定 FFFFFFFFh 或 0h 以外的命名空间标识符终止此命令,状态代码为"Invalid Field in Command (命令存在无效字段)"。假如控制器没有终止此命令,则会返回基于控制器的日志页。

截至目前最新的NVMe 2.0协议规范版本,SMART / Health Information日志页面还没有基于命名空间特别定义的额外字段项,因此基于控制器的日志页面和基于指定命名空间的日志页面包含相同的信息。

有关NVM子系统健康状况的Critical Warning (严重警告)可通过向主机发出异步事件通知来表明。通过Set Feature命令可以具体配置需要产生异步事件通知的警告项。

此外,用户也可以间接通过SMART / Health Information的某些返回参数,来估算出硬盘的负载情况。如,通过读取或写入命令的数量、读取或写入的数据量以及控制器繁忙时间,可以估算出平均每秒 I/O 次数以及带宽。

标题具体的日志信息如下所示(基于NVMe 2.0协议):

**Critical Warning (严重警告标志):**该字段用于表明控制器状态的一些严重警告,每个Bit对应一种严重警告类型,允许设置多个Bit为1b值,并可能会向Host产生异步事件通知。

该字段中的Bit只代表当下实时的相关状态,即,当前控制器处于严重警告状态,部分Bit为1b;没有严重警告,或严重警告相应事件结束,对应Bit会被清空为0b。

  • Bit 7 和 Bit 6:保留位 Bit 5:置为1b时,表明持久内存区域已变为只读或不可靠状态。
  • Bit 4:置为1b时,表明易失性内存备份保护设备已经失效(通常指掉电保护电容等设备)。此字段仅当控制器存在易失性内存备份保护方案时才有效。
  • Bit 3:置为1b时,表明所有的存储媒体介质已处于只读模式。如果这个存储媒体介质的只读状态是由主动改变命名空间写保护状态而造成的(比如使用FID=84h的命名空间写保护配置Feature),则控制器不应将此Bit置为1b。
  • Bit 2:置为1b时,表明NVM子系统的可靠性已因显著的存储媒体介质相关错误/其他任何内部错误的发生而退化,不再可靠。
  • Bit 1:置为1b时,表明当前检测到的温度值 ≥设定的高温阈值,或 ≤设定的低温阈值。
  • Bit 0:置为1b时,表明可用备用容量已降至阈值以下。

**Composite Temperature (综合温度):**包含一个以开尔文为单位的温度值,代表与该控制器以及控制器关联的命名空间当前的综合温度。这个值的计算方式以具体实现方式为准,并且可能不代表当前NVM子系统中任何物理点位的实际温度值。这个字段的值可用于触发异步事件,如高温保护。

Identify Controller数据结构中的WCTEMP和CCTEMP字段体现了警告和严重过热的综合温度阈值。

以上面的配图为例,Composite Temperature对应“temperature”一行,当前NVMe子系统的综合温度为302开尔文,即29摄氏度。

**Available Spare (可用备用容量):**剩余可用备用容量的标准化百分比(0%至100%)。

**Available Spare Threshold (可用备用容量阈值):**当可用备用容量降至该字段所指示的阈值以下时,可能会发生异步事件。该值以标准化百分比(0%至100%)表示。数值101至255是保留的。

**Percentage Used (已用寿命百分比):**包含基于实际使用情况和制造商对NVM寿命的预测,对NVM子系统已使用寿命百分比的厂商自定义估算。值100表示NVM子系统中NVM的预估耐久度已被使用完,但这可能并不表示NVM子系统故障。该值允许超过100表示,所有超过254的百分比都应表示为255。该值应在NVM通电后每个小时更新一次(当控制器不处于睡眠状态时)。有关SSD设备寿命和耐久性测量技术,请参考JEDEC JESD218A标准。

**Endurance Group Critical Warning Summary (耐久群组的严重警告概要):**此字段表明有关耐久群组的一些严重警告,每个Bit对应一种严重警告类型,允许设置多个Bit为1b值。如果某Bit被清为0b值,则该严重警告类型并没有被触发使用。严重警告可能会向Host产生异步事件通知。此字段中的Bit只代表当下实时的相关状态,并非持久性保留的(即当严重警告相关状态事件结束时就会清空Bit为0b)。

只要在一个或多个耐久群组中有Bit被置为1b,则此字段相应Bit就应该同步置为1b。

  • Bit 7 到 Bit 4:保留位
  • Bit 3:置为1b时,表明在一个或多个耐久群组中的命名空间已进入非主动改变命名空间写保护状态而造成的只读模式。
  • Bit 2:置为1b时,表明一个或多个耐久群组的可靠性已因显著的存储媒体介质相关错误/其他任何内部错误的发生而退化,不再可靠。
  • Bit 1:保留位
  • Bit 0:置为1b时,表明一个或多个耐久群组的可用备用容量已降至阈值以下。

**Data Units Read (读取单位计数):**以每512个字节为1个单位,主机从控制器读取的数据单位数量。该值在控制器处理用户数据读命令的部分过程中产生,并不包括元数据。

该值以千为单位,并向上取整(例如,值1表示读取的512字节数据单位计数在1到1,000之间,3表示读取的512字节数据单位计数在2,001到3,000之间)。

有关影响此字段的用户数据读取命令列表,请参阅特定的I/O命令集规范。

此字段中的0h值表示未报告读取单位计数。

**Data Units Written (写入单位计数):**以每512个字节为1个单位,主机向控制器写入的数据单位数量。该值在处理用户数据输出(至硬盘)命令的部分过程中产生,并不包括元数据。

该值以千为单位,并向上取整(例如,值1表示写入的512字节数据单位计数在1到1,000之间,3表示写入的512字节数据单位计数在2,001到3,000之间)。

有关影响此字段的用户数据输出命令列表,请参阅特定的I/O命令集规范。

此字段中的0h值表示未报告写入单位计数。

**Host Read Commands (主机读命令计数):**包含控制器完成的用户数据读取命令的数量。有关影响此字段的用户数据读取命令列表,请参阅特定的I/O命令集规范。

**Host Write Commands (主机写命令计数):**包含控制器完成的用户数据输出(至硬盘)命令的数量。有关影响此字段的用户数据输出命令列表,请参阅特定的I/O命令集规范。

**Controller Busy Time (控制器忙状态时间):**包含控制器处理I/O命令的时间。当I/O队列中有未完成的命令时,控制器处于忙碌状态(具体来说,是通过对I/O提交队列尾部门铃进行写入操作,来发出一个命令,并且相应的完成队列实例尚未发布到相关联的I/O完成队列)。该值以分钟为单位报告。

**Power Cycles (启动-关闭循环次数):**包含硬盘上电启动到下电关闭的完整循环计数值

**Power On Hours (通电的小时数):**开机小时数,可能不包括控制器通电但处于非运行功率状态的时间。

**Unsafe Shutdowns (不安全关机计数):**包含不安全关机的次数。当控制器在主电源丢失之前没有报告可以安全关机时,这个计数会增加。

如果CAP.CPS被清除为00b或设置为01b,在控制器关机流程完成后(即,CSTS.ST被清除为‘0’且CSTS.SHST被设置为10b),就可以安全地关闭控制器电源。

如果CAP.CPS被设置为10b,在NVM子系统关机流程完成后(即,CSTS.ST被设置为‘1’且CSTS.SHST被设置为10b),就可以安全地关闭该域的电源。

如果CAP.CPS被设置为11b,在NVM子系统关机流程完成后(即,CSTS.ST被设置为‘1’且CSTS.SHST被设置为10b),就可以安全地关闭NVM子系统电源。

**Media and Data Integrity Errors (介质与数据完整性错误计数):**包含控制器检测到未恢复的数据完整性错误的次数。这个字段包括无法纠正的ECC错误、CRC校验和失败或LBA标签不匹配等错误。

由写入不可纠命令(Write Uncorrectable,参见NVM命令集规范)引入的错误可能也会包含在此字段中。

**Number of Error Information Log Entries (错误日志项数):**包含控制器全生命周期中,出现的错误信息日志(LID=01h)计数。

**Warning Composite Temperature Time (警告综合温度时间):**包含控制器运行时综合温度大于或等于警告综合温度阈值(WCTEMP)字段,但仍小于严重综合温度阈值(CCTEMP)字段的时间总量(以分钟计),这两个字段位于Identify Controller数据结构内。

如果WCTEMP或CCTEMP字段的值为0h,则无论综合温度值如何,该字段始终清为0h。

**Critical Composite Temperature Time (严重综合温度时间):**包含控制器运行时综合温度大于或等于严重综合温度阈值(CCTEMP)字段的时间总量(以分钟计),此字段位于Identify Controller数据结构内。

如果CCTEMP字段的值为0h,则无论综合温度值如何,该字段始终清为0h。

Temperature Sensor 1 (温度传感器1): 包含温度传感器1上报的当前温度值。

Temperature Sensor 2 (温度传感器2): 包含温度传感器2上报的当前温度值。

Temperature Sensor 3 (温度传感器3): 包含温度传感器3上报的当前温度值。

Temperature Sensor 4 (温度传感器4): 包含温度传感器4上报的当前温度值。

Temperature Sensor 5 (温度传感器5): 包含温度传感器5上报的当前温度值。

Temperature Sensor 6 (温度传感器6): 包含温度传感器6上报的当前温度值。

Temperature Sensor 7 (温度传感器7): 包含温度传感器7上报的当前温度值。

Temperature Sensor 8 (温度传感器8): 包含温度传感器8上报的当前温度值。

**Thermal Management Temperature 1 Transition Count (热管理温度1转换次数):**包含控制器转换到较低功耗活动状态或执行厂商自定义的热管理行为的次数,这些行为在尽量减少对性能的影响的同时,试图通过主机控制的热管理功能来降低综合温度(即综合温度升高超过热管理温度1)。一旦该计数器的值达到FFFFFFFFh,它不能溢出至0h值。如果该值为0h,表示此转换从未发生过或此字段未使用。

**Thermal Management Temperature 2 Transition Count (热管理温度2转换次数):**包含控制器转换到较低功耗活动状态或执行厂商自定义的热管理行为的次数,这些行为不考虑对性能的影响(例如,重度降频),试图通过主机控制的热管理功能来降低综合温度(即综合温度升高超过热管理温度2)。一旦该计数器的值达到FFFFFFFFh,它不能溢出至0h值。如果该值为0h,表示此转换从未发生过或此字段未使用。

**Total Time For Thermal Management Temperature 1 (热管理温度1总时间):**包含控制器转换到较低功耗活动状态或执行厂商自定义的热管理行为的总秒数,这些行为在尽量减少对性能的影响的同时,试图通过主机控制的热管理功能来降低综合温度。一旦该计数器的值达到FFFFFFFFh,它不能溢出至0h值。如果该值为0h,表示此转换从未发生过或此字段未使用。

**Total Time For Thermal Management Temperature 2 (热管理温度2总时间):**包含控制器转换到较低功耗活动状态或执行厂商自定义的热管理行为的总秒数,这些行为不考虑对性能的影响(例如,重度降频),试图通过主机控制的热管理功能来降低综合温度。一旦该计数器的值达到FFFFFFFFh,它不能溢出至0h值。如果该值为0h,表示此转换从未发生过或此字段未使用。

Temperature Sensor Data Structure

**Temperature Sensor Temperature (TST) (温度传感器温度值):**包含由温度传感器报告的当前温度,单位为开尔文。

NVM子系统中温度传感器报告温度的物理点位以及温度精度是基于实际实现情况的。不使用温度传感器的实现将报告一个值为0h的温度。温度传感器报告的温度可用于触发异步事件。

Windows系统下,SMART示例

这里之所以特别强调Windows操作系统,是因为考虑本文面向每一名NVMe固态硬盘的用户,而不仅仅局限在企业级市场。配合具体示例,大家都可以有一个参照,可以在必要时查看自己的硬盘健康状态。如大名鼎鼎的CrystalDiskInfo、AIDA64,以及一些固态硬盘厂商自己打造的专用软件,都可以很直观的看到固态硬盘的SMART信息。

在此,我使用CrystalDiskInfo软件截取了办公电脑中M.2 NVMe固态硬盘的SMART:可以看到,它支持NVMe 1.3协议规范,并且工具显示了各种硬盘的基本信息,如固件版本、序列号、接口、传输模式、分区情况、支持的部分功能等。右边是统计数据,由下方读取的SMART源数据值经过换算得出。这里需要注意,软件中的GB、TB均为二进制下的容量单位,为了严谨,下面统一使用GiB、TiB代替。

如,主机总计读取 10120GB,对应读取的512字节单位计数 21223319,预估的总读取量为 512B * 21223319 * 1000 / 1024 / 1024 / 1024,即 10120GiB。

在这里插入图片描述

大家应该注意到了,该软件显示的SMART值和我们前面表格里描述的项目几乎一一对应,个别SMART项目没有被列出,如Endurance Group Critical Warning Summary (耐久群组的严重警告概要)、Warning Composite Temperature Time (警告综合温度时间)等。

切换到AIDA64软件,可以看到相同的SMART结果,部分项目名称虽有不同,但数值完全一样。此外,在CrystalDiskInfo中没有显示的Warning Composite Temperature Time和两颗传感器数据也被读了出来。

在这里插入图片描述

除了主机总计写入量,01、03、05、0E这几个重要信息外,通过0A,也就是控制器忙状态时间,可以判断固态硬盘的平均负载压力和该硬盘的使用场景是否相符。还是以上图为例,总计读写量18817GiB除以883分钟,得到平均读写带宽为363.7MiB/s,和典型的Office办公场景相符合;如果是图1中2.22PiB的读写总量配合10921分钟的控制器忙时间,则平均读写带宽为3.57GiB/s,和该固态硬盘“性能测试用途”的身份相符合。

以上是围绕NVMe固态硬盘SMART的一些知识点、常见故障计数说明,以及需要我们特别留意的地方,希望能够对大家有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1455980.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++面试宝典第28题:寻找丢失的数字

题目 给定一个包含n个整数的数组nums,其中nums[i]在区间[1, n]内。请找出所有在[1, n]范围内,但没有出现在nums中的数字,并以数组的形式返回结果。 示例1: 输入:nums = [4, 3, 2, 7, 8, 2, 3, 1] 输出:[5, 6] 示例2: 输入:nums = [1, 1] 输出:[2] 解析 初看这道题,…

【WEB环境】-LNTMP或LAMP结构搭建(记录)

一、手工安装搭建 1.1 LNTMP 【nginx:rpm安装】 安装根目录路径:/usr/local/nginx 启动:/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf 停止kill -QUIT 2072 ./nginx -s stop /usr/local/nginx/sbin/nginx -s stop 重启…

FPGA之移位寄存器

SLICEM中的LUT可以配置为32位移位寄存器,而无需使用slice中可用的触发器。以这种方式使用,每个LUT 可以将串 行数据延迟 1 到 32 个时钟周期。移入D (DI1 LUT 引脚)和移出 Q31(MC31 LUT 引脚)线路将LUT级联,以形成更大…

物联网水域信息化:水质监测智慧云平台

行业背景 由于传统水务企业水质监测和管理技术不足,以及水源污染等问题,确保供水水质达标困难重重。 且传统水务行业信息化手段单一,缺乏对大数据等新技术的应用,一定程度上影响了水务工作的精细化和智能化程度。 系统特点 为…

Positive SSL 证书介绍

Positive SSL 是一种受欢迎的 SSL 证书,提供了卓越的安全性、性价比和品牌信任。以下是对 Positive SSL 在这些方面的简要介绍: 1. 安全性: Positive SSL 证书采用强大的加密技术,确保网站和用户之间的数据传输是安全的。它使用…

新版Java面试专题视频教程——准备篇、Redis篇

新版Java面试专题视频教程——准备篇、Redis篇 准备篇 准备篇-01-企业简历筛选规则准备篇-02-简历注意事项准备篇-03-应届生该如何找到合适的练手项目 Redis篇 01-redis开篇02-缓存穿透03-缓存击穿04-缓存雪崩05-双写一致性…

Python算法100例-1.8 冒泡排序

完整源代码项目地址,关注博主私信’源代码’后可获取 1.问题描述2.问题分析3.算法设计4.完整的程序5.问题拓展 1.问题描述 对N个整数(数据由键盘输入)进行升序排列。 2.问题分析 对于N个类型相同的数,…

波特率和(FSK)调制速率的关系

最近在学习基于STM32的FSK解调,刚开始一直对波特率和FSK调制速率两者的概念有些混淆,于是出一篇帖子进行总结。 在百度百科中查到: 调制速率定义 在电子通信领域,调制速率,指的是信号被调制以后在单位时间内的变化&am…

软考学习--计算机组成原理与体系结构

计算机组成原理与体系结构 数据的表示 进制转换 R 进制转换为 10 进制–按权展开法 10进制转换为2进制 原码 反码 补码 移码 原码 :数字的二进制表示反码 : 正数的反码等于原码,负数的反码等于原码取反补码: 正数的补码等…

大模型之二十二 OpenAI sora

2024年2月15日在中国新年还没过完的时候,OpenAI 发布的Sora,这是AI视频生成领域的‘Midjourney时刻’,Sora将Diffusion模型和Transformer模型相结合,在视觉领域实现了大语言模型类似的突破,这将类似于ChatGPT一样&…

【Python笔记-设计模式】工厂模式

一、说明 (一) 解决问题 提供了一种方式,在不指定具体类将要创建的情况下,将类的实例化操作延迟到子类中完成。可以实现客户端代码与具体类实现之间的解耦,使得系统更加灵活、可扩展和可维护。 (二) 使用场景 希望复用现有对象来节省系统…

怎样连接局域网?

局域网(Local Area Network,缩写为LAN)是建立在小范围内的计算机网络,用于连接同一建筑物或者办公场所内的设备。连接局域网可以实现设备之间的信息共享和远程通信。本文将介绍如何连接局域网,并介绍了天联组网天联的使…

unity学习(15)——服务器组装(1)

1.新建好的c#项目如下: 文件夹中内容如下: 此时已经可以通过vs2022打开.sln文件,就可以打开项目了。 2.我们把逆向后(主程序)的内容的代码粘贴过去。有些逆向功底,很快可以定位到,服务器的入口…

强国有我社会实践公益活动在合肥市庐阳区开展

2月18日是开工第一天,阳光灿烂、春光明媚。合肥市四十五中2022级星辰(5)班部分同学在监护人的陪伴下来到庐阳区双岗街道万小店社区残疾人工作站,和工作站兄弟姐妹们共同开展“强国复兴有我”社会实践公益活动。合肥市庐阳区为民社…

基于JavaWeb开发的小区车辆登记系统计算机毕设[附源码]

基于JavaWeb开发的小区车辆登记系统计算机毕设[附源码] 🍅 作者主页 央顺技术团队 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 文末获取源码联系方式 📝 🍅 查看下方微信号获取联系方式 承接各种定制系统…

C++ bfs反向建图(六十)【第七篇】

今天我们来学习一下bfs反向建图 1.bfs的反向建图 我们之前在图上求最短路都是求从起点出发到每个点的最短路,不过有时候我们也会遇到让求每个点到终点的最短路的问题,此时我们可以怎么做呢? 如果从每个点出发,用 BFS 搜索到终点…

基于JavaWeb开发的羽毛球管理系统计算机毕业设计[附源码]

基于JavaWeb开发的羽毛球管理系统计算机毕业设计[附源码] 🍅 作者主页 央顺技术团队 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 文末获取源码联系方式 📝 🍅 查看下方微信号获取联系方式 承接各种定制系…

Linux环境安装Maven(详细图文)

目录 摘要 一、准备工作 1.检查当前环境是否安装maven 2.下载maven ​3.上传maven压缩包 4.解压maven包 5.移动到/usr/local目录下方便管理 6.配置maven环境变量 7.刷新配置文件 8.配置maven镜像仓库 9.验证是否成功 摘要 笔者Linux环境为:Ubuntu 22.04 …

C#上位机与三菱PLC的通信07--使用第3方通讯库读写数据

1、通讯库介绍 mcprotocol 是一个基于 Node.js 的三菱 PLC MC 协议通信库,具有以下特点: 支持多种三菱 PLC MC 协议的设备,如 FX3U、Q03UDECPU、QJ71E71 等。 支持多种功能码和数据类型,如读取线圈(M)、…

Yii2项目使用composer异常记录

问题描述 在yii2项目中,使用require命令安装依赖时,出现如下错误提示 该提示意思是:composer运行时,执行了yiisoft/yii2-composer目录下的插件,但是该插件使用的API版本是1.0,但是当前的cmposer版本提供的…