How to map the MegaRAID VirtualDrive to the OS Path?

執行storcli取得SCSI NAA ID內容,並到/dev/disk/by-id下找對應的WWN,最後根據路徑的實際mapping就可以找到對應的OS PATH。

storcli /call/vall show all

Windows上有幾種作法,目前第一種作法是確定可行,第二種和第三種還在反證中或找明確文件:

  • 與smartctl比對
  • 序號反轉
  • 使用PCI資訊

以下是我的範例:

smartctl

smartctl的輸出中,有個Logical Unit Id會與SCSI NAA ID對應:

序號反轉

0x60030480070a14001dd43d642574735c # SCSI NA ID
030480070a14001dd43d642574735c     # remove 0x60,6為IEEE registered extended format
5c747425643dd41d00140a07800403     # 以byte為單位反轉030480070a14001dd43d642574735c則為序號少開頭兩個0
序號可以到WMI中的Win32_DiskDrive中取得:

假如你是使用diskid32去取序號,則是將030480070a14001dd43d642574735c字串反轉。

PCI

這方法只是推測,假如說LSI Card是在bus且有兩個virtual drive(ID為0與1),在Win32_DiskDrive中的PNPDeviceID如下:

PNPDeviceID: SCSI\DISK&VEN_SMC&PROD_LSI2208\5&25F6E07A&1&010000
PNPDeviceID: SCSI\DISK&VEN_SMC&PROD_LSI2208\5&25F6E07A&1&010100
尾巴的格式可能為1.0.0,也可能為010000;第一個byte應該就是bus,第二個就是fun也就是virtual drive id,第三個不重要省略。這個方法還需要測試與找明確證據。

在windows與liunx上最一致的做法,是藉由storcli與smartctl的比對,去找出VD與OS Path的對應;但要注意smartctl的GPL license與在linux上編譯執行檔參照函示庫的問題。