ИНФОРМАЦИЯ

Работа с протоколом SES на примере полки Aeon J460 M2

Введение

Общие сведения

Протокол SCSI Enclosure Services (SES) используется в сетях хранения данных построенных на основе протокола Serial Attached SCSI (SAS).

SES протокол позволяет используя специальные команды SCSI обращаться к активным устройствам находящимися на SAS шине. Разумеется, эти устройства должны поддерживать этот протокол.

Note
Управление по этому протоколу относится к т.н. классу in-band, т.е. управляющие команды передаются по той же шине что и данные. Для работы по этому протоколу не требуется дополнительных подключений, кабелей, разъемов и т.п.

К активным устройствам относятся жесткие диски, контроллеры жестких дисков, экспандеры. Последние могут быть выполнены как в форме внешних устройств (например контроллеры дисковых полок или СХД), так и в форме микросхемы установленной на бекплейне сервера. Эти устройства помогают получить доступ к некоторому количеству дополнительных компонентов, как то: вентиляторы, блоки питания, датчики температуры, дисковые корзины и т.п.

В этой статье речь пойдет как раз о возможностях которые предлагает этот протокол для мониторинга сложных устройств хранения.

Инструментарий

Аппаратное обеспечение

В качестве примера будет использована дисковая полка Aeon J460 M2.

Компоненты системы (вид сзади)
Рис. 1. Компоненты системы (вид сзади)

Она содержит:

  • SIM (SAS Interface Module) — два SAS-контроллера ввода/вывода, на каждом из которых расположено четыре SAS-2 порта в формата SFF-8088
  • PSU — два дублированных блока питания с горячей заменой;
  • FAN — четыре сдвоенных вентилятора горячей замены;
  • температурные датчики.

Полка подключается к серверу при помощи внешнего RAID контроллера LSI MegaRAID SAS 9286CV-8e. Особенностью протокола является то,
что его можно использовать вне зависимости от типа используемого контроллера это может быть как RAID контроллер, так и HBA.

Программное обеспечение

Для работы с протоколом SES существует достаточно известный пакет sg3_utils. В своем составе он имеет подробную документацию по использованию и применению утилит, однако примеры в ней исчерпываются довольно простыми случаями и тривиальными устройствами. На сайте есть версии для разных операционных систем в т.ч. и семейство Windows.

В экспериментах использовалась операционная система — Debian Whezzy и пакет sg3-utils (1.33-1), входящий в её состав.

Описание

sg_map

Утилита sg_map используется для просмотра, SCSI-устройств доступных в системе.

# sg_map
/dev/sg0  /dev/sr0
/dev/sg1
/dev/sg2
/dev/sg3
/dev/sg4  /dev/sda

В выводе также отображаются блочные устройства, типа cd-приводов (sr0) и жестких дисков (sda). Нас интересуют устройства не ассоциированные с блочными — sg1, sg2, sg3,

В данный момент в дисковой полке установлен только один контроллер SIM. Если вставить второй контроллер, то ситуация изменится:

# sg_map
/dev/sg0  /dev/sr0
/dev/sg1
/dev/sg2
/dev/sg3
/dev/sg4  /dev/sda
/dev/sg5
/dev/sg6
/dev/sg7

В журнале ядра, появятся соответствующие записи о добавлении новых устройств:

[244487.180529] scsi 5:0:71:0: Enclosure Netberg   JB9 SIM 0     0910 PQ: 0 ANSI: 6
[244487.80869] scsi 5:0:71:0: Attached scsi generic sg5 type 13
[244487.181230] scsi 5:0:72:0: Enclosure Netberg   JB9 ISIM 2    0910 PQ: 0 ANSI: 6
[244487.181511] scsi 5:0:72:0: Attached scsi generic sg6 type 13
[244487.181860] scsi 5:0:73:0: Enclosure Netberg   JB9 ISIM 0    0910 PQ: 0 ANSI: 6
[244487.183337] scsi 5:0:73:0: Attached scsi generic sg7 type 13
[244487.249946] ses 5:0:20:0: Attached Enclosure device
[244487.250000] ses 5:0:45:0: Attached Enclosure device
[244487.250053] ses 5:0:70:0: Attached Enclosure device
[244487.250105] ses 5:0:71:0: Attached Enclosure device
[244487.250155] ses 5:0:72:0: Attached Enclosure device
[244487.250205] ses 5:0:73:0: Attached Enclosure device

sg_inq

sg_inq в самом простом случае позволяет опросить устройство и понять, что это такое и какую информацию может предоставить:

