硬盘的故障一般分为两种:可预测的(predictable)和不可预测的(unpredictable)。后者偶而会发生,也没有办法去预防它,例如芯片突然失效,机械撞击等。但像电机轴承磨损、盘片磁介质性能下降等就是可预测的情况,可以在在几天甚至几星期前就发现这种不正常的现象。如果发生这种问题,SMART功能会在开机时响起警报,至少让使用者有足够的时间把重要资料转移到其它储存系统上。
最早期的硬盘监控技术起源于1992年,IBM在AS/400计算机的IBM9337硬盘阵列中的IBM 0662 SCSI 2代硬盘驱动器中使用了后来被命名为Predictive Failure Analysis(故障预警分析技术)的监控技术,它是通过在固件中测量几个重要的硬盘安全参数和评估他们的情况,然后由监控软件得出两种结果:“硬盘安全”或“不久后会发生故障”。不久,当时的微机制造商康柏和硬盘制造商希捷、昆腾以及康纳共同提出了名为IntelliSafe的类似技术。通过该技术,硬盘可以测量自身的的健康指标并将参量值传送给操作系统和用户的监控软件中,每个硬盘生产商有权决定哪些指标需要被监控和它们的安全阈值。
1995年,康柏公司将该技术方案提交到Small Form Factor(SFF)委员会进行标准化,该方案得到IBM、希捷、昆腾、康纳和西部数据的支持,1996年6月进行了1.3版的修正,正式更名为S.M.A.R.T.(Self-Monitoring Analysis And Reporting Technology),全称是“自我检测分析与报告技术”,成为一种自动监控硬盘驱动器完好状况和报告潜在问题的技术标准。
作为行业规范,SMART规定了硬盘制造厂商应遵循的标准,满足SMART标准的条件主要包括:
1)在设备制造期间完成SMART需要的各项参数、属性的设定;
2)在特定系统平台下,能够正常使用SMART;通过BIOS检测,能够识别设备是否支持SMART并可显示相关信息,而且能辨别有效和失效的SMART信息;
3)允许用户自由开启和关闭SMART功能;
4)在用户使用过程中,能提供SMART的各项有效信息,确定设备的工作状态,并能发出相应的修正指令或警告。在硬盘以及操作系统都支持SMART技术并且开启的情况下,在不良状态出现时SMART技术能够在屏幕上显示英文警告信息:“WARNING:IMMEDIATLY BACKUP YOUR DATA AND REPLACE YOUR HARD DISK DRIVE,A FAILURE MAY BE IMMINENT.”(警告:立刻备份你的数据同时更换硬盘驱动器,可能有错误出现。)
SMART功能不断从硬盘上的各传感器获得信息,并把信息保存在硬盘的系统保留区(service area)内,这个区域一般位于硬盘0物理面的最前面几十个物理磁道,由厂商写入相关内部管理程序。这里除了SMART信息表外还包括低级格式化程序、加密解密程序、自监控程序、自动修复程序等。用户使用的监测软件通过名为“SMART Return Status”的命令(命令代码为:B0h)对SMART信息进行读取,且不允许最终用户对信息进行修改。
在USB标准中,USB不能用于计算机内部储存设备的基本总线(如ATA,SCSI等),本身也没有为SMART.提供传输数据的途径。所以在使用ATA硬盘以USB传输的外置硬盘中,即使SMART仍然运行,通常也无法向系统提供SMART数据。但现在新型外置硬盘的内部转换电路已经可以将SMART数据通过USB接口传输到系统或监控程序中读取。
二、SMART的ID代码
硬盘SMART检测的ID代码以两位十六进制数表示(括号里是对应的十进制数),代表硬盘的各项检测参数。目前各硬盘制造商的绝大部分SMART ID代码所代表的参数含义是一致的,但厂商也可以根据需要使用不同的ID代码,或者根据检测项目的多少增减ID代码。一般来说,以下这些检测项是必需的:
01(001) 底层数据读取错误率 Raw Read Error Rate
04(004) 启动/停止计数(又称加电次数) Start/Stop Count
05(005) 重映射扇区数 Relocated Sector Count
09(009) 通电时间累计 Power-On Time Count (POH)
0A(010) 主轴起旋重试次数(即硬盘启动重试次数) Spin up Retry Count
0B(011) 磁盘校准重试次数 Calibration Retry Count
C2(194) 温度 Temperature
C7(199) ULTRA DMA奇偶校验错误率 ULTRA ATA CRC Error Rate
C8(200) 写错误率 Write Error Rate
03(003)主轴起旋时间 Spin Up Time
主轴起旋时间就是主轴电机从启动至达到额定转速所用的时间,数据值直接显示时间,单位为毫秒或者秒,因此数据值越小越好。
硬盘的主轴电机从启动至达到额定转速大致需要4秒~15秒左右,过长的启动时间说明电机驱动电路或者轴承机构有问题。不过这个参数的数据值在某些型号的硬盘上总是为0,这就要看当前值和最差值来判断了。
对于固态硬盘来说,所有的数据都是保存在半导体集成电路中,没有主轴电机,所以这项没有意义,数据固定为0,当前值固定为100。
B7(183)串口降速错误计数 SATA Downshift Error Count
这一项表示了SATA接口速率错误下降的次数。通常硬盘与主板之间的兼容问题会导致SATA传输级别降级运行。
B8(184)I/O错误检测与校正 I/O Error Detection and Correction(IOEDC)
I/O错误检测与校正是惠普公司专有的SMART IV技术的一部分,与其他制造商的I/O错误检测和校正架构一样,它记录了数据通过驱动器内部高速缓存RAM传输到主机时的奇偶校验错误数量。
B8(184)点到点错误检测计数 End to End Error Detection Count
Intel第二代的34nm固态硬盘有点到点错误检测计数这一项。固态硬盘里有一个LBA(logical block addressing,逻辑块地址)记录,这一项显示了SSD内部逻辑块地址与真实物理地址间映射的出错次数。
B8(184)原始坏块数 Init Bad Block Count(Indilinx芯片)
硬盘出厂时已有的坏块数量。
BD(189)高飞写入 High Fly Writes
磁头飞行高度监视装置可以提高读写的可靠性,这一装置时刻监测磁头的飞行高度是否在正常范围来保证可靠的写入数据。如果磁头的飞行高度出现偏差,写入操作就会停止,然后尝试重新写入或者换一个位置写入。这种持续的监测过程提高了写入数据的可靠性,同时也降低了读取错误率。这一项的数据值就统计了写入时磁头飞行高度出现偏差的次数。
BD(189)出厂坏块计数 Factory Bad Block Count(Micron 镁光芯片)
BE(190)气流温度 Airflow Temperature
这一项表示的是硬盘内部盘片表面的气流温度。在希捷公司的某些硬盘中,当前值=(100-当前温度),因此气流温度越高,当前值就越低,最差值则是当前值曾经达到过的最低点,临界值由制造商定义的最高允许温度来确定,而数据值不具实际意义。不过许多硬盘没有这一项参数。
C2(194)温度 Temperature
温度的数据值直接表示了硬盘内部的当前温度。一般情况下,硬盘运行时最好不超过45℃,温度过高虽不会导致数据丢失,但引起的机械变形会导致寻道与读写错误率上升,降低硬盘性能。硬盘的最高允许运行温度可查看硬盘厂商给出的数据,一般不会超过60℃。
不同厂家对温度参数的当前值、最差值和临界值有不同的表示方法:希捷公司某些硬盘的当前值就是实际温度(摄氏)值,最差值则是曾经达到过的最高温度,临界值不具意义;而西部数据公司一些硬盘的SMART最差值是温度上升到某值后的时间函数,每次升温后的持续时间都将导致最差值逐渐下降,当前值则与当前温度成反比,即当前温度越高,当前值越低,随实际温度波动。
C3(195)硬件ECC校正 Hardware ECC Recovered
ECC(Error Correcting Code)的意思是“错误检查和纠正”,这个技术能够容许错误,并可以将错误更正,使读写操作得以持续进行,不致因错误而中断。这一项的数据值记录了磁头在盘片上读写时通过ECC技术校正错误的次数,不过许多硬盘有其制造商特定的数据结构,因此数据量的大小并不能直接说明问题。
C3(195)实时无法校正错误计数 On the fly ECC Uncorrectable Error Count
这一参数记录了无法校正(UECC)的错误数量。
C3(195)编程错误块计数 Program Failure block Count(Indilinx芯片)
C6(198)脱机无法校正的扇区计数 Offline Uncorrectable Sector Count
数据应为0,当前值应远大于临界值。
这个参数的数据累计了读写扇区时发生的无法校正的错误总数。数据值上升表明盘片表面介质或机械子系统出现问题,有些扇区肯定已经不能读取,如果有文件正在使用这些扇区,操作系统会返回读盘错误的信息。下一次写操作时会对该扇区执行重映射。
C6(198)总读取页数 Total Count of Read Sectors(Indilinx芯片)
C7(199)Ultra ATA访问校验错误率 Ultra ATA CRC Error Rate
这个参数的数据值累计了通过接口循环冗余校验(Interface Cyclic Redundancy Check,ICRC)发现的数据线传输错误次数。如果数据值不为0且持续增长,表示硬盘控制器→数据线→硬盘接口出现错误,劣质的数据线、接口接触不良都可能导致此现象。由于这一项的数据值不会复零,所以某些新硬盘也会出现一定的数据量,只要更换数据线后数据值不再继续增长,即表示问题已得到解决。
C7(199)总写入页数 Total Count of Write Sectors(Indilinx芯片)
C8(200)写入错误率 Write Error Rate / 多区域错误率 Multi-Zone Error Rate(西部数据)
数据应为0,当前值应远大于临界值。
这个参数的数据累计了向扇区写入数据时出现错误的总数。有的新硬盘也会有一定的数据量,若数据值持续快速升高(当前值偏低),表示盘片、磁头组件可能有问题。
C8(200)总读取指令数 Total Count of Read Command(Indilinx芯片)
C9(201)脱道错误率 Off Track Error Rate / 逻辑读取错误率 Soft Read Error Rate
数据值累积了读取时脱轨的错误数量,如果数据值不为0,最好备份数据。
C9(201)TA Counter Detected(意义不明)
C9(201)写入指令总数 Total Count of Write Command(Indilinx芯片)
CA(202)数据地址标记错误 Data Address Mark errors
此项的数据值越低越好(或者由制造商定义)。
CA(202)TA Counter Increased(意义不明)
CA(202)剩余寿命 Percentage Of The Rated Lifetime Used(Micron 镁光芯片)
当前值从100开始下降至0,表示所有块的擦写余量统计。计算方法是以MLC擦写次数除以50,SLC擦写次数除以1000,结果取整数,将其与100的差值作为当前值(MLC预计擦写次数为5000,SLC预计擦写次数为100000)。
CA(202)闪存总错误bit数 Total Count of error bits from flash(Indilinx芯片)
CB(203)软件ECC错误数 Run Out Cancel
错误检查和纠正(ECC)出错的频度。
CB(203)校正bit错误的总读取页数 Total Count of Read Sectors with correct bits error(Indilinx芯片)
CC(204)软件ECC校正 Soft ECC Correction
通过软件ECC纠正错误的计数。
CC(204)坏块满标志 Bad Block Full Flag(Indilinx芯片)
CD(205)热骚动错误率 Thermal Asperity Rate (TAR)
由超温导致的错误。数据值应为0。
CD(205)最大可编程/擦除次数 Max P/E Count(Indilinx芯片)
E6(230)GMR磁头振幅 GMR Head Amplitude
磁头“抖动”,即正向/反向往复运动的距离。
E7(231)温度 Temperature
温度的数据值直接表示了硬盘内部的当前温度,与(C2)项相同。
E7(231)剩余寿命 SSD Life Left
剩余寿命是基于P/E周期与可用的备用块作出的预测。新硬盘为100;10表示PE周期已到设计值,但尚有足够的保留块;0表示保留块不足,硬盘将处于只读方式以便备份数据。
E8(232)寿命余量 Endurance Remaining
寿命余量是指硬盘已擦写次数与设计最大可擦写次数的百分比,与(CA)项相似。
E8(232)预留空间剩余量 Available Reserved Space(Intel芯片)
对于Intel的SSD来说,前边05项提到会保留一些容量来准备替换损坏的存储单元,所以可用的预留空间数非常重要。当保留的空间用尽,再出现损坏的单元就将出现数据丢失,这个SSD的寿命就结束了。所以仅看05项意义并不大,这一项才最重要。这项参数可以看当前值,新的SSD里所有的预留空间都在,所以是100。随着预留空间的消耗,当前值将不断下降,减小到接近临界值(一般是10)时,就说明只剩下10%的预留空间了,SSD的寿命将要结束。这个与(B4)项相似。