PCEVA,PC绝对领域,探寻真正的电脑知识
开启左侧

一块硬盘的简历——ATA_IDENTIFY_DEVICE信息入门

[复制链接]
nighttob 发表于 2014-8-28 21:20 | 显示全部楼层 |阅读模式
点击数:10575|回复数:26
本帖最后由 nighttob 于 2014-8-28 21:39 编辑

IDENTIFY_DEVICE是一个基本ATA指令,具有256Word长度的信息,包括一块硬盘的型号、序列号、固件版本和所支持的功能等。一个直观的体现就是CDI这样的硬盘工具告诉你的各种硬盘参数信息。这里拿一块老X25-M G2 120G举例

红线上的信息都是由IDENTIFY_DEVICE提供的(型号、固件版本、序列号、传输模式、支持标准、功能、转速)。

CDI软件上所体现的只是IDENTIFY_DEVICE的很小一部分,完整的IDENTIFY_DEVICE信息可以以文本的方式导出(编辑[Edit] ->复制[Copy]),粘贴到记事本上以后应该是这样:
-- IDENTIFY_DEVICE ---------------------------------------------------------
             0       1       2       3       4       5       6       7       8       9
000: 0040 3FFF C837 0010 0000 0000 003F 0000 0000 0000
010: 4356 504F 3031 3334 3030 5859 3038 304A 474E 2020
020: 0000 0000 0000 3243 5631 3032 4D33 494E 5445 4C20
030: 5353 4453 4132 4D30 3830 4732 474E 2020 2020 2020
040: 2020 2020 2020 2020 2020 2020 2020 8010 0000 2F00
050: 4000 0000 0000 0007 3FFF 0010 003F FC10 00FB 0110
060: F8B0 0950 0000 0007 0003 0078 0078 0078 0078 4020
070: 0000 0000 0000 0000 0000 001F 0506 0000 0048 0048
080: 00FC 001A 746B 7D01 6163 7469 BC01 6163 047F 0001
090: 0001 0000 FFFE 0000 0000 0000 0000 0000 0000 0000
100: F8B0 0950 0000 0000 0000 0008 4000 0000 5001 5179
110: 5928 25EB 0000 0000 0000 0000 0000 0000 0000 401C
120: 401C 0000 0000 0000 0000 0000 0000 0000 0029 0000
130: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
140: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
150: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
160: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0001
170: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
180: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
190: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
200: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
210: 0000 0000 0000 0000 0000 0000 0000 0001 0000 0000
220: 0000 0000 101F 0000 0000 0000 0000 0000 0000 0000
230: 0000 0000 0000 0000 0001 01F0 0000 0000 0000 0000
240: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
250: 0000 0000 0000 0000 0000 6AA5

正好是256Word,以16进制表达。但这种表达方式对大多人数来说是乱码,需要将其解释后才能理解(这也是检测工具的意义)。遗憾的是CDI并不具备完整解释IDENTIFY_DEVICE的功能,我们需要使用另外一个常见的硬盘工具——TxBench,来把乱码变成方便一般人阅读的格式。

打开TxBench这个软件,进入"Drive Information"页面,就可以看到这块硬盘的主要信息。

大部分信息跟CDI上的一样,但是下面多了一些功能的检测。除了常见的SMART、NCQ这些以外,还有DIPM、Security,以及没怎么听说过的RZAT和DRAT等功能。下面就带大家找一找,这些功能都“藏”在哪儿,并解释几个不怎么常见的功能。

翻到IDENTIFY DEVICE标签页,这里就用一个友好方式解释之前的乱码了。

从这里我们就能看出,Word 10-19表达的是序列号,Word 23-26表达的是固件版本,Word 27-46表达的是硬盘型号。同样,我们把相应位置的16进制信息,用ASCII码翻译一下,得到的也是同样的结果。但IDENTIFY_DEVICE中表达的文字就这么多,其他都是用1或者0表达知否支持某项功能,或者几个bit代表一个数字。接下来我们就找找上张图中的几个功能。


首先SMART

