2014-02-24 504 views
1

最近我一直在用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

回答

2

最後在查看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是不是有相同的理由?

3

您需要對設備進行特定的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