---
title: 输入文件格式
description: "smartctl指令工具将会采集出硬盘当前的SMART信息，将收集到的数据按表1 SMART信息说明整理成CSV数据文件。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengaccel/storage/ksml/kunpengksml_36_0035.html
sourcePath: /source/zh/kunpengaccel/storage/ksml/kunpengksml_36_0035.html
indexId: 5ed15729fe90bd2e1b7a2ab907187ba4069950eb93796dbade3e345ec6dbb31961
---
# 输入文件格式

smartctl指令工具将会采集出硬盘当前的SMART信息，将收集到的数据按表1 SMART信息说明整理成CSV数据文件。

经过对业界常用SMART数据的选择，提取以下这些SMART信息作为随机森林模型训练和预测的输入数据。


**表1 SMART信息说明**

| SMART ID | CSV文件列名 | 英文名 | 说明 |
| --- | --- | --- | --- |
| 1 | ssdSmart.smart\_1(\_raw)\_value | Raw Read Error Rate | 在固态硬盘中，此项的数据值包含了可校正的错误与不可校正的RAISE错误。 |
| 5 | ssdSmart.smart\_5(\_raw)\_value | Reallocated Sector Ct | 重映射扇区计数。固态硬盘在制造时也保留了一定的空间，当某个存储单元出现问题后即把损坏的部分隔离，用好的部分来顶替。这一替换方法和机械硬盘的扇区重映射是一个道理，只不过机械硬盘正常时极少有重映射操作，而对于固态硬盘是经常性的。 在固态硬盘中这一项的数据会随着使用而不断增长，只要增长的速度保持稳定就可以。通常情况下，数据值＝100－（100×被替换块/必需块总数），因此也可以估算出硬盘的剩余寿命。 |
| 9 | ssdSmart.smart\_9(\_raw)\_value | Power On Hours | 硬盘自出厂以来加电启动的统计时间，单位为小时（或根据制造商设定为分钟或秒），一般用户以该值判定硬盘是否被使用过。 |
| 12 | ssdSmart.smart\_12(\_raw)\_value | Power Cycle Count | 通电周期计数的数据值表示了硬盘通电/断电的次数，即电源开关次数的累计，新硬盘通常只有几次。 |
| 170 | ssdSmart.smart\_170(\_raw)\_value | Grown Failing Block Count | 读写失败的块增长的总数。 |
| 171 | ssdSmart.smart\_171(\_raw)\_value | Program\_Fail Block Count | Flash编程失败块的数量。 |
| 172 | ssdSmart.smart\_172(\_raw)\_value | Erase Fail Block Count | 擦写失败块的数量。 |
| 173 | ssdSmart.smart\_173(\_raw)\_value | Wear Leveling Count | 所有好块的平均擦写次数。 |
| 174 | ssdSmart.smart\_174(\_raw)\_value | Unexpected Power Loss Count | 硬盘自启用后发生意外断电事件的次数。 |
| 175 | ssdSmart.smart\_175(\_raw)\_value | Program Fail Count Chip | 编程错误块计数。 |
| 177 | ssdSmart.smart\_177(\_raw)\_value | Wear Range Delta | 磨损最重的块与磨损最轻的块的磨损百分比之差。 |
| 180 | ssdSmart.smart\_180(\_raw)\_value | Unused Reserved Block Count Total | 固态硬盘会保留一些容量来准备替换损坏的存储单元，所以可用的预留空间数非常重要。这个参数的当前值表示的是尚未使用的预留的存储单元数量。 |
| 181 | ssdSmart.smart\_181(\_raw)\_value | Program Fail Count | 用4个字节显示已编程失败的次数。 |
| 182 | ssdSmart.smart\_182(\_raw)\_value | Erase Fail Count | 用4个字节显示硬盘自启用后块擦写失败的次数。 |
| 183 | ssdSmart.smart\_183(\_raw)\_value | SATA Downshift Error Count | 这一项表示了SATA接口速率错误下降的次数。通常硬盘与主板之间的兼容问题会导致SATA传输级别降级运行。 |
| 184 | ssdSmart.smart\_184(\_raw)\_value | Init Bad Block Count | 硬盘出厂时已有的坏块数量。 |
| 187 | ssdSmart.smart\_187(\_raw)\_value | Reported Uncorrectable Errors | 报告给操作系统的无法通过硬件ECC校正的错误。如果数据值不为零，就应该备份硬盘上的数据了。 报告给操作系统的在所有存取命令中出现的无法校正的RAISE（URAISE）错误。 |
| 188 | ssdSmart.smart\_188(\_raw)\_value | Command Timeout | 由于硬盘超时导致操作终止的次数。通常数据值应为0，如果远大于零，最有可能出现的是电源供电问题或者数据线氧化致使接触不良，也可能是硬盘出现严重问题。 |
| 190 | ssdSmart.smart\_190(\_raw)\_value | Airflow Temperature | 这一项表示的是硬盘内部盘片表面的气流温度。 |
| 192 | ssdSmart.smart\_192(\_raw)\_value | Power\-Off Retract Count | 对于固态硬盘来说，这一项的数据量仍然代表了不安全关机，即发生意外断电的次数。 |
| 194 | ssdSmart.smart\_194(\_raw)\_value | Temperature | 温度的数据值直接表示了硬盘内部的当前温度。 |
| 195 | ssdSmart.smart\_195(\_raw)\_value | On the fly ECC Uncorrectable Error Count | 这一参数记录了无法校正（UECC）的错误数量。 |
| 196 | ssdSmart.smart\_196(\_raw)\_value | ReallocationEvents Count | 重映射事件计数。这个参数的数据值记录了将重映射扇区的数据转移到备用扇区的尝试次数，是重映射操作的累计值，成功的转移和不成功的转移都会被计数。 |
| 197 | ssdSmart.smart\_197(\_raw)\_value | Current Pending Sector Count | 这个参数的数据表示了“不稳定的”扇区数，即等待被映射的扇区（也称“被挂起的扇区”）数量。 |
| 198 | ssdSmart.smart\_198(\_raw)\_value | Offline Uncorrectable Sector Count | 这个参数的数据累计了读写扇区时发生的无法校正的错误总数。数据值上升表明盘片表面介质或机械子系统出现问题，有些扇区肯定已经不能读取，如果有文件正在使用这些扇区，操作系统会返回读盘错误的信息。下一次写操作时会对该扇区执行重映射。 |
| 199 | ssdSmart.smart\_199(\_raw)\_value | Ultra ATA CRC Error Rate | 这个参数的数据值累计了通过接口循环冗余校验（Interface Cyclic Redundancy Check，ICRC）发现的数据线传输错误的次数。 |
| 206 | ssdSmart.smart\_206(\_raw)\_value | Soft ECC Correction | 通过软件ECC纠正错误的计数。 |
| 232 | ssdSmart.smart\_232(\_raw)\_value | Endurance Remaining | 寿命余量是指硬盘已擦写次数与设计最大可擦写次数的百分比。 |
| 233 | ssdSmart.smart\_233(\_raw)\_value | Available Reserved Space | 预留空间剩余量。 |
| 241 | ssdSmart.smart\_241(\_raw)\_value | Total LBAs Written | LBA写入数的累计。 |
| 242 | ssdSmart.smart\_242(\_raw)\_value | Total LBAs Read | LBA读取数的累计。 |
| 244 | ssdSmart.smart\_244(\_raw)\_value | Lifetime Writes from Host | 自硬盘启用后主机向硬盘写入的数据总量，以4个字节表示，每写入64GB字节作为一个单位。 |
| 245 | ssdSmart.smart\_245(\_raw)\_value | Lifetime Reads from Host | 自硬盘启用后主机从硬盘读取的数据总量，以4个字节表示，每读取64GB字节作为一个单位。 |


