Скрытые глубины SCSI: часть 3
#protocols #SAS #scsi #SES #Storage #СХД
13 минут
Скрытые глубины SCSI: часть 3

Скрытые глубины SCSI: часть 3

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 может быть сильно урезан.

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

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

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

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

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

FTP (File Transfer Protocol) – протокол передачи файлов по сети, является одним из старейших прикладных протоколов. BAUMSTORAGE поддерживает данный протокол, однако не рекомендует использовать его на постоянной основе из-за проблем...
2425
1
Расширения iSCSI для RDMA (iSER) – это протокол компьютерной сети, который расширяет протокол Internet Small Computer System Interface (iSCSI) для использования удаленного прямого доступа к памяти (RDMA). Использование данного протокола...
3418
1
3526
79
Введение В исследовании Gartner – Magic Quadrant for Distributed File Systems and Object Storage (Published 19 October 2022 – ID G00760026) WEKA была признана среди лучших по “видению” рынка [1]....
3526
79