最近我一直在尝试各种硬盘驱动器。现在我被困住了...
我想得到的是硬盘的序列号、型号、版本和 WWN。
对于 scsi,上述所有内容均可通过 scsi 查询获得。对于 SATA 驱动器,我使用 HDIO_GET_IDENTITY ioctl 来获取型号、序列号和修订版,但它不包括 WWN。但是我还没有找到如何获得这些驱动器的 WWN id。有人对这方面有一些了解吗?
最近我一直在尝试各种硬盘驱动器。现在我被困住了...
我想得到的是硬盘的序列号、型号、版本和 WWN。
对于 scsi,上述所有内容均可通过 scsi 查询获得。对于 SATA 驱动器,我使用 HDIO_GET_IDENTITY ioctl 来获取型号、序列号和修订版,但它不包括 WWN。但是我还没有找到如何获得这些驱动器的 WWN id。有人对这方面有一些了解吗?
最后,在查看 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 是十六进制数字 WNN naa 中 vpd 页 0x83 中偏移量 8 处的 WWN。是同一页中偏移量 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 INQUIRY 以获取其 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获得。