S.M.A.R.T.

S.M.A.R.T.，全称为“Self-Monitoring Analysis and Reporting Technology”，即“自我监测、分析及报告技术”，是一种自动的硬盘状态检测与预警系统和规范。通过在硬盘硬件内的检测指令对硬盘的硬件如磁头、盘片、马达、电路的运行情况进行监控、记录并与厂商所设定的预设安全值进行比较，若监控情况将要或已超出预设安全值的安全范围，就可以通过主机的监控硬件或软件自动向用户作出警告并进行轻微的自动修复，以提前保障硬盘数据的安全。除一些出厂时间极早的硬盘外，现在大部分硬盘均配备该项技术。

## 功能

该技术能使硬盘更稳定的运行。作用如下：

- 当硬盘的损坏程度还能在软件可修复的范围内（通常由厂商决定），软件就会自动修理，防止数据的进一步损坏。同时报告异常值，异常程度为警告。
- 当硬盘的损坏程度已经超出软件的修复承载范围（通常由厂商决定），软件则会尽最大能力防止再次写入数据的丢失（如避开已损坏扇区），同时会报告异常值，异常程度为危险。
- BIOS自检时，主板会检测硬盘的S.M.A.R.T.信息，如果硬盘的异常程度为危险时，会提醒用户及时备份数据（如嗡鸣声或显示文字）。
- Windows 7或以上的Windows系统，如果检测到硬盘的S.M.A.R.T.错误，也会弹出警告视窗，提示用户备份资料。

## 历史

最早期的硬盘监控技术起源于1992年IBM在为AS/400计算机的IBM9337硬盘阵列中的IBM 0662 SCSI2代硬盘驱动器之中，后来该技术被命名为Predictive Failure Analysis（故障预警分析技术），它是通过在固件中测量几个重要的硬盘安全参数和评估他们的情况。从物理硬盘发送到监控软件的结果中被限定两种结果：“硬盘安全”和“硬盘不久后会发生故障”。

不久，由个人电脑制造商Compaq和硬盘制造商Seagate、Quantum和Conner提出了名为IntelliSafe的类似技术。通过该技术，硬盘会测量自身的的健康指标并将参量值传送给操作系统和用户的监控软件中，每个硬盘生产商有权决定哪些指标需要被监控和它们的安全阈值。

Compaq于1995年早期将该项技术方案提交到Small Form Factor委员会进行标准化，该方案得到IBM、Seagate、Quantum、Conner和Western Digital所支持。由于IntelliSafe技术的灵活性，委员会接受了该方案，并正式更名S.M.A.R.T.技术，将其标准化并推广至ATA-3行业标准中。

## 运作原理

该技术所需数据被存放在硬盘物理盘面最前面的磁道中，由硬盘制作商将相关管理程序和数据该磁道中，包括加解密程序，自监控程序，自修复程序等，主机的监控软件可以通过“SMART RETURN STATUS”的命令读取S.M.A.R.T.信息，且这些信息不允许被用户直接修改。

## 检测属性

下面将列出一些S.M.A.R.T.的原始检测属性和含义。普遍为检测值越高性能越好。即使所有制造商都必须遵守共同的规则，但由于有些检测值在不同硬盘制造商中用不全相同的定义和计量方法而对于不同制作商来说检测值不全是越高越好，所以下面属性的指标只作一般参考。除外，各制造商也会根据自己需要添加一些自己专有的检测属性。

<image>

｜表示数值越高越好

<image>

｜表示数值越低越好

重要项：粉色底｜当超出安全范围会对性能严重影响，甚至导致数据丢失。

ID｜ID十六进制值｜英文名｜中文译名｜最优｜说明

1｜0x01｜Read Error Rate｜底层数据读取错误率｜

<image>

｜存储器从一个硬盘表面读取数据时发生的错误率。原始值由于不同厂商的不同计算方法而有所不同，其十进制值往往无意义的。

2｜0x02｜Throughput Performance｜读写通量性能｜

<image>

