Скрытые глубины 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 может быть сильно урезан.
Добавить комментарий
Комментариев пока нет