# sg_inq /dev/sg0
standard INQUIRY:
  PQual=0  Device_type=5  RMB=1  version=0x05  [SPC-3]
  [AERC=0]  [TrmTsk=0]  NormACA=1  HiSUP=1  Resp_data_format=2
  SCCS=0  ACC=0  TPGS=0  3PC=0  Protect=0  BQue=0
  EncServ=0  MultiP=0  [MChngr=0]  [ACKREQQ=0]  Addr16=0
  [RelAdr=0]  WBus16=0  Sync=0  Linked=0  [TranDis=0]  CmdQue=0
  [SPI: Clocking=0x0  QAS=0  IUS=0]
    length=96 (0x60)   Peripheral device type: cd/dvd
 Vendor identification: Optiarc
 Product identification: DVD RW AD-7640S
 Product revision level: HX07

Видно, что это оптический привод. Если выполнить эту команду для устройства sg1, то вывод будет несколько иной:

# sg_inq /dev/sg1
standard INQUIRY:
  PQual=0  Device_type=13  RMB=0  version=0x06  [SPC-4]
  [AERC=0]  [TrmTsk=0]  NormACA=0  HiSUP=0  Resp_data_format=2
  SCCS=0  ACC=0  TPGS=0  3PC=0  Protect=0  BQue=0
  EncServ=1  MultiP=0  [MChngr=0]  [ACKREQQ=0]  Addr16=0
  [RelAdr=0]  WBus16=0  Sync=0  Linked=0  [TranDis=0]  CmdQue=1
    length=36 (0x24)   Peripheral device type: enclosure services device
 Vendor identification: Netberg
 Product identification: JB9 SIM 1
 Product revision level: 0910

Это SIM контроллер установленный в дисковой полке.

sg_ses

Получение общих сведений

Для получения более подробной информации используется sg_ses. Запуск без параметров показывает поддерживаемый устройством набор страниц с дополнительной информацией:

# sg_ses /dev/sg1
  Netberg    JB9 SIM 1   0910
Supported diagnostic pages:
  Supported Diagnostic Pages [sdp] [0x0]
  Configuration (SES) [cf] [0x1]
  Enclosure Status/Control (SES) [ec,es] [0x2]
  String In/Out (SES) [str] [0x4]
  Threshold In/Out (SES) [th] [0x5]
  Element Descriptor (SES) [ed] [0x7]
  Additional Element Status (SES-2) [aes] [0xa]
  Supported SES Diagnostic Pages (SES-2) [ssp] [0xd]
  Download Microcode (SES-2) [dm] [0xe]
  Subenclosure Nickname (SES-2) [snic] [0xf]

Указав при помощи параметра -p можно получить доступ к нужной
странице.

Список датчиков

Для начала можно вывести список всех элементов, о которых может сообщать устройство.
Страница 0x7Element Descriptor

c700027748:~# sg_ses -p 0x7 /dev/sg1
  Netberg    JB9 SIM 1   0910
  Primary enclosure logical identifier (hex): 50016360009f263d
Element Descriptor In diagnostic page:
  generation code: 0x0
  element descriptor by type list
    Element type: Array device slot, subenclosure id: 0 [ti=0]
      Overall descriptor: SCSI Device
      Element 0 descriptor: DISK 00
      Element 1 descriptor: DISK 01
      ... ... ... ... ... ...
      Element 11 descriptor: DISK 11
    Element type: Power supply, subenclosure id: 0 [ti=1]
      Overall descriptor: Power Supply
      Element 0 descriptor: Power Supply 00
      Element 1 descriptor: Power Supply 01
    Element type: Cooling, subenclosure id: 0 [ti=2]
      Overall descriptor: Cooling Fan
      Element 0 descriptor: Cooling Fan 00
      Element 1 descriptor: Cooling Fan 01
      Element 2 descriptor: Cooling Fan 02
      Element 3 descriptor: Cooling Fan 03
      Element 4 descriptor: Cooling Fan 04
      Element 5 descriptor: Cooling Fan 05
      Element 6 descriptor: Cooling Fan 06
      Element 7 descriptor: Cooling Fan 07
      Element 8 descriptor: Power Supply Fan 00
      Element 9 descriptor: Power Supply Fan 01
    Element type: Temperature sensor, subenclosure id: 0 [ti=3]
      Overall descriptor: Temperature Sensor
      Element 0 descriptor: Temperature 00
      Element 1 descriptor: Temperature 01
      Element 2 descriptor: Temperature 02
      Element 3 descriptor: Temperature 03
      Element 4 descriptor: Temperature 04
      Element 5 descriptor: Temperature 05
      Element 6 descriptor: Temperature 06
      Element 7 descriptor: Temperature 07
      Element 8 descriptor: Temperature 08
      Element 9 descriptor: Temperature 09
      Element 10 descriptor: Power Supply Temperature 00
      Element 11 descriptor: Power Supply Temperature 01
    Element type: Enclosure services controller electronics, subenclosure id: 0 [ti=4]
      Overall descriptor: EMM
      Element 0 descriptor: SIM 00
      Element 1 descriptor: SIM 01
    Element type: Enclosure, subenclosure id: 0 [ti=5]
      Overall descriptor: Enclosure
      Element 0 descriptor: Enclosure
    Element type: Voltage sensor, subenclosure id: 0 [ti=6]
      Overall descriptor: Voltage Sensor
      Element 0 descriptor: Voltage  3.30V
      Element 1 descriptor: Voltage  5.00V
      Element 2 descriptor: Voltage 12.00V
      Element 3 descriptor: Voltage  3.30V
      Element 4 descriptor: Voltage  5.00V
      Element 5 descriptor: Voltage 12.00V
      Element 6 descriptor: Voltage  3.30V
      Element 7 descriptor: Voltage  5.00V
      Element 8 descriptor: Voltage 12.00V
    Element type: SAS connector, subenclosure id: 0 [ti=7]
      Overall descriptor: SAS Connector
      Element 0 descriptor: HDD Connector 00
      ... ... ... ... ... ...
      Element 10 descriptor: HDD Connector 10
      Element 11 descriptor: HDD Connector 11
      Element 12 descriptor: Host 00
      Element 13 descriptor: Host 01
      Element 14 descriptor: Host 02
      Element 15 descriptor: Host 03
    Element type: SAS expander, subenclosure id: 0 [ti=8]
      Overall descriptor: SAS Expander
      Element 0 descriptor: SAS Expander SIM 1
      Element 1 descriptor: SAS Expander ISIM 3
      Element 2 descriptor: SAS Expander ISIM 1