｜通常是硬盘读写性能的测量值，如果其值有变动，有可能硬盘出现了问题。

3｜0x03｜Spin-Up Time｜盘片启动时间｜

<image>

｜盘片由静止启动加速到稳定正常运行速度的平均所需时间。

4｜0x04｜Start/Stop Count｜电机起停次计数｜

<image>

｜一个盘片启动关闭周期的统计值，只有硬盘从完全断电中启动或从睡眠模式恢复，盘片主轴电机被启动时才会记一次数。

5｜0x05｜Reallocated Sector Count｜重定位磁区计数｜

<image>

｜记录由于损坏而被映射到无损的后备区的磁区计数。当硬盘出现损坏磁区时，可以通过将其物理空间指向到特定的无损区域进行重映射修复，从而出现坏磁区的硬盘仍可使用。但当高过一定数值后，后磁区消耗殆尽而无法再重映射修复时，这些坏磁区就会显现出来且无法自行修复。除外由于要要求磁头读取这些坏磁区时专门再移动到后备区读写数据，对硬盘读写性能也有影响。

6｜0x06｜Read Channel Margin｜信道读取余量｜读取数据时信道可用的余量，该属性没制定任何功用。

7｜0x07｜Seek Error Rate｜寻道错误率｜（该属性是特定制造商才有的）磁头寻找磁道由于机械问题而出错几率，有多种原因可能引致出错，如：磁头伺服构件，盘体过热，或损坏。于不同厂商的不同计算方法而有所不同，其十进制值往往无意义的。

8｜0x08｜Seek Time Performance｜寻道性能｜

<image>

｜每次寻道时间的平均值，该值短期内迅速减少，有可能硬盘出现了问题。

9｜0x09｜Power-On Hours｜硬盘加电时间｜

<image>

｜硬盘自出厂以来加电启动的统计时间，单位为小时（或根据制造商设定为分钟或秒），一般用户以该值判定硬盘是否被使用过。

10｜0x0a｜Spin Retry Count｜电机起转重试｜

<image>

｜S.M.A.R.T参数电机起转重试，表明了主轴电机的启动尝试次数。这个属性存储了关于主轴电机尝试加速到完全可操作速度的次数（在这种情况下，意味着主轴电机的第一次启动尝试没有成功）。主轴电机频繁的尝试启动，意味着硬盘驱动器的寿命可能将近实际限值。

11｜0x0b｜Recalibration Retries｜磁头校准重试｜

<image>

｜磁头在一次运行失败时尝试校准至正常状态的统计数，该值改变时意味着硬盘的机械部件已经出现问题了。

12｜0x0c｜Power Cycle Count｜设备开关计数｜该属性表示硬盘电源充分开/关循环计数。

13｜0x0d｜Soft Read Error Rate｜软件读取错误率｜

<image>

｜操作系统读取数据时的出错率。

183｜0xb7｜SATA Downshift Error Count｜SATA降级运行计数｜Western Digital 和 Samsung 特有属性，记录由于兼容问题导致降低SATA传输级别运行的计数。

184｜0xb8｜End-to-End error｜终端校验出错｜

<image>

｜HP专有S.M.A.R.T.（SMART IV）技术的一个特有属性，记录硬盘从盘片读取数据到高速缓存后再传输到主机时数据校验出错的次数。

185｜0xb9｜Head Stability｜磁头稳定性｜Western Digital特有属性

186｜0xba｜Induced Op-Vibration Detection｜Western Digital特有属性

187｜0xbb｜Reported Uncorrectable Errors｜报告不可纠正错误｜

<image>

｜硬件ECC无法恢复的错误计数。

188｜0xbc｜Command Timeout｜通信超时｜

<image>

｜由于无法连接至硬盘而终止操作的统计数，一般为0，如果远超过0，则可能电源问题，数据线接口氧化或更严重的问题。

189｜0xbd｜High Fly Writes｜磁头写入高度｜

<image>