在Word 82 Bit 0,可以看到后面的信息是1,代表支持。这里解释一下"1 = SMART feature set is support"的含义。就是说,这一Bit如果是1的话,那么支持SMART功能集;如果是0的话就是不支持。后面的也是同理。这种表达方式非常常见。另外要注意的一点就是,这里说的是支持,很多功能不仅要求支持,而且要求启用。SMART功能就是这样,看下面。

Word 85 Bit 0,这里写的是启用SMART功能集。也就是说,对SMART等一些功能来说,不仅需要硬盘自己支持,也要将其启用,才能使用这些功能。这也是为什么在TxBench这个软件里,一些功能在"Support Feature"和"Enabled Feature"里面各有一部分的原因,同理,AIDA64和HD Sentinel的硬盘信息里面也会有类似表达(支持并启用,支持并未启用,不支持)。

跟SMART类似的还有48bit LBA,Word 83 Bit 10 支持,Word 86 Bit 10 启用;APM,Word 83 Bit 3 支持,Word 86 Bit 6 启用;DIPM,Word 78 Bit 3 支持,Word 79 Bit 3 启用;Secuity,Word 82 Bit 1 支持,Word 83 Bit 1 启用;Device Sleep(DevSleep),Word 78 Bit 8 支持,Word 79 Bit 8 启用。

还有一些是只有支持,不由硬盘判断是否启用的功能。有NCQ,Word 76 Bit 8;HIPM,Word 76 Bit 9;Trim,Word 169 Bit 0;RZAT,Word 69 Bit 5;DRAT,Word 69 Bit 14。只有支持的意思就是,硬盘支持这个功能,但是否启用要取决于其他硬件或者软件,或者这是一系列功能的总开关,具体功能的实现要靠下面的子功能。比如NCQ和HIPM就是需要系统硬件(包括BIOS)和操作系统(包含驱动)启用支持,Trim既需要软硬件的支持,同时也是一系列功能的总开关,RZAT和DRAT就是Trim的子功能。


这里说一下Trim、DRAT及RZAT的关系。

这是ACS-3中对这三者的概略性定义。我简单解释一下:
这三者的逻辑关系是,Trim包含DRAT,DRAT包含RZAT。
如果不支持Trim,那么数据不受影响(换句话说就是可恢复,像HDD一样);如果支持Trim但不支持DRAT,那么访问被Trim的数据所在的LBA,每次都可能得到不同的结果;如果支持Trim和DRAT但不支持RZAT,那么访问被Trim数据所在的LBA,每次都会得到相同结果;如果三者都支持,那么访问被Trim数据所在的LBA,每次都会是全0的结果。

其实这就是说Trim过后,原来LBA位置的数据状态。Trim只是让此LBA的数据无效化,但不管再次访问时返回什么结果,因为这个LBA已经不再对应原来的位置了(看不懂的话请补基础知识),而在这个LBA被新数据写入之前,其位置是不确定的,因此每次访问都会得到不同结果。支持DRAT的话,Trim以后的LBA指向的是一个固定的位置,因此在被写入新数据之前,每次访问到的也是同一位置,结果自然也是相同的。而支持RZAT以后,这个LBA位置就直接被全0填充了,也就是最接近于“初始化”的状态。

对基本应用来说,大家只用关注Trim是否支持就可以,当然现在已经没有不支持Trim的SSD了。而对SSD组成的高级RAID(比如RAID 5/6),某些制造商(比如群晖)宣称可以支持Trim,但需要参与的SSD支持DRAT和RZAT。他们实现的具体原理我没去了解过,但一个功能必然是有其作用的,所以制造商有什么独门绝技也是可能的。这就不是本文要讨论的内容了。


再提一下Security。

Security也是一个功能集,里面包含数个子功能,开关在Word 82和Word 83,具体子功能在Word 128。就像这里表明的,支持Security,目前被Security Frozen(安全冻结),还支持Enhanced Security Erase(增强型安全擦除)。这些也是最一般的SSD进入到操作系统以后应该的表现,因为大部分人不会设置安全密码。

