Smart
smartctl & megaraid:如何為適配器找到正確的設備節點#
我可以使用以下命令列出所有 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。查看原始碼,它似乎需要從 ioctl
SG_GET_SCSI_ID
或SCSI_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。