获取SATA磁盘的WWN

时间:2014-02-24 01:31:27

标签: c hard-drive ioctl sata

最近我一直在用硬盘尝试各种各样的东西。现在我被卡住了......

我想得到的是硬盘的串口,型号,版本和WWN。

对于scsi,

所有上述内容都可以通过scsi查询获得。对于SATA驱动器,我使用HDIO_GET_IDENTITY ioctl来获取模型,序列和修订,但它不包括WWN。但是我还没有找到如何为这些驱动器获取WWN ID。任何人都对这方面有一些了解吗?

2 个答案:

答案 0 :(得分:3)

您需要对设备进行特定的Page83查询才能获得 它的wwn以及序列号,型号和修订版。

我在

处覆盖了这个(部分)

https://www.jmcpdotcom.com/~jmcp/WhatIsAGuid.pdf

您需要设置EVPD = 1,页码= 0x83,然后查找指定符类型0x2(EUI-64)或0x3(NAA)。基于EUI-64的指示符包含在SPC-4rev 36表7.8.6.5中,基于NAA的内容包含在SPC-4rev 36表7.8.6.6中。

对于连接SATA的设备,您还应该查看SCSI / ATA转换层规范SAT-3中的第10.3.4节。

SPC4和SAT3均可从http://www.t10.org获得。

答案 1 :(得分:3)

在查看linux / hdreg.h和来自磁盘制造商的一些文档后,我发现信息包含在HDIO_GET_IDENTITY IOCTL中。但它相当模糊。

http://lxr.free-electrons.com/source/include/linux/hdreg.h?v=2.6.32

在第595行,有一些未指明的词。其中4个词包含WWN。你可以这样得到它们:

sprintf(wwnstr,"0x%04x%04x%04x%04x",hd.words104_125[4],hd.words104_125[5],hd.words104_125[6],hd.words104_125[7]);

无论如何,已经注意到可以使用SCSI查询来获取SATA磁盘上的WWN数据。以下是我编写的一个小程序示例,它发送查询并获取数据。

这是一个scsi磁盘,WWN HEX是vpd页面0x83中的偏移8处的WWN,其中包含十六进制数字WNN naa。是同一页面中偏移量为56的字符串!

model:      ST3600057SS     
serial:     3SL1DBA00
revision:   EN03
wnn HEX:    0x5000C500286ACC13
wnn naa.:   0x5000C500286ACC10

但是在SATA磁盘上完成相同的程序将导致:

model:      SAMSUNG HD103UJ 
serial:     S13PJ1DQ403064  
revision:   1AA0
wnn HEX:    0x533133504A314451
wnn naa.:   0x    

如您所见,WWN未指定为字符串。

2 WWN有不同的原因吗?