去年美光M500上市的时候,出现过因为支持Windows 8的UEFI引导自加密功能,使得Security功能被禁用,导致Word 128直接被无效化(Word 128 = 0000)。这就是总开关被断,后面的子功能当然也就废了。

说到增强型安全擦除,跟一般的安全擦除的区别就是。一般安全擦除是全盘填0或者填1,而增强型安全擦除是全盘随机数填充,当然用随机数填充比填0要更安全一些。

另外,Security功能,包括安全擦除,也不是SSD独家,HDD一样具备此功能。只不过SSD做安全擦除也就是1分钟甚至瞬间,HDD的话就要以小时计算了。


既然说到HDD,那么不得不提一下另外几个比较在意的信息,比如AF(512e)ERC(TLER/CCTL)和Streaming。(这部分换用一块水区标配来说明,由于驱动原因容量识别有问题,但不影响本文内容)

AF,也就是高级格式,模拟512字节扇区,实质上就是一个4KB的扇区模拟成8个512字节的扇区。在IDENTIFY_DEVICE上是这样表达

在Word 106,Bit 13首先告诉你一个物理扇区内包含多个逻辑扇区,是多少个在Bit 3:0。读一下这一项的定义"2^logical sectors per physical sector",翻译过来就是每个物理扇区内有2的x次方个逻辑扇区,x就是后面的值 3。2^3=8,所以说这是一块AF的盘。上面Word 100-103也告诉你了这块硬盘的可用扇区总数(15D50A3B0)16=(5860533168)10=3,000,592,982,016Bytes。

ERC和Streaming在补档的帖子里面也提到过(帖子长,请利用搜索定位)。ERC是SCT指令集中的一项,位于Word 206 Bit 3;Streaming位于Word 84 Bit 4。


这也正是水区标配神奇的地方,明明是最低端的桌面盘,但却支持很多乱七八糟的功能。所以也不能赖淘宝JS们给这货添加各种光环——NAS盘啦,监控盘什么的。

但ERC和Streaming并不是有支持就可以了,还要有对应的时限等诸多附加,这些也是在IDENTIFY_DEVICE里面定义了的,具体位置有兴趣自己翻吧,要说起来就复杂了。

AF、ERC和Streaming也不是HDD所独有的,现在不少SSD也是AF格式,也有的支持ERC和Streaming。当然,支持是支持,还是要看怎么用。


最后说几个杂项。

一开始就提到,硬盘的支持标准和转速也是IDENTIFY_DEVICE提供的,还有怎么区分是HDD还是SSD?答案都在这里

Word 217表示水区标配是一块7200转的HDD(16进制换算到10进制),Word 222表示它支持SATA 3.0。

而ST2000DL003是一块5900转的节能型HDD,也支持SATA 3.0。但这个表达方式有点非主流(旧版本上没有写支持),所以在某些旧版本的检测工具里面,会被认为是Unknown。

到了X25-M这里,Word 217的值是1,意思是非旋转介质,或者说就是固态硬盘。Word 222告诉你这块盘只支持SATA 2.6,毕竟这是C300之前SATA 2.0时代的SSD了。


TxBench这个软件很不错,不但能跑分、看SMART,还能用来查看IDENTIFY_DEVICE信息。但它也有自己的缺憾,那就是版本太老了。虽然这个软件已经能识别ACS-3中的绝大部分功能,但晚于它出现的功能就缺失了,比如SATA rev 3.1(强化电源管理)和未来的SATA rev 3.2(原生M.2和SATAe)。

拿浦科特M5Pro举例

由于TxBench最大只认识SATA rev 3.0,而M5Pro支持SATA rev 3.1,所以判断支持SATA rev 3.1的Bit 6就跑进了未被定义的Reserved里面去了,结果TxBence只会说M5Pro是一块支持SATA rev 3.0的SSD。

不光是TxBench,所有旧版本的硬件信息识别工具,如果不认识信息的话,都只报告自己所能认识的信息。如果说把SATA rev 3.1识别成rev 3.0还算无伤大雅,那么明明买了一块新盘,但某些娱乐软件却报告仅支持SATA rev 2.6/2.5,就会让一些不懂的玩家抓头了。这也是我写这篇帖子的初衷之一。


