obtaining WWN of SATA disks
最近我一直在尝试各种关于硬盘的事情。现在我被卡住了...
我想要的是硬盘的序列号、型号、版本和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。你可以这样得到它们:
1 | 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 处的字符串!
1 2 3 4 5 | model: ST3600057SS serial: 3SL1DBA00 revision: EN03 wnn HEX: 0x5000C500286ACC13 wnn naa.: 0x5000C500286ACC10 |
但是在 SATA 磁盘上执行相同的程序将导致:
1 2 3 4 5 | 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 获得。