｜硬盘进行写入时对磁头高度进行监控以提供额外的保障。当磁头处于不正常高度进行写入时，写入操作会被终止，原有数据重写入或者将该扇区重映射到安全区域。该属性是统计值。

190｜0xbe｜Airflow Temperature｜气流温度｜

<image>

｜Western Digital特有属性，计量硬盘内气流温度，和检测项0xc2相似。

191｜0xbf｜G-sense Error Rate｜加速度错误率｜

<image>

｜计量可能对硬盘做成损害的冲击次数。

192｜0xc0｜Power-off Retract Count｜电源关闭磁头收回计数｜

<image>

｜计量磁头在没有加电时不移进硬盘的值。

193｜0xc1｜Load Cycle Count ｜磁头释放收回循环｜

<image>

｜计量磁头在加电时移至停泊区和移至盘片循环的值。

194｜0xc2｜Temperature ｜温度｜

<image>

｜如果有合适的传感器的话，这里会显示硬盘温度。请注意该温度并非直接的摄氏度或华氏度。通常来说，将原始值的最低两位字节转化成十进制，即为精确的温度值（单位：摄氏度）。例如：原始值为0x003600090023，将0x23转换为十进制为35，则硬盘温度为35度。

195｜0xc3｜Hardware ECC Recovered ｜硬件ECC恢复｜（特定原始值）

196｜0xc4｜Reallocation Event Count｜重定位事件计数｜

<image>

｜记录已重映射扇区和可能重映射扇区的事件计数。

197｜0xc5｜Current Pending Sector Count｜等候重定的扇区计数｜

<image>

｜记录了不稳定的扇区的数量。

198｜0xc6｜Uncorrectable Sector Count｜无法校正的扇区计数｜

<image>

｜记录肯定出错的扇区数量。

199｜0xc7｜UltraDMA CRC Error Count｜UltraDMA通讯CRC错误｜

<image>

｜记录硬盘通讯时发生的CRC错误。

200｜0xc8｜Multi-Zone Error Rate｜多区域错误率｜

<image>

｜写入一个区域时发现的错误的计数。

200｜0xc8｜Write Error Rate ｜写入错误率｜

<image>

｜Fujitsu的特别属性，写入一个区域时发现的错误的计数。

201｜0xc9｜Soft Read Error Rate｜逻辑读取错误率｜

<image>

｜记录脱轨错误。

202｜0xca｜Data Address Mark errors｜数据地址标记错误｜

<image>

｜记录数据地址标记错误（或制造商特定的计数）

203｜0xcb｜Run Out Cancel｜用完取消｜

<image>

｜ECC错误计数

204｜0xcc｜Soft ECC Correction｜逻辑ECC纠正｜

<image>

｜记录由软件ECC更正的错误计数。

205｜0xcd｜Thermal Asperity Rate ｜热嘈率｜

<image>

｜记录高温导致的出错记数。

206｜0xce｜Flying Height｜飞行高度｜记录磁头的飞行高度。飞得太低会增加磁头撞毁的机会，飞得太高增加读写错误的机会。

207｜0xcf｜Spin High Current｜主轴电机浪涌电流计数｜

<image>

｜记录主轴电机运转时浪涌电流的次数。

208｜0xd0｜Spin Buzz｜电机启动失败｜记录由于电力不足而启动主轴电机的蜂鸣声次数。

209｜0xd1｜Offline Seek Performance｜离线寻址效能｜在其内部测试硬盘的寻址能力表现。

210｜0xd2｜？｜？｜（没定性，出现在Maxtor 6B200M0 200GB 和Maxtor 2R015H1 15GB 的硬盘中）

211｜0xd3｜Vibration During Write｜写操作震动｜记录写入操作的震动数。

212｜0xd4｜Shock During Write｜写操作冲击｜记录写入操作时的冲击数。

220｜0xdc｜Disk Shift｜盘体偏移｜

<image>

｜记录盘体由于冲击或温度导致偏离主轴的相对距离。

221｜0xdd｜G-Sense Error Rate｜加速计出错率｜

<image>

｜从外部诱发的冲击和振动产生的错误计数。

