做过一些关于硬盘的调研任务,当时搜集很多资料,不过现在没有,从网上找了一篇关于SMART的介绍,感觉基本上都是比较全面了。
首先各大硬盘厂商生产的硬盘基本都是会遵循SMART的技术标准的,当然企业级的硬盘都是支持这个参数的。在linux下可以装上这个工具具体检测下参数的数值。另外各大厂家都有不同的磁盘检测工具,本人做过日立,希捷和一些第三方的磁盘检测工具,或许不同的工具的结果表现形式有些不同(排除特定的工具对特定的磁盘的定向数据造假,比如像手机中的跑分,不过我测过的这么工具基本上都是符合的),但是基本数据参数都是调用的这个标准参数,有些工具为了生产化标准快速检测做了某些定制。
不过对这些大量的坏盘和A,B,C档的健康盘进行了观察,量变到质变的过程并不能可控。有些C类盘检测到各种风险但是仍在能够一直工作好久,有些A类盘却有时候突然就变成了废盘。so,针对不同的业务和IO吞吐量,选择性价比可靠的磁盘。
一、SMART概述
二、SMART的ID代码
C2(194)温度TemperatureC7(199)ULTRADMA奇偶校验错误率ULTRAATACRCErrorRateC8(200)写错误率WriteErrorRate
三、SMART的描述(Description)
描述,即某一检测项目的名称,是ID代码的文字解释。对用户而言,不仅要了解描述的含义,重要的是要了解各参数的值如“临界值”、“最差值”的定义,“当前值”与“数据值”的区别等,才能对自己的硬盘状态有一个基本了解。
四、SMART的值
1、临界值(Threshold)临界值是硬盘厂商指定的表示某一项目可靠性的门限值,也称阈值,它通过特定公式计算而得。如果某个参数的当前值接近了临界值,就意味着硬盘将变得不可靠,可能导致数据丢失或者硬盘故障。由于临界值是硬盘厂商根据自己产品特性而确定的,因此用厂商提供的专用检测软件往往会跟Windows下检测软件的检测结果有较大出入。以参数RawReadErrorRate(底层数据读取错误率)为例:某型硬盘对该参数的计算公式为“10×log10(主机和硬盘之间所传输数据的扇区数)×512×8/重读的扇区数”。其中“512×8”是把扇区数转化为所传输的数据位(bits),这个值只在所传输的数据位处于1010~1012范围时才作计算,而当Windows系统启动后,主机和硬盘之间所传输的数据扇区大于或等于1012时,此值将重新复位,所以有些值在不同的操作环境、不同检测程序下时会有较大的波动。
2、当前值(Normalizedvalue)当前值是各ID项在硬盘运行时根据实测数据通过公式计算的结果,计算公式由硬盘厂家自定。硬盘出厂时各ID项目都有一个预设的最大正常值,也即出厂值,这个预设的依据及计算方法为硬盘厂家保密,不同型号的硬盘都不同,最大正常值通常为100或200或253,新硬盘刚开始使用时显示的当前值可以认为是预设的最大正常值(有些ID项如温度等除外)。随着使用损耗或出现错误,当前值会根据实测数据而不断刷新并逐渐减小。因此,当前值接近临界值就意味着硬盘寿命的减少,发生故障的可能性增大,所以当前值也是判定硬盘健康状态或推测寿命的依据之一。
3、最差值(Worst)最差值是硬盘运行时各ID项曾出现过的最大的非正常值。最差值是对硬盘运行中某项数据变劣的峰值统计,该数值也会不断刷新。通常,最差值与当前值是相等的,如果最差值出现较大的波动(小于当前值),表明硬盘曾出现错误或曾经历过恶劣的工作环境(如温度)。
4、数据值(Data或Rawvalue)数据值是硬盘运行时各项参数的实测值,大部分SMART工具以十进制显示数据。数据值代表的意义随参数而定,大致可以分为三类:1)数据值并不直接反映硬盘状态,必须经过硬盘内置的计算公式换算成当前值才能得出结果;2)数据值是直接累计的,如Start/StopCount(启动/停止计数)的数据是50,即表示该硬盘从出厂到现在累计启停了50次;3)有些参数的数据是即时数,如Temperature(温度)的数据值是44,表示硬盘的当前温度是44℃。因此,有些参数直接查看数据也能大致了解硬盘目前的工作状态。
五、状态(Status)
硬盘的每项SMART信息中都有一个临界值(阈值),不同硬盘的临界值是不同的,SMART针对各项的当前值、最差值和临界值的比较结果以及数据值进行分析后,提供硬盘当前的评估状态,也是我们直观判断硬盘健康状态的重要信息。根据SMART的规定,状态一般有正常、警告、故障或错误三种状态。
六、SMART参数详解
01(001)底层数据读取错误率RawReadErrorRate数据为0或任意值,当前值应远大于与临界值。底层数据读取错误率是磁头从磁盘表面读取数据时出现的错误,对某些硬盘来说,大于0的数据表明磁盘表面或者读写磁头发生问题,如介质损伤、磁头污染、磁头共振等等。不过对希捷硬盘来说,许多硬盘的这一项会有很大的数据量,这不代表有任何问题,主要是看当前值下降的程度。在固态硬盘中,此项的数据值包含了可校正的错误与不可校正的RAISE错误(UECC+URAISE)。
注:RAISE(RedundantArrayofIndependentSiliconElements)意为独立硅元素冗余阵列,是固态硬盘特有的一种冗余恢复技术,保证内部有类似RAID阵列的数据安全性。
02(002)磁盘读写通量性能ThroughputPerformance此参数表示硬盘的读写通量性能,数据值越大越好。当前值如果偏低或趋近临界值,表示硬盘存在严重的问题,但现在的硬盘通常显示数据值为0或根本不显示此项,一般在进行了人工脱机SMART测试后才会有数据量。
04(004)启停计数Start/StopCount这一参数的数据是累计值,表示硬盘主轴电机启动/停止的次数,新硬盘通常只有几次,以后会逐渐增加。系统的某些功能如空闲时关闭硬盘等会使硬盘启动/停止的次数大为增加,在排除定时功能的影响下,过高的启动/停止次数(远大于通电次数0C)暗示硬盘电机及其驱动电路可能有问题。这个参数的当前值是依据某种公式计算的结果,例如对希捷某硬盘来说临界值为20,当前值是通过公式“100-(启停计数/1024)”计算得出的。若新硬盘的启停计数为0,当前值为100-(0/1024)=100,随着启停次数的增加,该值不断下降,当启停次数达到81920次时,当前值为100-(81920/1024)=20,已达到临界值,表示从启停次数来看,该硬盘已达设计寿命,当然这只是个寿命参考值,并不具有确定的指标性。这一项对于固态硬盘同样没有意义,数据固定为0,当前值固定为100。
06(006)读取通道余量ReadChannelMargin这一项功能不明,现在的硬盘也不显示这一项。
07(007)寻道错误率SeekErrorRate数据应为0,当前值应远大于与临界值。这一项表示磁头寻道时的错误率,有众多因素可导致寻道错误率上升,如磁头组件的机械系统、伺服电路有局部问题,盘片表面介质不良,硬盘温度过高等等。通常此项的数据应为0,但对希捷硬盘来说,即使是新硬盘,这一项也可能有很大的数据量,这不代表有任何问题,还是要看当前值是否下降。
0B(011)磁头校准重试计数CalibrationRetryCount数据应为0,当前值应远大于与临界值。硬盘在温度发生变化时,机械部件(特别是盘片)会因热胀冷缩出现形变,因此需要执行磁头校准操作消除误差,有的硬盘还内置了磁头定时校准功能。这一项记录了需要再次校准(通常因上次校准失败)的次数。这一项的数据量增加,表示电机驱动电路或是机械子系统出现问题,但有些型号的新硬盘也有一定的数据量,并不表示有问题,还要看当前值和最差值。
通常,硬盘设计的通电次数都很高,如至少5000次,因此这一计数只是寿命参考值,本身不具指标性。
0D(013)软件读取错误率SoftReadErrorRate软件读取错误率也称为可校正的读取误码率,就是报告给操作系统的未经校正的读取错误。数据值越低越好,过高则可能暗示盘片磁介质有问题。
AA(170)坏块增长计数GrownFailingBlockCount(Micron镁光)读写失败的块增长的总数。
AB(171)编程失败块计数ProgramFailBlockCountFlash编程失败块的数量。
AC(172)擦写失败块计数EraseFailBlockCount擦写失败块的数量。
AD(173)磨损平衡操作次数(平均擦写次数)/WearLevelingCount(Micron镁光)所有好块的平均擦写次数。Flash芯片有写入次数限制,当使用FAT文件系统时,需要频繁地更新文件分配表。如果闪存的某些区域读写过于频繁,就会比其它区域磨损的更快,这将明显缩短整个硬盘的寿命(即便其它区域的擦写次数还远小于最大限制)。所以,如果让整个区域具有均匀的写入量,就可明显延长芯片寿命,这称为磨损均衡措施。
AE(174)意外失电计数UnexpectedPowerLossCount硬盘自启用后发生意外断电事件的次数。
B1(177)磨损范围对比值WearRangeDelta磨损最重的块与磨损最轻的块的磨损百分比之差。
B4(180)未用的备用块计数UnusedReservedBlockCountTotal(惠普)固态硬盘会保留一些容量来准备替换损坏的存储单元,所以可用的预留空间数非常重要。这个参数的当前值表示的是尚未使用的预留的存储单元数量。
B5(181)编程失败计数ProgramFailCount用4个字节显示已编程失败的次数,与(AB)参数相似。
B5(181)非4KB对齐访问数Non-4kAlignedAccess(Micron镁光)
B6(182)擦写失败计数EraseFailCount用4个字节显示硬盘自启用后块擦写失败的次数,与(AC)参数相似。
B7(183)串口降速错误计数SATADownshiftErrorCount这一项表示了SATA接口速率错误下降的次数。通常硬盘与主板之间的兼容问题会导致SATA传输级别降级运行。
B8(184)I/O错误检测与校正I/OErrorDetectionandCorrection(IOEDC)“I/O错误检测与校正”是惠普公司专有的SMARTIV技术的一部分,与其他制造商的I/O错误检测和校正架构一样,它记录了数据通过驱动器内部高速缓存RAM传输到主机时的奇偶校验错误数量。B8(184)点到点错误检测计数EndtoEndErrorDetectionCountIntel第二代的34nm固态硬盘有点到点错误检测计数这一项。固态硬盘里有一个LBA(logicalblockaddressing,逻辑块地址)记录,这一项显示了SSD内部逻辑块地址与真实物理地址间映射的出错次数。B8(184)原始坏块数InitBadBlockCount(Indilinx芯片)硬盘出厂时已有的坏块数量。
B9(185)磁头稳定性HeadStability(西部数据)意义不明。
BA(186)感应运算振动检测nducedOp-VibrationDetection(西部数据)意义不明。
BB(187)无法校正的错误ReportedUncorrectableErrors(希捷)报告给操作系统的无法通过硬件ECC校正的错误。如果数据值不为零,就应该备份硬盘上的数据了。报告给操作系统的在所有存取命令中出现的无法校正的RAISE(URAISE)错误。
BC(188)命令超时CommandTimeout由于硬盘超时导致操作终止的次数。通常数据值应为0,如果远大于零,最有可能出现的是电源供电问题或者数据线氧化致使接触不良,也可能是硬盘出现严重问题。
BD(189)高飞写入HighFlyWrites磁头飞行高度监视装置可以提高读写的可靠性,这一装置时刻监测磁头的飞行高度是否在正常范围来保证可靠的写入数据。如果磁头的飞行高度出现偏差,写入操作就会停止,然后尝试重新写入或者换一个位置写入。这种持续的监测过程提高了写入数据的可靠性,同时也降低了读取错误率。这一项的数据值就统计了写入时磁头飞行高度出现偏差的次数。
BD(189)出厂坏块计数FactoryBadBlockCount(Micron镁光芯片)
BE(190)气流温度AirflowTemperature这一项表示的是硬盘内部盘片表面的气流温度。在希捷公司的某些硬盘中,当前值=(100-当前温度),因此气流温度越高,当前值就越低,最差值则是当前值曾经到达过的最低点,临界值由制造商定义的最高允许温度来确定,而数据值不具实际意义。许多硬盘也没有这一项参数。
BF(191)冲击错误率G-senseerrorrate这一项的数据值记录了硬盘受到机械冲击导致出错的频度。
C3(195)硬件ECC校正HardwareECCRecoveredECC(ErrorCorrectingCode)的意思是“错误检查和纠正”,这个技术能够容许错误,并可以将错误更正,使读写操作得以持续进行,不致因错误而中断。这一项的数据值记录了磁头在盘片上读写时通过ECC技术校正错误的次数,不过许多硬盘有其制造商特定的数据结构,因此数据量的大小并不能直接说明问题。C3(195)实时无法校正错误计数OntheflyECCUncorrectableErrorCount这一参数记录了无法校正(UECC)的错误数量。C3(195)编程错误块计数ProgramFailureblockCount(Indilinx芯片)
C4(196)重映射事件计数ReallocetionEventsCount数据应为0,当前值应远大于临界值。这个参数的数据值记录了将重映射扇区的数据转移到备用扇区的尝试次数,是重映射操作的累计值,成功的转移和不成功的转移都会被计数。因此这一参数与重映射扇区计数(05)相似,都是反映硬盘已经存在不良扇区。C4(196)擦除错误块计数EraseFailureblockCount(Indilinx芯片)在固态硬盘中,这一参数记录了被重映射的块编程失败的数量。
C5(197)当前待映射扇区计数CurrentPendingSectorCount数据应为0,当前值应远大于临界值。这个参数的数据表示了“不稳定的”扇区数,即等待被映射的扇区(也称“被挂起的扇区”)数量。如果不稳定的扇区随后被读写成功,该扇区就不再列入等待范围,数据值就会下降。仅仅读取时出错的扇区并不会导致重映射,只是被列入“等待”,也许以后读取就没有问题,所以只有在写入失败时才会发生重映射。下次对该扇区写入时如果继续出错,就会产生一次重映射操作,此时重映射扇区计数(05)与重映射事件计数(C4)的数据值增加,此参数的数据值下降。C5(197)读取错误块计数(不可修复错误)ReadFailureblockCount(Indilinx芯片)
C6(198)脱机无法校正的扇区计数OfflineUncorrectableSectorCount数据应为0,当前值应远大于临界值。这个参数的数据累计了读写扇区时发生的无法校正的错误总数。数据值上升表明盘片表面介质或机械子系统出现问题,有些扇区肯定已经不能读取,如果有文件正在使用这些扇区,操作系统会返回读盘错误的信息。下一次写操作时会对该扇区执行重映射。C6(198)总读取页数TotalCountofReadSectors(Indilinx芯片)
C7(199)UltraATA访问校验错误率UltraATACRCErrorRate这个参数的数据值累计了通过接口循环冗余校验(InterfaceCyclicRedundancyCheck,ICRC)发现的数据线传输错误的次数。如果数据值不为0且持续增长,表示硬盘控制器→数据线→硬盘接口出现错误,劣质的数据线、接口接触不良都可能导致此现象。由于这一项的数据值不会复零,所以某些新硬盘也会出现一定的数据量,只要更换数据线后数据值不再继续增长,即表示问题已得到解决。C7(199)总写入页数TotalCountofWriteSectors(Indilinx芯片)
C8(200)写入错误率WriteErrorRate/多区域错误率Multi-ZoneErrorRate(西部数据)数据应为0,当前值应远大于临界值。这个参数的数据累计了向扇区写入数据时出现错误的总数。有的新硬盘也会有一定的数据量,若数据值持续快速升高(当前值偏低),表示盘片、磁头组件可能有问题。C8(200)总读取指令数TotalCountofReadCommand(Indilinx芯片)
C9(201)脱道错误率OffTrackErrorRate/逻辑读取错误率SoftReadErrorRate数据值累积了读取时脱轨的错误数量,如果数据值不为0,最好备份硬盘上的资料。C9(201)TACounterDetected(意义不明)C9(201)写入指令总数TotalCountofWriteCommand(Indilinx芯片)
CA(202)数据地址标记错误DataAddressMarkerrors此项的数据值越低越好(或者由制造商定义)。CA(202)TACounterIncreased(意义不明)CA(202)剩余寿命PercentageOfTheRatedLifetimeUsed(Micron镁光芯片)当前值从100开始下降至0,表示所有块的擦写余量统计。计算方法是以MLC擦写次数除以50,SLC擦写次数除以1000,结果取整数,将其与100的差值作为当前值(MLC预计擦写次数为5000,SLC预计擦写次数为100000)。CA(202)闪存总错误bit数TotalCountoferrorbitsfromflash(Indilinx芯片)
CB(203)软件ECC错误数RunOutCancel错误检查和纠正(ECC)出错的频度。CB(203)校正bit错误的总读取页数TotalCountofReadSectorswithcorrectbitserror(Indilinx芯片)
CC(204)软件ECC校正SoftECCCorrection通过软件ECC纠正错误的计数。CC(204)坏块满标志BadBlockFullFlag(Indilinx芯片)
CD(205)热骚动错误率ThermalAsperityRate(TAR)由超温导致的错误。数据值应为0。CD(205)最大可编程/擦除次数MaxP/ECount(Indilinx芯片)
CE(206)磁头飞行高度FlyingHeight磁头距离盘片表面的垂直距离。高度过低则增加了磁头与盘片接触导致损坏的可能性;高度偏高则增大了读写错误率。不过准确地说,硬盘中并没有任何装置可以直接测出磁头的飞行高度,制造商也只是根据磁头读取的信号强度来推算磁头飞行高度。CE(206)底层数据写入出错率WriteErrorRateCE(206)最小擦写次数EraseCountMin(Indilinx芯片)
CF(207)主轴过电流SpinHighCurrent数据值记录了主轴电机运行时出现浪涌电流的次数,数据量的增加意味着轴承或电机可能有问题。CF(207)最大擦写次数EraseCountMax(Indilinx芯片)
D0(208)主轴电机重启次数SpinBuzz数据值记录了主轴电机反复尝试启动的次数,这通常是由于电源供电不足引起的。D0(208)平均擦写次数EraseCountAverage(Indilinx芯片)
D1(209)脱机寻道性能OfflineSeekPerformance这一项表示驱动器在脱机状态下的寻道性能,通常用于工厂内部测试。D1(209)剩余寿命百分比RemainingLife%(Indilinx芯片)
D2(210)斜坡加载值RampLoadValue这一项仅见于几年前迈拓制造的部分硬盘。通常数据值为0,意义不明。D2(210)坏块管理错误日志BBMErrorLog(Indilinx芯片)
D3(211)写入时振动VibrationDuringWrite写入数据时受到受到外部振动的记录。D3(211)SATA主机接口CRC写入错误计数SATAErrorCountCRC(Write)(Indilinx芯片)
D4(212)写入时冲击ShockDuringWrite写入数据时受到受到外部机械冲击的记录。D4(212)SATA主机接口读取错误计数SATAErrorCountCountCRC(Read)(Indilinx芯片)
DC(220)盘片偏移量DiskShift硬盘中的盘片相对主轴的偏移量(通常是受外力冲击或温度变化所致),单位未知,数据值越小越好。
DD(221)冲击错误率G-senseerrorrate与(BF)相同,数据值记录了硬盘受到外部机械冲击或振动导致出错的频度。
DF(223)磁头加载/卸载重试计数Load/UnloadRetryCount这一项与(C1)项类似,数据值累积了磁头尝试重新加载/卸载的次数。
E0(224)磁头阻力LoadFriction磁头工作时受到的机械部件的阻力。
E3(227)扭矩放大计数TorqueAmplificationCount主轴电机试图提高扭矩来补偿盘片转速变化的次数。当主轴轴承存在问题时,主轴电机会尝试增加驱动力使盘片稳定旋转。这个参数的当前值下降,说明硬盘的机械子系统出现了严重的问题。
E4(228)断电返回计数Power-OffRetractCycle数据值累计了磁头因设备意外断电而自动返回的次数,与(C0)项相似。
E6(230)GMR磁头振幅GMRHeadAmplitude磁头“抖动”,即正向/反向往复运动的距离。
E7(231)温度Temperature温度的数据值直接表示了硬盘内部的当前温度,与(C2)项相同。E7(231)剩余寿命SSDLifeLeft剩余寿命是基于P/E周期与可用的备用块作出的预测。新硬盘为100;10表示PE周期已到设计值,但尚有足够的保留块;0表示保留块不足,硬盘将处于只读方式以便备份数据。
E8(232)寿命余量EnduranceRemaining寿命余量是指硬盘已擦写次数与设计最大可擦写次数的百分比,与(CA)项相似。E8(232)预留空间剩余量AvailableReservedSpace(Intel芯片)对于Intel的SSD来说,前边05项提到会保留一些容量来准备替换损坏的存储单元,所以可用的预留空间数非常重要。当保留的空间用尽,再出现损坏的单元就将出现数据丢失,这个SSD的寿命就结束了。所以仅看05项意义并不大,这一项才最重要。这项参数可以看当前值,新的SSD里所有的预留空间都在,所以是100。随着预留空间的消耗,当前值将不断下降,减小到接近临界值(一般是10)时,就说明只剩下10%的预留空间了,SSD的寿命将要结束。这个与(B4)项相似。
注:TotalEraseCount全擦写计数是指固态硬盘中所有块的擦写次数的总和,不同规格的NAND芯片以及不同容量的SSD,其最大全擦写次数均有所不同。
F1(241)LBA写入总数TotalLBAsWrittenLBA写入数的累计。F1(241)写入剩余寿命LifetimeWritesfromHost自硬盘启用后主机向硬盘写入的数据总量,以4个字节表示,每写入64GB字节作为一个单位。
F2(242)LBA读取总数TotalLBAsReadLBA读取数的累计。某些SMART读取工具会显示负的数据值,是因为采用了48位LBA,而不是32位LBA。F2(242)读取剩余寿命LifetimeReadsfromHost自硬盘启用后主机从硬盘读取的数据总量,以4个字节表示,每读取64GB字节作为一个单位。
FA(250)读取错误重试率ReadErrorRetryRate从磁盘上读取时出错的次数。
FE(254)自由坠落保护FreeFallProtection现在有些笔记本硬盘具有自由坠落保护功能,当硬盘内置的加速度探测装置检测到硬盘位移时,会立即停止读写操作,将磁头臂复位。这个措施防止了磁头与盘片之间发生摩擦撞击,提高了硬盘的抗震性能。这个参数的数据里记录了这一保护装置动作的次数。