结语

IDENTIFY_DEVICE是一个非常重要的ATA指令,很多关键信息都要从中获取。但对我们日常使用来说,其存在感远不如SMART。

我当然不是为了纯粹介绍IDENTIFY_DEVICE而写这篇帖子,而是看到有人(包括我自己曾经)被不靠谱的检测工具所愚弄,所以做一个简单的答疑解惑。另外一点,就是让大家知道,CDI里那个方框里,有多有少的字词都是从哪儿来的,便于自己了解自己手中的硬盘。

IDENTIFY_DEVICE里面的信息相当丰富,我不可能从头到尾都说一遍,而且很多信息都需要看解释才能明白,所以这篇帖子只是一个入门。如果有心的话,可以看完整版本。

TxBench是个相当不错的硬盘工具。即使只是做跑分用途,其丰富的可调选项也比已经烂大街的AS SSD和CDM这种简单粗暴型要更灵活可用。同时还具备SE、手动trim、全盘覆写等实用功能。就是因为软件本身比较老,如果用它看SMART的话,准确性不如随时更新的CDI。



附录

IDENTIFY_DEVICE全部内容




















解释一下这些标记的含义。
O/M这一列,M表示这个Word的信息是必备的,O表示这个Word的信息是可有可无的。
S/P这一列,S表示用于串行模式(SATA),P表示用于并行模式(PATA/IDE或者是模拟IDE模式),B表示串行并行皆备,N表示既不是串行也不是并行(比如CF卡)。
F/V这一列,F表示信息不会因为下载微码或者电源重置操作而变化,V表示信息是在设备运行中可变的,X表示是否可变未定义。
由于IDENTIFY_DEVICE是自ATA协议诞生起就具备的指令,从ATA-1到ATA-8,再到现在ACS-4都在起草过程中,期间已经有相当多的指令和功能被淘汰,当然也有新指令和功能被加入其中。已经被淘汰的旧信息所在的位置就被标记为Retired或者Obsolete,而为未来预留的空间则用Reverved占用。还有一些是留给CF卡(协会)和SATA(SATA-IO组织)信息的,这一部分的定义和解释由CFA和SATA-IO提供,所以不在ACS中体现。

最新完整版ACS-3

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 3活跃度 +15 收起 理由
frontwing + 5 赞一个!
红色狂想 + 5 很给力!
iFive + 5 很给力!

查看全部评分

compal_zero 发表于 2014-8-31 23:17 | 显示全部楼层
本帖最后由 compal_zero 于 2014-8-31 23:22 编辑

tool不错,mark下.
1.借贵宝地补充下楼主分析HDD or SSD 以及转速的根据,因为按照ACS来讲不是单纯16进制转10进制

2.楼主关于word 222解释的表述似乎不够严谨,容易引起误解,以ACS的定义来看,这里应该指的是该版本ACS参考或者支持的SATA spec版本(2.0?2.6?3.1 或者说现在的3.2golden版本),但是从帖子来看容易让人误解SATA 3.0为6Gb/s

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 1活跃度 +10 收起 理由
nighttob + 10 感谢补充

查看全部评分

98769876 发表于 2014-8-29 08:26 | 显示全部楼层
本帖最后由 98769876 于 2014-8-29 08:27 编辑

额,话说,这么好的文章,发的时间又那么合适,为什么我还能抢到沙发呢?好像板凳也是我的了……

【编辑】:额,是不是不让灌水啊?你帖子没有说明,我灌了水,不会扣我分吧?发表了帖子才想起来这个原因

点评

技术区帖子都不许灌水  发表于 2014-8-29 08:43
dy4932 发表于 2014-8-30 17:34 | 显示全部楼层
唉,当年没有好好学英语。我看不懂,有没有汉化版本?
红色狂想 发表于 2014-8-30 18:10 | 显示全部楼层
非常有营养,先咬一口日后慢慢消化。顺便问一下,TxBench这个工具只具备读取解析ATA不会修改写入任何信息吧?
frontwing 发表于 2014-8-30 18:19 | 显示全部楼层
Intel SSD Toolbox也有解读IDENTIFY_DEVICE的功能,在主页——驱动器详细信息里
以THNSNJ256GCSU为例,供参考