**表2 输入CSV文件格式**

| disk\_sn | timestamp | fault | ssdSmart.smart\_1\_value | ssdSmart.smart\_1\_raw\_value | ssdSmart.smart\_5\_value | ssdSmart.smart\_5\_raw\_value | ...... |
| --- | --- | --- | --- | --- | --- | --- | --- |
| ZHZ3TFBD | 2021\-7\-9 | 0 | 84 | 926673 | 100 | 0 | ...... |
| ...... | ...... | ...... | ...... | ...... | ...... | ...... | ...... |


每一个SMART列都有value和raw_value两个值，例如ssdSmart.smart_1_value和ssdSmart.smart_1_raw_value。

1. raw_value（原始值）:
制造商定义的原始值，从VALUE派生。
数据值是硬盘运行时各项参数的实测值，大部分SMART工具以十进制显示数据。 数据值代表的意义随参数而定，大致可以分为三类：

  - 数据值并不直接反映硬盘状态，必须经过硬盘内置的计算公式换算成当前值才能得出结果。
  - 数据值是直接累计的，如Start/Stop Count（启动/停止计数）的数据是50，即表示该硬盘从出厂到现在累计启停了50次。
  - 有些参数的数据是即时数，如Temperature（温度）的数据值是44，表示硬盘的当前温度是44℃。
    因此，有些参数直接查看数据也能大致了解硬盘目前的工作状态。

