Smart

smartctl & megaraid:如何為適配器找到正確的設備節點#

  • November 9, 2018

我可以使用以下命令列出所有 megaraid 適配器上的物理驅動器:

megacli -PDList -aALL 

這將為每個適配器顯示一個適配器#,然後列出連接到它們的物理驅動器。

PDList 輸出中的各個設備也有一個用於 smartctl 命令的設備 ID,例如設備 ID 3:

smartctl -a -d sat+megaraid,3 /dev/sda

兩個命令都使用相同的設備 ID,所以沒有問題。但是我們怎樣才能正確地將適配器#映射到設備節點呢?

在 CentOS 6 上執行 smartmontools-5.43-1.el6。查看原始碼,它似乎需要從 ioctlSG_GET_SCSI_IDSCSI_IOCTL_GET_BUS_NUMBER命名設備節點上獲得的匯流排號 / host_no。這與 MegaCLI 輸出中的“適配器#”使用的數字相同嗎?

實際上,在我的情況下,我可能可以將其硬編碼到 /dev/sda,但我想知道是否有更好的方法。

這就是我以前的做法。可能有更好的方法。

從 MegaCLI 獲取適配器的 PCI 匯流排 ID:

/opt/MegaRAID/MegaCli/MegaCli64 -adpgetpciinfo -a0 | grep Bus
Bus Number      : 2

在這種情況下,BUS=2。然後查看該匯流排上的設備的 PCI 表,並查找“hostX”條目:

ls /sys/bus/pci/devices/0000\:0${BUS}\:00.0/ | grep host
host0

因此,主機 = 主機 0。

現在在該主機目錄中查找目標

ls /sys/bus/pci/devices/0000\:0${BUS}\:00.0/${HOST}/ | grep target
target0:2:0

我們的 SCSI 目標 ID 是 0:2:0(主機 0:通道 2:目標 0)。

將 SCSI 目標與 lsscsi 的輸出匹配

# lsscsi 
[0:2:0:0]    disk    LSI      MR9271-8i        3.24  /dev/sda 
[1:2:0:0]    disk    LSI      MR9271-8i        3.24  /dev/sdb 
[2:0:0:0]    disk    ATA      INTEL SSDSC2BA80 5DV1  /dev/sdc

MegaCLI 適配器 a0 對應於 /dev/sda(在這種情況下,0:2:0 是 ~= 0:2:0:0。最後的 0 是 LUN ID)

如果我對適配器 a1 採用相同的方法,我會得到匯流排號 3、host1 和目標值 1:2:0,它映射到 /dev/sdb。

引用自:https://serverfault.com/questions/620019