Я могу перечислить физические диски на всех адаптерах мегарада, используя:
megacli -PDList -aALL
Это отобразит номер адаптера для каждого адаптера, а затем список физических дисков, подключенных к ним.
Отдельные устройства в выводе PDList также имеют идентификатор устройства, который используется для команды smartctl, например. для устройства с идентификатором 3:
smartctl -a -d sat+megaraid,3 /dev/sda
Обе команды используют один и тот же идентификатор устройства, поэтому проблем нет. Но как мы можем правильно сопоставить адаптер # с узлом устройства?
Запуск smartmontools-5.43-1.el6 на CentOS 6. Глядя на исходный код, кажется, что ему нужен номер шины / host_no, полученный из ioctl. SG_GET_SCSI_ID
или SCSI_IOCTL_GET_BUS_NUMBER
на указанном узле устройства. Это тот же номер, который используется как «Адаптер №» в выводе MegaCLI?
На самом деле, в моем случае я, вероятно, мог бы обойтись жестким кодированием в / dev / sda, но я хотел бы знать, есть ли способ лучше.
Бегать smartctl --scan
для печати всех подключенных устройств, включая идентификатор устройства и тип 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
это идентификаторы устройств
Вот как я это делал раньше. Могут быть способы получше.
Получите идентификатор шины PCI для адаптера в MegaCLI:
/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
Итак, HOST = host0.
Теперь найдите цель в этом каталоге хоста
ls /sys/bus/pci/devices/0000\:0${BUS}\:00.0/${HOST}/ | grep target
target0:2:0
Наш целевой идентификатор SCSI - 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)
Если я использую тот же метод для адаптера a1, я получаю номер шины 3, host1 и целевое значение 1: 2: 0, которое сопоставляется с / dev / sdb.
Узел можно найти так:
# megacli -pdlist -a0| grep 'Device Id'
Device Id: 11
Device Id: 12
# smartctl -a -d megaraid,11 /dev/sda