另外AIDA64可以以友好方式列出盘支持的ATA特性

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

点评

看到mactype了 应该是贴吧那个os x字体包吧  发表于 2014-8-30 20:03

评分

参与人数 1活跃度 +5 收起 理由
nighttob + 5 神马都是浮云

查看全部评分

固特异轮胎 发表于 2014-8-30 19:56 | 显示全部楼层
东芝的这个软件也可以识别,太长了,我就截了一张示意一下

但是只能支持东芝nsnh 和q系列的盘

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
nighttob  楼主| 发表于 2014-8-30 21:00 | 显示全部楼层
frontwing 发表于 2014-8-30 18:19
Intel SSD Toolbox也有解读IDENTIFY_DEVICE的功能,在主页——驱动器详细信息里
以THNSNJ256GCSU为例,供参 ...


你太牛了,居然给截图存下来……
TxBench明明有一个save可以保存为.csv格式……
然后你把序列号和WWN干掉就是了
nighttob  楼主| 发表于 2014-8-30 21:03 | 显示全部楼层
我主楼不提各家官方工具,是因为多少都有应用限制,而TxBench是通用的。
(我手里一堆intel会不知道ssd toolbox里有这个?)
frontwing 发表于 2014-8-30 21:11 | 显示全部楼层
nighttob 发表于 2014-8-30 21:00
你太牛了,居然给截图存下来……
TxBench明明有一个save可以保存为.csv格式……
然后你把序列号和WWN干掉 ...

picpick支持控件滚动,截个图又不费事。
TxBench不认识SATA 3.1我就没试。

nighttob  楼主| 发表于 2014-8-30 21:16 | 显示全部楼层
frontwing 发表于 2014-8-30 21:11
picpick支持控件滚动,截个图又不费事。
TxBench不认识SATA 3.1我就没试。

其实你就算给我256WORD,我也能解得开,大不了查表算就是。
不识别SATA rev 3.1这个问题不算事……

我的主贴后面贴图已经够长了,你这一图又给延长了一倍。
我刚回帖的时候还以为我发帖出错了。
guangyunjian 发表于 2014-8-30 21:45 | 显示全部楼层
nighttob 发表于 2014-8-30 21:16
其实你就算给我256WORD,我也能解得开,大不了查表算就是。
不识别SATA rev 3.1这个问题不算事……

我早想回帖子图片太多,意思意思给个附件或者出处就好。
又多了个。
公司的网根本就别想打开。一直转圈。
nighttob  楼主| 发表于 2014-8-30 21:51 | 显示全部楼层
guangyunjian 发表于 2014-8-30 21:45
我早想回帖子图片太多,意思意思给个附件或者出处就好。
又多了个。
公司的网根本就别想打开。一直转圈。 ...

总有懒人……
原始位置速度更感人
hjf896 发表于 2014-8-30 21:57 | 显示全部楼层
好长的图,技术贴支持一下,留名备查。
compal_zero 发表于 2014-8-31 23:26 | 显示全部楼层
word 76 这里标识是否support SATA 3.0 6Gb/s

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
nighttob  楼主| 发表于 2014-9-1 07:48 | 显示全部楼层
compal_zero 发表于 2014-8-31 23:26
word 76 这里标识是否support SATA 3.0 6Gb/s

传输速率是跟传输协议版本分开的,主贴里面没说,感谢补充。

有些内容展开太多的话,要说的就太多了。本来写的长的帖子就没啥人看……
我这里只是做个入门介绍。
GZ随风 发表于 2014-9-1 10:05 | 显示全部楼层
技术贴,留名慢慢看,感谢楼主分享
imslei 发表于 2014-9-1 11:08 | 显示全部楼层
技术贴,学习一下
小y 发表于 2014-9-1 16:43 | 显示全部楼层
先留名在细看
Aihuil 发表于 2014-9-14 16:32 | 显示全部楼层
技术贴 不知道楼主能不能再写一篇SAS的Inquiry 具体的信息啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部