222｜0xde｜Loaded Hours｜数据加载时间｜数据读取时所花费的时间。（磁头移动时间）

223｜0xdf｜Load/Unload Retry Count｜加载/卸载重试次数｜磁头改变位置时所需时间。

224｜0xe0｜Load Friction｜负载摩擦｜

<image>

｜读写时由于机械摩擦做成的阻力。

225｜0xe1｜Load/Unload Cycle Count｜加载/卸载循环计数｜

<image>

｜总负载周期计数。

226｜0xe2｜Load 'In'-time｜磁头加载耗时｜磁头加载所需总时间（不包括在停泊区的花费）。

227｜0xe3｜Torque Amplification Count｜扭矩放大计数｜

<image>

｜尝试来补偿盘片的速度变化的计数。

228｜0xe4｜Power-Off Retract Cycle｜断电缩回周期｜

<image>

｜切断电源后电磁枢自动缩回的时间计数。

230｜0xe6｜GMR Head Amplitude｜GMR磁头振幅｜磁头振幅计数（磁头反复正反向运动距离）。

231｜0xe7｜Temperature｜硬盘温度｜

<image>

｜记录硬盘温度。

232｜0xe8｜Endurance Remaining｜耐久性剩余｜磁盘可使用周期与设计可使用周期的百分比。

232｜0xe8｜Available Reserved Space｜可用保留空间｜Intel固态硬盘报告的可提供的预留空间占作为一支全新的固态硬盘预留空间的百分比。

233｜0xe9｜Power-On Hours｜加电时间｜处于开机状态的小时数。

233｜0xe9｜Media Wearout Indicator｜介质耗损指标｜Intel固态硬盘报告的NAND刷写寿命，全新时值为100，最低值为1，其跌幅随NAND的擦除周期增加而在0到最大额定周期范围减少。

240｜0xf0｜Head Flying Hours｜磁头飞行时间｜磁头处于定位中的时间。

240｜0xf0｜Transfer Error Rate｜传输错误率｜在数据传输时连接被重置的次数计数。（Fujitsu特有属性）

241｜0xf1｜Total LBAs Written｜LBA写入总数｜LBA写入总数计数。

242｜0xf2｜Total LBAs Read｜LBA读取总数｜LBA读取总数计数，部分S.M.A.R.T.检测程序会把原始值显示为负数，这是因为该原始值为48位，而不是32位的。

250｜0xfa｜Read Error Retry Rate｜读取错误重试率｜

<image>

｜从磁盘读取时的错误计数。

254｜0xfe｜Free Fall Protection｜自由跌落保护｜

<image>

｜对“自由落体事件”检测计数。

## 在非ATA平台上的实现

### SCSI

硬盘的传输端口平台主要分为ATA和SCSI两个平台。作为一种硬盘的检测技术，理论上都能在两个平台上实现的，但由于两个平台也存在巨大的不同，S.M.A.R.T.在SCSI上的实现和在ATA的实现上也有所不同。首先，作为ATA上的专有规范，S.M.A.R.T.对ATA系统的干预要比SCSI更明显，S.M.A.R.T.对SCSI更多是起到检测的作用，即使在检测到磁盘有故障时，其只是报告监控端，要人为地处理故障。其次，由于SCSI平台的硬盘比ATA的更为复杂，所以其检测属性也比ATA的多和复杂准确，如包括对盘片和驱动电路版的温度检测（ATA多仅对盘片温度检测），对电压的检测等。

### USB

在USB标准中，USB不能用于计算机内部储存设备的基本总线（如ATA，SCSI等），其本身没有为S.M.A.R.T.提供传输数据的途径。在使用ATA硬盘，以USB为传输端口的移动硬盘中，即使硬盘内S.M.A.R.T.仍然运作，但没办法直接向系统提供S.M.A.R.T.的数据。现在新的移动硬盘的内部驱动转换电路已经能以一些方法将硬盘内S.M.A.R.T.的数据通过USB传输到系统或监控程序中读取。