最後に、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 は vpd ページ 0x83 のオフセット 8 にある WWN で、16 進数の 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 が同じでない理由はありますか?