2. value (当前值)：
  当前值是各SMART ID项在硬盘运行时根据实测原始数据（raw value）通过公式计算的结果。结果范围为1到253之间。253意味着最好的情况，1意味着最坏的情况。计算公式由硬盘厂家自定。

  硬盘出厂时各ID项目都有一个预设的最大正常值，即出厂值，这个预设的依据及计算方法为硬盘厂家保密，不同型号的硬盘都不同，最大正常值通常为100或200或253，新硬盘刚开始使用时显示的当前值可以认为是预设的最大正常值（有些SMART ID项如温度等除外）。随着使用损耗或出现错误，当前值会根据实测数据而不断刷新并逐渐减小。因此，当前值接近临界值（raw_value）就意味着硬盘寿命的减少，发生故障的可能性增大，所以当前值也是判定硬盘健康状态或推测寿命的依据之一。


以采集/dev/sda这块盘的SMART数据为例进行说明。
```
smartctl -a /dev/sda
```


图1 采集到的Smart数据（1）

图2 采集到的Smart数据（2）

第一列为硬盘序列号，从图1 采集到的Smart数据（1）中可得。

第二列为当前时间戳。

第三列为是否为故障盘（fault_predict接口不需要该列）。

第四列ssdSmart.smart_1_value对应图2中的框1。

第五列ssdSmart.smart_1_raw_value对应图2中的框2。

第六列ssdSmart.smart_5_value对应图2中的框3。

第七列ssdSmart.smart_5_raw_value对应图2中的框4。

......（以此类推）


采集时，需注意的事项如下。

- 对于SMART信息，各个厂商的实现并不相同，采集时须注意过滤。
  例如：Seagate Enterprise Capacity 3.5 HDD ST4000NM0035-1V4107 硬盘采集到的SMART信息则是：

  由于算法需要采集SMART 188，而该列的值为"0 0 0"，因此要对该列的值进行过滤，保留第一个"0"即可，过滤掉后面两个数字，保证最后输入文件中的类型为数值类型。

- 由于SMART信息各个厂商的实现并不相同，可能有些厂家的SMART信息会有所缺失。
  例如：某厂商的HUH728080ALE600硬盘采集到的SMART信息则是：

  如果所需的SMART信息值有缺失的话，程序则会报错退出。 例如：如果输入数据中ssdSmart.smart_1_value列缺失，则会报错。 1 KeyError: "['ssdSmart.smart_1_value'] not in index" 如果想要继续训练，可在数据文件内补充所缺的列并全部补0，补0后可进行正常训练，但信息缺失会影响模型预测的准确率。
