Назад | Перейти на главную страницу

smartctl и megaraid: как найти правильный узел устройства для адаптера #

Я могу перечислить физические диски на всех адаптерах мегарада, используя:

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