< вернуться назад

Скрытые глубины SCSI: SES

Скрытые глубины SCSI: SES
#СХД #storage #SAS #scsi #protocols #SES
14 минут
Скрытые глубины SCSI: SES

Эта статья — завершающее погружение в цикл «Скрытые глубины SCSI», где мы разберём, как работает SES (SCSI Enclosure Services) и какую роль он играет в мониторинге и управлении компонентами СХД. Ранее мы уже рассматривали ключевые аспекты SCSI. В материале «Скрытые глубины SCSI: Persistent Reservations» мы разобрали механизмы координации доступа к устройствам в многосерверных средах, а в «Скрытые глубины SCSI: T10 DIF/DIX» — как обеспечивается защита данных от тихой порчи на уровне блоков. Вместе эти технологии формируют фундамент надёжных и отказоустойчивых систем хранения данных.

SCSI Enclosure Services

В современных системах хранения данных дисковые накопители представляют собой лишь часть общей инфраструктуры. Не менее важным компонентом является аппаратное окружение: дисковые корзины, системы охлаждения, блоки питания, датчики окружающей среды, индикаторы состояния и SAS-экспандеры.

SCSI Enclosure Services (SES) представляет собой стандартизированный механизм мониторинга и управления инфраструктурой дисковых корзин посредством SCSI-команд.

При отсутствии SES хост-система обладает видимостью исключительно накопителей. Реализация SES обеспечивает:

  • Мониторинг температурного режима корзины
  • Контроль работоспособности систем охлаждения
  • Обнаружение присутствия и извлечения накопителей
  • Управление состоянием визуальных индикаторов
  • Контроль состояния источников питания

Протокол SES был разработан в ответ на возросшую сложность внешних дисковых массивов и JBOD-корзин.

На ранних этапах SES представлял собой отдельное SCSI-устройство внутри корзины — отдельный микроконтроллер или даже SES логику на одном из дисков. В современных реализациях SES-процессор обычно интегрирован в чип SAS-экспандера в виде встроенного MIPS или ARM ядра, на котором выполняется SES-микрокод.

┌─────────────────────────────────────┐
│  SAS Expander Chip (PMC/Broadcom)   │
│  ┌───────────────────────────────┐  │
│  │ SAS Routing Logic             │  │
│  │ PHY controllers               │  │
│  │ + MIPS/ARM core (SES firmware)│  │ 
│  └───────────────────────────────┘  │
│  ↕ I2C/SGPIO                        │
└──┼──────────────────────────────────┘
   │
   ├→ LED drivers
   ├→ Temperature sensors
   ├→ Fan controllers
   └→ PSU monitoring

Типовой SAS-домен включает:

  • Инициатор: Хост + HBA. Генерирует SCSI команды
  • Экспандер: коммутатор/маршрутизатор для SAS
  • Конечный устройства: диски
  • SES: логический таргет для управления корзиной

Типовая топология SAS-домена:

┌──────────────┐
│  Initiator   │  (HBA / RAID контроллер)
│  (Host)      │
└──────┬───────┘
       │ SAS Link 
       │
┌──────▼───────────────────────────────┐
│   SAS Expander                       │
│  ┌────────────────────────────────┐  │
│  │ Routing Table                  │  │
│  │ PHY Ports (0-35)               │  │
│  │ SES Logical Target             │  │
│  └────────────────────────────────┘  │
└───┬────┬────┬────┬────┬────┬────┬────┘
    │    │    │    │    │    │    │
    │    │    │    │    │    │    └─────> End Device (Disk)
    │    │    │    │    │    └──────────> End Device (Disk)
    │    │    │    │    └───────────────> End Device (Disk)
    │    │    │    └────────────────────> End Device (Disk)
    │    │    └─────────────────────────> SES Device
    │    └──────────────────────────────> Expander (cascade)
    └──────────────────────────────> Expander (cascade)

Логически SES выглядит очень похоже на диск — у этой службы есть свой SCSI ID на шине, свой WWN, и она отвечает на стандартные команды типа INQUIRY.

