获取SATA硬盘的WWN

问题描述:

最近我一直在用harddrives尝试各种各样的东西。现在我卡...获取SATA硬盘的WWN

我想得到的是硬盘驱动器的序列,型号,修订和WWN。

对于scsi以上所有可通过scsi查询获得。对于SATA驱动器,我使用HDIO_GET_IDENTITY ioctl来获取型号,串行和修订版本,但不包括WWN。但是我还没有找到如何让这些驱动器的WWN ID。任何人都有这方面的知识?

+0

另一种方法:尝试使用'ls -l/dev/disk/by-id'的结果。我现在要去吃午饭,也许当我回来时,我可以寻找'ioctl'所需的确切参数。 – starrify

+0

是的,你可以。但我已经集成了udev库。加上并不是所有的软件都支持/ dev/disk/by-id。 – RG337

最后在查看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是WWN在vpd页面0x83中的偏移量为8的十六进制数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,页代码= 0×83,然后寻找一个指示符类型0X2的(EUI-64)或0x3 (NAA)。基于EUI-64的指示符在SPC-4rev36表7.8.6.5中进行了介绍,而基于NAA的指示符则在SPC-4rev36表7.8.6.6中进行了介绍。

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

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

+0

scsi查询似乎不适用于大多数SATA驱动器到达WWN。我用下面的例子描述了它。 – RG337

+0

这是我的意见,第83页查询(12)*应*提供你的Wwn。如果没有,那么我会非常仔细地检查您的SATL实施是否符合标准。我上面提到的信息适用于Solaris。 –

+0

你是正确的,但是看起来在页面后面的wwn字符串与开头的十六进制字节不一样。我已经更新了我的答案!感谢你们对我的帮助 – RG337