我可以使用以下命令列出所有megaraid适配器上的物理驱动器:
megacli -PDList -aALL
这将显示每个适配器的适配器号,然后列出附加到它们的物理驱动器。
PDList输出中的各个设备也具有用于例如设备ID为3的smartctl命令的设备ID:
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表查找该BUS上的设备,并查找“hostX”条目:
ls /sys/bus/pci/devices/0000\:0${BUS}\:00.0/ | grep host host0
所以,HOST = host0。
现在查找该主机目录中的目标
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。
节点可以这样find:
# megacli -pdlist -a0| grep 'Device Id' Device Id: 11 Device Id: 12 # smartctl -a -d megaraid,11 /dev/sda