#sg_inq /dev/sg1
standard INQUIRY:
  PQual=0  PDT=13  RMB=0  LU_CONG=0  hot_pluggable=0  version=0x05  [SPC-3]
  [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=56 (0x38)   Peripheral device type: enclosure services device
 Vendor identification: AIC 12G
 Product identification: HA Expander
 Product revision level: 1234
 Unit serial number: 500123456789

Работа с SES

Для начала работы с SES необходимо найти адрес устройства — его sg handle (/dev/sgX). Это можно сделать различными способами — через поиск в sysfs, системные утилиты или вендорские инструменты. Проще всего воспользоваться sg_scan из open-source пакета sg3_utils (https://sg.danny.cz/sg/sg3_utils.html), тем более, что он нам все равно еще пригодится. Альтернативно — через lsscsi -g.

В sg_scan легко отличить SES устройство по полю pdev=0xd.

# sg_scan -i
/dev/sg0: scsi5 channel=0 id=0 lun=0 [em]
    AIC 
12G   HA Expander    A001 [rmb=0 cmdq=1 pqual=0 pdev=0xd]
[...]
/dev/sg13: scsi11 channel=0 id=11 lun=0
    SEAGATE   ST6000NM029A      E003 [rmb=0 cmdq=1 pqual=0 pdev=0x0]
/dev/sg14: scsi11 channel=0 id=12 lun=0
    SAMSUNG   MZILT7T6HALA/007  GXA0 [rmb=0 cmdq=1 pqual=0 pdev=0x0]

В lsscsi — по надписи enclosure во второй колонке:

# lsscsi -g
[...]
[1:0:5:0]  disk    SAMSUNG  MZILT1T9HBJR/007 GXA5  /dev/sdq   /dev/sg14
[1:0:1:0]  enclosu AIC 12G  HA Expander      A001  -          /dev/sg0
[...]

В дальнейшем мы будем использовать sg handle /dev/sg0 для работы с этим SES устройством.

Стоит отметить, что если хост подключен к нескольким полкам или нескольким контроллерам одной полки, SES устройств на шине будет больше одного.

Дальше для работы с SES удобно использовать утилиту sg_ses из того же пакета sg3_utils. Она дает самый унифицированный и полный доступ к информации, которую отдает SES служба. Альтернативно, можно пользоваться вендорскими утилитами, поставляемыми в комплекте дисковых полок или HBA-адаптеров или просто искать необходимую информацию в sysfs:

/sys/class/enclosure/
├── 19:0:0:0/
│   ├── device -> ../../../devices/pci.../host19/port-19:0/...
│   ├── components/
│   │   ├── Disk0/  (slot 0)
│   │   │   ├── fault
│   │   │   ├── locate
│   │   │   ├── status
│   │   │   └── type
│   │   ├── Disk1/  (slot 1)
│   │   └── …

Функциональность SES реализована через механизм SCSI Diagnostic Pages — структурированных страниц данных, доступных посредством команд RECEIVE DIAGNOSTIC RESULTS и SEND DIAGNOSTIC, которые и использует внутри себя утилита sg_ses.

Ключевые диагностические страницы

1. Supported Diagnostic Pages (0x00)

Перечисляет все диагностические страницы, поддерживаемые SES данной модели.

Представляет собой первоначальный запрос при инициализации взаимодействия, например:

sg_ses -p0 /dev/sg0

 Supported diagnostic pages:
  Supported Diagnostic Pages [sdp] [0x0]
  Configuration (SES) [cf] [0x1]
  Enclosure Status/Control (SES) [ec,es] [0x2]
  Help Text (SES) [ht] [0x3]
  String In/Out (SES) [str] [0x4]
  Threshold In/Out (SES) [th] [0x5]
  Element Descriptor (SES) [ed] [0x7]
  Additional Element Status (SES-2) [aes] [0xa]
  Download Microcode (SES-2) [dm] [0xe]
  Subenclosure Nickname (SES-2) [snic] [0xf]

2. Configuration Page (0x01)

Содержит описательную информацию о корзине:

  • Количество элементов каждого типа
  • Структура группирования элементов
  • Топологическая схема корзины

Функционирует как технический паспорт устройства.

Configuration diagnostic page:
  number of secondary subenclosures: 0
  generation code: 0x0
  enclosure descriptor list
    Subenclosure identifier: 0 [primary]
      relative ES process id: 1, number of ES processes: 2
      number of type descriptor headers: 11
  type descriptor header and text list
    Element type: Array device slot, subenclosure id: 0
      number of possible elements: 60
      text: Array Slots     
    Element type: Enclosure, subenclosure id: 0
      number of possible elements: 1
      text: Enclosure       
    Element type: Power supply, subenclosure id: 0
      number of possible elements: 2
      text: Power Supply    
    Element type: Cooling, subenclosure id: 0
      number of possible elements: 8
      text: Cooling         
    Element type: Temperature sensor, subenclosure id: 0
      number of possible elements: 86
      text: Temp Sensor     
    Element type: Enclosure services controller, subenclosure id: 0
      number of possible elements: 2
      text: IOM             
    Element type: SAS expander, subenclosure id: 0
      number of possible elements: 6
      text: SAS Expander    
    Element type: SAS connector, subenclosure id: 0
      number of possible elements: 12
      text: SAS Connector   
    Element type: Voltage sensor, subenclosure id: 0
      number of possible elements: 8
      text: Voltage Sensor  
    Element type: Current sensor, subenclosure id: 0
      number of possible elements: 8
      text: Current Sensor  
    Element type: Door, subenclosure id: 0
      number of possible elements: 1
      text: Enclosure Cover 

3. Enclosure Status Page (0x02)

Основная страница мониторинга, предоставляющая:

  • Текущее состояние каждого элемента
  • Флаги неисправностей
  • Индикацию предупреждений (warning) и критических состояний (critical)

Периодически опрашивается системами мониторинга.

4. Enclosure Control Page (0x02, режим записи)

Идентичная структура в режиме управления, позволяющая:

  • Управление состоянием светодиодных индикаторов
  • Переключение режимов работы вентиляторов
  • Инициирование режимов идентификации и индикации неисправностей

5. Download Microcode (0xE)

Страница, при обращении к которой можно посмотреть прогресс/статус обновления микрокода.

Основной рабочей страницей является страница 2 [0x2], через обращение к которой можно получить статус всех доступных элементов, которые видны SES службе, а также управлять такими параметрами, как статус светодиодной индикации (подсветить слот в полке, где нужно заменить диск), питанием устройств (удаленно отключить питание неисправного диска), снять пометку об ошибке диска, поставленную RAID адаптером, после замены.

Пример подсветки слота:

#sg_ses --index=0,1 --set=ident /dev/sg1

Проверка и возврат:

#sg_ses -p 0x2 /dev/sg1

[...]
 Element 1 descriptor:
        Predicted failure=0, Disabled=0, Swap=0, status: OK
        OK=0, Reserved device=0, Hot spare=0, Cons check=0
        In crit array=0, In failed array=0, Rebuild/remap=0, R/R abort=0
        App client bypass A=0, Do not remove=0, Enc bypass A=0, Enc bypass B=0
        Ready to insert=0, RMV=0, Ident=1, Report=0
        App client bypass B=0, Fault sensed=0, Fault reqstd=0, Device off=0
        Bypassed A=0, Bypassed B=0, Dev bypassed A=0, Dev bypassed B=0
[...]
# sg_ses --index=0,1 --clear=ident /dev/sg1

Разграничение функциональности: SES, SMART и NVMe-MI

Важно различать области ответственности различных механизмов:

S.M.A.R.T. Внутреннее состояние конкретного накопителя
SES Инфраструктура дисковой корзины
NVMe-MI Управление для NVMe over PCIe/Fabric

SES не предоставляет информацию об:

  • Уровне износа SSD (wear level)
  • Ошибках носителя (media errors)
  • Состоянии логических блоков

S.M.A.R.T. не предоставляет информацию о:

  • Физическом отсутствии накопителя в слоте
  • Отсутствии питания на слоте
  • Температуре окружающей среды внутри корзины

Заключение

SES представляет собой критически важный, хотя и малозаметный компонент любой дисковой инфраструктуры на базе SAS/SCSI.

Несмотря на редкое упоминание в технической литературе, именно SES обеспечивает управляемость дисковых корзин, создаёт основу для автоматизации эксплуатационных процессов и формирует связующий слой между аппаратной платформой и программным обеспечением.

Отдельно стоит отметить, что имплементации SES сильно отличаются в зависимости от производителя полки/контроллера и от зрелости микрокода. Современные полки от крупных вендоров отлично мониторятся и управляются через SES, но в более простых решениях функционал SES может быть сильно урезан.

Скрытые глубины SCSI: Persistent Reservations

Скрытые глубины SCSI: T10 DIF/DIX

Автор: Олег Ларин

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *
Author
Посетитель сайта

Добавить комментарий

Комментариев пока нет

Другие статьи, которые могут быть полезными

Том (данных) представляет собой именованное пространство, расположенное на пуле. На одном пуле может быть создано несколько томов, имена которых не должны повторяться. Том может быть создан «толстым», сразу занимающим фиксированный...
3975
2
Десятилетие существования стандарта Redfish заметно меняет подход к управлению ИТ-инфраструктурой. Разработанный организацией DMTF (Distributed Management Task Force) как более современная и удобная альтернатива устаревшему стандарту CIM (Common Information Model), Redfish...
370
31
Дедупликация данных, часто называемая просто дедупликацией (deduplication), — это метод сжатия данных, предназначенный для устранения избыточных копий данных. Она широко используется в системах хранения данных (СХД) для уменьшения потребности в...
6481
9