Вывод говорит сам за себя. Из него можно понять какие устройства может мониторить полка и примерно оценить общую топологию системы.

  • К устройству непосредственно подключены 12 жестких дисков и можно понять статус трея (Array device slot) и порта к которому подключен диск (SAS connector). Видно, что к контроллеру подключены два внутренних модуля (SAS expander) — ISIM.
  • Можно посмотреть состояние блоков питания (Power supply) и вентиляторов (Cooling) — их 10. Полка контролирует отдельно каждую половину сдвоенного вентилятора и внутренние вентиляторы блоков питания.
  • Есть несколько температурных датчиков (Temperature sensor), в т.ч. и в блоках питания (Power Supply Temperature).
  • Видно состояние напряжения цепей питания (Voltage sensor).

Получение значений датчиков

Для получения значений от датчиков нужно воспользоваться страницей 0x2Enclosure Status/Control. Ее вывод по структуре аналогичен странице 0x7, но кроме групп элементов, о которых может рапортовать устройство выводятся и значения конкретных датчиков.

Сам по себе вывод достаточно длинный и при желании можно скачать в виде файла. Ниже приводятся наиболее востребованные примеры.

Вентиляторы
# sg_ses -p 0x2 | grep 'Element type: Cooling' -A 20
Element type: Cooling, subenclosure id: 0 [ti=2]
     Overall descriptor:
       Predicted failure=0, Disabled=0, Swap=0, status: OK
       Ident=0, Hot swap=0, Fail=0, Requested on=0, Off=0
       Actual speed=0 rpm, Fan stopped
     Element 0 descriptor:
       Predicted failure=0, Disabled=0, Swap=0, status: OK
       Ident=0, Hot swap=0, Fail=0, Requested on=0, Off=0
       Actual speed=4500 rpm, Fan at third lowest speed
     Element 1 descriptor:
       Predicted failure=0, Disabled=0, Swap=0, status: OK
       Ident=0, Hot swap=0, Fail=0, Requested on=0, Off=0
       Actual speed=3650 rpm, Fan at third lowest speed
     Element 2 descriptor:
       Predicted failure=0, Disabled=0, Swap=0, status: OK
       Ident=0, Hot swap=0, Fail=0, Requested on=0, Off=0
       Actual speed=4500 rpm, Fan at third lowest speed
     Element 3 descriptor:
       Predicted failure=0, Disabled=0, Swap=0, status: OK
       Ident=0, Hot swap=0, Fail=0, Requested on=0, Off=0
       Actual speed=3900 rpm, Fan at third lowest speed
     ... ... ... ... ... ...

Это значения «половинок» первого и второго вентиляторов.

Блоки питания

Подключено и работают два блока питания:

