|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
SMART数据结构入门 $ N/ ~ L9 A/ Y1 i/ X' o: f& l: D
( s( w! p0 l2 o V$ cSMART,也就是Self-Monitoring, Analysis, and Reporting Technology,一般玩家对它的理解就是CDI或者HD Tune这类工具对一块磁盘状态信息的报告。在最必要限度内这么理解没问题,但是现在的工具软件都很傻瓜化,用户门槛也很低,这也就造成绝大多数人根本看不懂SMART报告的意思。
- h& w. V$ }8 z8 u# k, k8 O8 J- h
6 E4 T$ d# B! O3 K2 J1 y! b这里就仅针对我们经常接触到的部分做一个入门讲解。* u: s. R; \+ G. Y
' l- q% B+ Y1 x
8 i& g Q- e9 X3 F( g* LCDI截图中红框部分也就是SMART区域,每一行都是一个SMART属性,一个ATA设备最多有30个SMART属性,上面“主机写入”、“主机读取”、“通电次数”和“通电时间”的数据就是从SMART属性中取得的。1 U7 c* O/ ]) [; W
0 `9 J- I5 A% H. A% C, {但SMART的数据结构并不像软件显示的这样简单。如果有人点过CDI“编辑”菜单里的“复制选项”的话,就会发现里面有两个跟SMART有关的复选,分别是“SMART_READ_DATA”和“SMART_READ_THRESHOLD”。是的,SMART中的“阈值/Threshold”和其他数据是分开的,二者通过ID对应起来。每个SMART属性长12字节,并缀有2字节的版本信息,位于“SMART_READ_DATA”和“SMART_READ_THRESHOLD”的前362字节内。: E0 ?/ {8 U# [1 Q+ O5 g3 Y
3 _! y7 h1 _3 C, C- ?2 v " ^; t" Z/ T! h
0 W) S( n9 V/ Y, o/ m
上面红框圈出来的位置就是SMART属性的原始数据。因为Intel 730只有25个SMART属性,所以有60字节的占位0。每个属性的起始位有蓝色下划线。
6 x( k* T% \8 Z) ?) d! l) n
5 n7 M. u ` E7 L在“SMART_READ_DATA”的一个SMART属性的12个字节中,第1个字节是“ID”,也就是CDI里面第一列的“ID”;第2-3个字节是“Flag/标记”,表示这个属性的性质;第4个字节是“当前值/Current value/Normalized”;第5个字节是“最差值/Worst value”;第6-11字节是“原始值/Raw data”;第12字节保留。“SMART_READ_THRESHOLD”就只有第1个字节的“ID”和第2个字节的“阈值/Threshold”,剩余10字节都是保留。这里面需要细说的就是“Flag/标记”,因为这个值极少出现,但却是一个SMART属性有没有用的关键。一个一个来说:: O' M% e% N0 |1 E3 s, N
. v7 a% \: t7 T( _! T# b第1个字节“ID”,代表这个SMART属性的定义内容。0是无效值,其余都是有效值。比如我们看到05h就知道是重映射扇区数,09h就是通电时间。注意只有少部分ID是“国际统一”的,绝对不要把厂家A的定义内容硬搬到厂家B的产品上,甚至同厂家不同方案的产品都不一样。较为严谨的SMART工具在处理不明定义的ID时都会描述为“厂商特定/Vendor Specific”,而不是找个自己知道的显示出来。3 e2 p+ {5 s9 [
* O/ U2 y: b$ x7 }7 m" e) F
第2-3个字节“Flag/标记”,表示这个SMART属性的性质,并细分为6类。为方便表达,这里把十六进制的BYTE转换为二进制的BIT:
* j8 E3 b& F# }
# N) b6 P7 e1 T+ J0 QBIT | 描述 | 0 | 故障保修属性/Pre-fail warranty attribute% X* T1 Q! L! D$ p) _
为0时表示这个属性失败与否都不在保修范围内(大多数)
1 n. U2 F1 F; T7 W3 S h# x* R+ C为1时表示这个属性失败就应寻求保修,比如B8h 端到端错误计数) f7 K5 q% t* a/ C% U
| 1 | 在线记录属性/Online collection attribute1 k6 `+ n6 L" q$ h! y9 m/ R
为0时表示这个属性只在离线活动时记录,比如C6h 离线不可纠正扇区计数$ ?' Z5 L8 |% e! g# _ o
为1时表示这个属性在在线活动和离线活动时都记录(大多数)
) n3 M+ O5 e" n7 p: P' w | 2 | 性能属性/PeRFormance attribute6 k! Q4 E9 w( F: z! q
为0是表示这个属性不是性能属性(大多数)9 m9 g. m0 l: V
为1时表示这个属性是性能属性,比如02h 吞吐性能
" M% v* k( x2 Q$ J | 3 | 错误率属性/Error rate attribute
/ P+ S) S( y2 ]5 p: {4 m为0时表示这个属性不是错误率属性(大多数)
6 v a4 g" j6 ?为1时表示这个属性是错误率属性,比如01h 原始读取错误率. Q; j z ]$ O5 |: [* P
| 4 | 事件计数属性/Event count attribute
- Z$ i$ Y/ b) s为0时表示这个属性不是事件计数属性,比如C2h 温度
, o: ]) x, C0 R2 X3 _0 ]" }为1时表示这个属性是事件计数属性(大多数)
# s7 U' h1 ?' \2 I: a( W- ?' c h G | 5 | 自维护属性/Self-preserving attribute6 k3 }0 j) q0 A# x% R2 f
为0时表示这个属性是驱动器与主机交互中记录的,比如C5h 不稳定扇区数
4 Z7 T& `7 X7 D为1时表示这个属性是驱动器不需与主机交互自行记录的(大多数)7 g' R0 ?6 I( b
| 6-15 | 保留 | ( m, {, F$ P% c; P3 q# @- a9 T
如果厂家提供手册的话,每个SMART属性的Flag/标记会有单独标注。但我们在CDI导出的原始信息里面看到的都是十六进制数,这里我们挑几个数实战一下:
0 j! M0 z( ?9 D/ p7 Q05h 重映射扇区计数 (0032)hex=(00000000 00110010)bin,所以这是一个在线记录属性、事件计数属性和自维护属性;
" ]0 q( _1 I; {B8h 端到端错误计数 (0033)hex=(00000000 00110011)bin,所以这是一个故障保修属性、在线记录属性、事件计数属性和自维护属性;) [+ `- H% \0 U# \4 v, _
C2h 温度 (0022)hex=(00000000 00100010)bin,所以这是一个在线记录属性和自维护属性。
( i+ L' c' G# C# B/ L" j+ x' {注意:上述举例并不适用于所有设备,不同设备相同SMART属性的Flag/标记很可能不同。7 z" h+ L% v7 ^4 v* r9 N
了解了Flag/标记的意义以后就能知道哪些SMART属性代表一块盘是否健康,以及厂家是否会承担保修责任。, v- s7 A& t; s9 T8 N4 d) X! {2 H
, E" ~# }* j+ h$ v) p第4个字节“当前值/Current value/Normalized”,这个值是根据“原始值/Raw data”算出来的,表示一个SMART属性当前的状况。这个值为0、254(FEh)和255(FFh)时都是无效的,最大值是253(FDh),最小为1,通常情况下初始值是100(64h)。3 b- Z+ K8 Y% H) v! e6 H3 Z) H
" P# t; L. C4 W0 l. Y& ^6 C% ?
第5个字节“最差值/Worst value”,表示当前值的历史最低值。最差值的有效范围和当前值一样。
6 X, g7 k- [# W4 M4 x# z; A( [6 P1 C2 e
第6-11字节“原始值/Raw data”,表示一个SMART属性的原始记录值,这就跟这个属性的定义有关了,不同厂家不同产品对同一属性的定义都有不同。这里要特别说明一点就是,原始值有6字节长,厂家可以将这6字节分成几段,分别赋予不同的定义。温度就是最明显的例子,很多厂家都会在这一属性上分三段分别定义当前温度、最低温度和最高温度,其中当前温度和最高温度经过计算会显示到当前值和最差值上。这里用BEh 温度或者说气流温度举例,原始值是(00001D09001C)hex=(0,29,9,28)dec,也就是最高温是29℃,最低温9℃,当前28℃,反映到当前值上就是(100-28)=72,反映到最差值上就是(100-29)=71,不存在阈值。& |) Q! z/ v) }- ^1 {& {
: `" {9 D6 o) q) o/ o! H- Y" \3 k
第12字节保留,通常情况下这1字节填0留空,但有的厂商觉得原始值那6字节不够用,所以也用了这1字节,这也就是俗话说的48位原始值和56位原始值。只不过一般的SMART工具都不会去显示保留的这1字节,导致原始值显示不完全。
" _, I* w0 k5 Z5 O- a+ q+ Q0 D( V
; w! ?0 _& n$ I在“SMART_READ_THRESHOLD”里面有用的就只有第1字节的“ID”和第2字节的“阈值/Threshold”。ID跟上面的一样,阈值表示一个SMART属性设计时的最差情况,一般来说就是故障预警,当当前值或最差值小于等于阈值的时候就代表一块盘出现功能失效了,应尽早着手处理。阈值为0时表示这个SMART属性永远正常,阈值为255(FFh)表示这个属性永远不正常,阈值为254(FEh)为无效值,阈值在1-253(FDh)之间是有效值。比如大部分HDD的B8h 端到端错误计数的阈值都是99,意思就是只要侦测到出现端到端错误就SMART报警,这也确实是极为关键的功能失效,代表数据在磁盘内部存储路径上已经不能保持完整性,需要马上采取措施,但一般来说就是没救了。* ^& q/ M9 e6 B
; _1 Z' ]) C0 w- s4 \ K通常情况下拿当前值或者最差值与有效阈值进行对比就能知道一块盘是否工作正常,当然SMART工具会直接代劳。但也存在特例,比如很多HDD的BEh属性定义的阈值是45,也就是设计工作最高温不能超过55℃,但难保不会有偶然一次温度超标,这种阈值的触发就会导致SMART报警,对这种情况的SMART报警就可以视而不见了。
$ X; {7 r: \; K6 M, K ?8 v; a: m1 C" ]5 g# p
以上就是ATA设备的SMART数据结构入门,下面再简单说一说NVMe设备的SMART。
H7 G1 i7 f/ ^& x ?8 Y/ Y
; n T/ t7 O3 c1 }" e& XNVMe设备有不止一个SMART,其中一个是有统一定义的主SMART位于“Log Page Identifiers 02h”,另外的由厂家自行设定,但也是在“Log Page Identifiers”中,比如Intel是“Log Page Identifiers CAh”。+ Y/ j3 Z4 t) o; G
& @; W3 e& N$ n* F' x$ WNVMe的主SMART有512字节长' Z$ B1 [# z( J4 _
5 [4 E7 A5 P* ]
Bytes | 描述 | 0 | 关键警告,每个Bit为1的时候代表触发了某个警报
5 ^$ ?) e9 ]) i2 L7 xBit 0 可用备用块数低于阈值
) }; n0 \* O- C. `4 h4 }3 ABit 1 温度超高或者超低, @9 F! L# P9 U+ `
Bit 2 可靠性失效, t$ n+ g2 } p1 j; V( G
Bit 3 只读模式/ g. I& n% T1 w X& b3 d, ^5 i- y+ V$ R
Bit 4 易失性存储保障措施失效(暂可以理解为外置缓存掉电保护失效)* j% I8 s7 x! o* `0 {" a( E
Bits 5-7 保留 | 2:1 | 温度 | 3 | 可用备用块数百分比 | 4 | 可用备用快数阈值 | 5 | 已用寿命(0起,最大到255) | 31:6 | 保留 | 47:32 | 读取扇区数(1:512000字节) | 63:48 | 写入扇区数(1:512000字节) | 79:64 | 读取指令数 | 95:80 | 写入指令数 | 111:96 | 主控忙碌时间(单位分钟) | 127:112 | 通电周期数 | 143:128 | 通电小时数 | 159:144 | 异常断电次数 | 175:160 | 介质错误数(UECC和CRC错误等) | 191:176 | 错误信息记录(开头)数 | 195:192 | 温度超警时长(单位分钟) | 199:196 | 温度超危时长(单位分钟) | 201:200 | 温度传感器#1 | 203:202 | 温度传感器#2 | 205:204 | 温度传感器#3 | 207:206 | 温度传感器#4 | 209:208 | 温度传感器#5 | 211:210 | 温度传感器#6 | 213:212 | 温度传感器#7 | 215:214 | 温度传感器#8 | 511:256 | 保留 |
' {9 \, r0 x4 D/ _4 Z6 A9 {NVMe的SMART不同于ATA设备,不再有ID、Flag等这种表示,而是由固件根据预设信息自行判断健康状况,并直接在Byte0上给出警告信息。额外的SMART则由厂家自行定义属性及数据结构,详见各家的手册,这里没法说了。 S1 s0 f) O" }) q
+ w5 X# P' r6 L& J7 h) w8 O& v8 ~
正文就到这里结束。
! ^6 V! F# F# L* ~/ V: V ?2 t- `! A" M9 }# y9 d) p
SMART能提供很多信息,我们要读懂它才有利于维护好手中设备,不然就有可能贻误病情造成额外损失,甚至造成身心上的双重负担。当然这也就需要厂家提供准确的信息,至少是不能含糊的信息。现在SMART几乎是摆设的产品有不少,当前值、阈值一片0的产品,这种SMART信息有什么用?虽然ATA设备的SMART没有标准化定义,但连最起码的属性都不设置也没有替代属性(比如端到端错误、重映射/剩余备用块数等)的,这样的产品很难称得上是一个靠谱的产品。无形的数据损失最为可怕。
/ v6 \ D) d9 ?% J( r q& K |
|