最近我一直在尝试用硬盘做各种各样的事情。现在我被困住了...
我想得到的是硬盘驱动器的串行,型号,修订版和WWN。
对于 SCSI,以上所有内容都可以通过 SCSI 查询获得。 对于SATA驱动器,我使用HDIO_GET_IDENTITY ioctl来获取模型,串行和修订版,但它不包括WWN。但是,我还没有找到如何获取这些驱动器的WWN id。有人在这方面有所了解吗?
在查看了linux/hdreg.h和磁盘制造商的一些文档之后,我发现这些信息包含在IOCTL HDIO_GET_IDENTITY中。但它相当模糊。
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 十六进制是 VPD 页面中偏移量为 8 的 WWN,0x83十六进制编号的偏移量为 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 不一样有什么原因吗?
您需要对设备进行特定的 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 获得。