# sg_ses -p 0x2 /dev/sg1 | grep 'Element type: Power supply' -A 15
Element type: Power supply, subenclosure id: 0 [ti=1]
  Overall descriptor:
    Predicted failure=0, Disabled=0, Swap=0, status: OK
    Ident=0, DC overvoltage=0, DC undervoltage=0, DC overcurrent=0
    Hot swap=0, Fail=0, Requested on=0, Off=0, Overtmp fail=0
    Temperature warn=0, AC fail=0, DC fail=0
  Element 0 descriptor:
    Predicted failure=0, Disabled=0, Swap=0, status: OK
    Ident=0, DC overvoltage=0, DC undervoltage=0, DC overcurrent=0
    Hot swap=0, Fail=0, Requested on=0, Off=0, Overtmp fail=0
    Temperature warn=0, AC fail=0, DC fail=0
  Element 1 descriptor:
    Predicted failure=0, Disabled=0, Swap=0, status: OK
    Ident=0, DC overvoltage=0, DC undervoltage=0, DC overcurrent=0
    Hot swap=0, Fail=0, Requested on=0, Off=0, Overtmp fail=0
    Temperature warn=0, AC fail=0, DC fail=0

Первый блок питания извлечен:

# sg_ses -p 0x2 /dev/sg1 | grep 'Element type: Power supply' -A 15
Element type: Power supply, subenclosure id: 0 [ti=1]
  Overall descriptor:
    Predicted failure=0, Disabled=0, Swap=0, status: Critical
    Ident=0, DC overvoltage=0, DC undervoltage=0, DC overcurrent=0
    Hot swap=0, Fail=0, Requested on=0, Off=0, Overtmp fail=0
    Temperature warn=0, AC fail=0, DC fail=0
  Element 0 descriptor:
    Predicted failure=0, Disabled=0, Swap=0, status: Critical
    Ident=0, DC overvoltage=0, DC undervoltage=0, DC overcurrent=0
    Hot swap=0, Fail=1, Requested on=0, Off=0, Overtmp fail=0
    Temperature warn=0, AC fail=1, DC fail=1
  Element 1 descriptor:
    Predicted failure=0, Disabled=0, Swap=0, status: OK
    Ident=0, DC overvoltage=0, DC undervoltage=0, DC overcurrent=0
    Hot swap=0, Fail=0, Requested on=0, Off=0, Overtmp fail=0
    Temperature warn=0, AC fail=0, DC fail=0
Подключения

Группа SAS connector содержит информацию о подключении SAS-портов в системе. Это может быть как подключение жестких дисков на бекплейн, так и подключение серверов к внешним miniSAS портам полки:

# sg_ses -p 0x2 /dev/sg1 | grep 'Element type: SAS connector' -A 68
Element type: SAS connector, subenclosure id: 0 [ti=7]
  Overall descriptor:
    Predicted failure=0, Disabled=0, Swap=0, status: OK
    Ident=0, No information
    Connector physical link=0x0, Fail=0
  Element 0 descriptor:
    Predicted failure=0, Disabled=0, Swap=0, status: OK
    Ident=0, SAS Drive backplane receptacle (SFF-8482) [max 2 phys]
    Connector physical link=0xff, Fail=0
  ... ... ... ... ... ...
  Element 12 descriptor:
    Predicted failure=0, Disabled=0, Swap=0, status: OK
    Ident=0, Mini SAS 4x receptacle (SFF-8088) [max 4 phys]
    Connector physical link=0xff, Fail=0
  Element 13 descriptor:
    Predicted failure=0, Disabled=0, Swap=0, status: Not installed
    Ident=0, Mini SAS 4x receptacle (SFF-8088) [max 4 phys]
    Connector physical link=0xff, Fail=0
  Element 14 descriptor:
    Predicted failure=0, Disabled=0, Swap=0, status: Not installed
    Ident=0, Mini SAS 4x receptacle (SFF-8088) [max 4 phys]
    Connector physical link=0xff, Fail=0
  Element 15 descriptor:
    Predicted failure=0, Disabled=0, Swap=0, status: Not installed
    Ident=0, Mini SAS 4x receptacle (SFF-8088) [max 4 phys]
    Connector physical link=0xff, Fail=0

Тип разъема SFF-8482 относится к подключению жестких дисков к бекплейну (для примера в выводе оставлен только первый).

Разъем SFF-8088 используется для подключения внешних устройств. В листинге видно, что из четырех портов контроллеров подключен только первый.

Заключение

Протокол SES является промышленным и платформенно-независимым стандартом. С его помощью можно мониторить не только тривиальные численные параметры: частота вращения, вольтаж, температура, но и состояние сложных устройств таких как СХД и дисковые полки.

Следует отметить, что функционал протокола SES не ограничивается мониторингом и предоставляет много функций по управлению SCSI-устройствами непосредственно через саму шину.


НОВОСТИ

Последние новости