smartctl & megaraid:如何为适配器找到正确的设备节点#

smartctl & megaraid:如何为适配器找到正确的设备节点#

我可以使用以下命令列出所有 megaraid 适配器上的物理驱动器:

megacli -PDList -aALL 

这将显示每个适配器的适配器号,然后列出连接到它们的物理驱动器。

PDList 输出中的各个设备也有一个设备 ID,用于 smartctl 命令,例如设备 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 来解决,但我想知道是否有更好的方法。

答案1

这是我以前做过的方法。也许还有更好的方法。

从 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、主机 1 和目标值 1:2:0,它映射到 /dev/sdb。

答案2

运行smartctl --scan以打印所有连接的设备,包括设备 ID 和 RAID 类型:

# smartctl  --scan
/dev/sda -d scsi # /dev/sda, SCSI device
/dev/bus/0 -d megaraid,0 # /dev/bus/0 [megaraid_disk_00], SCSI device
/dev/bus/0 -d megaraid,1 # /dev/bus/0 [megaraid_disk_01], SCSI device
/dev/bus/0 -d megaraid,2 # /dev/bus/0 [megaraid_disk_02], SCSI device

另一个输出:

# smartctl  --scan
/dev/sda -d scsi # /dev/sda, SCSI device
/dev/bus/0 -d megaraid,5 # /dev/bus/0 [megaraid_disk_05], SCSI device
/dev/bus/0 -d megaraid,7 # /dev/bus/0 [megaraid_disk_07], SCSI device

这里,megaraid是 RAID 类型,5,7是设备 ID

答案3

可以通过这种方式找到节点:

# megacli -pdlist -a0| grep 'Device Id'
Device Id: 11
Device Id: 12
# smartctl -a -d megaraid,11 /dev/sda

相关内容