@ Карта сайта News Автора!

Bog BOS: hardware:  SCSI: архитектурная модель, соединения - SPI и SAS, транспортные протоколы - iSCSI и FCP

Последнее изменение файла: 2024.02.08
Скопировано с www.bog.pp.ru: 2024.03.29

Bog BOS: hardware: SCSI: архитектурная модель, соединения - SPI и SAS, транспортные протоколы - iSCSI и FCP

Интерфейс малых вычислительных систем SCSI (Small Computer System Interface, "скази") разработан в 1981 году фирмами Schugart Associates (SASI) и NCR, утверждён комитетом ANSI X3T9 в 1986 году (SCSI-2 в 1989), разделён на слои в SCSI-3.

В статье описаны:

Архитектурная модель SCSI (SAM)

Архитектурная модель SCSI (SAM, SCSI architecture model) принята в 1995 подкомитетом ANSI T10 (SAM-2, 2002, ISO/IEC 14776-412; SAM-3, 2004, ISO/IEC 14776-413; SAM-4, ISO/IEC 14776-414), призвана обеспечить координацию между стандартами семейства SCSI. Модель определяет следующие уровни протоколов:

При описании используется клиент-серверная модель, в которой клиент называется инициатором, а сервер исполнителем (target). Взаимодействие между клиентом и сервером описывается в терминах удалённого вызова процедур (RPC). Клиент предоставляет входные параметры процедуры, сервер возвращает результат и статус исполнения. Клиент направляет запросы к удалённому серверу с помощью SCSI порта инициатора и подсистемы распределения обслуживания (service delivery subsystem) с указанием сервера и сервиса (без ожидания подтверждения), получает ответ и статус или извещение об ошибке. Совокупность связанных SCSI устройств называется SCSI доменом.

Реализация SCSI протокола в устройстве инициаторе называется SCSI клиентом (application client), каждое устройство инициатор может иметь только одну реализацию SCSI клиента. Адрес клиента определяется адресом устройства.

Реализация SCSI протокола в устройстве исполнителе называется логическим устройством (logical unit). Исполнитель может иметь несколько логических устройств. Логическое устройство реализует функции менеджера задач (очередь команд) и управления устройством (выполнение SCSI команд). Команды управления устройством определяют единицы работы и могут быть управляемы с помощью менеджера задач.

Порт SCSI инициатора обеспечивает обмен между SCSI клиентом и логическим устройством (соединение и транспортный протокол SCSI). Порт SCSI исполнителя обеспечивает обмен между логическим устройством и SCSI клиентом. Клиент независим от используемого транспортного протокола и протокола соединения.

Протокол SCSI является полудуплексным при исполнении одной команды, но при использовании полнодуплексного транспортного протокола инициатор может передавать данные при исполнении одной команды и принимать при исполнении другой.

Единственный способ информирования клиента о состоянии исполнителя является возвращение статуса, может возникать задержка при использовании асинхронного транспортного протокола. Архитектурная модель SCSI не требует синхронности транспортного протокола и упорядоченности выполнения запросов, так что клиент должен быть готов к этому.

Устройство SCSI состоит из минимум одного порта и инициатора или исполнителя или обоих. Исполнитель содержит один маршрутизатор задач на каждый порт, который передаёт приходящие в порт команды и запросы к менеджеру задач в менеджер задач соответствующего логического устройства (устройств). Устройство может иметь порты для разных транспортных протоколов.

Хост или устройство хранения не являются SCSI устройствами, они могут включать несколько SCSI устройств и иногда называются корзинами (enclosure). Например, SCSI корзина может иметь 2 порта и одно логическое устройство. Многопортовое FC HBA может реализовать несколько SCSI клиентов по одному порту на каждого. При программной реализации iSCSI исполнителя на хосте с несколькими сетевыми картами получается одно логическое устройство (включает драйвер SCSI и драйвер iSCSI) и несколько портов.

Подсистема распределения обслуживания объединяет все SCSI порты в SCSI домене, состоит из одного или более соединения, представляется как единый путь передачи запросов и результатов.

Каждый объект (устройство, логическое устройство, порт) должен иметь идентификатор (используется соединением SCSI) и может иметь имя (используется соединением SCSI и транспортным протоколом SCSI).

Некоторые транспортные протоколы требуют наличия имени у каждого устройства. Имя устройства является постоянным и уникальным в рамках одного транспортного протокола. Устройство может иметь только одно имя в рамках одного транспортного протокола. Формат и длина имени определяются транспортным протоколом. Идентификатор устройства не используется при передаче данных (для этого используется идентификатор порта).

Некоторые транспортные протоколы требуют наличия имени у каждого порта. Имя порта является постоянным и уникальным в рамках одного транспортного протокола. Порт может иметь только одно имя в рамках одного транспортного протокола. Формат и длина имени определяются транспортным протоколом.

Идентификатор порта является обязательным. Именно он используется при передаче данных в протоколе соединения SCSI. Формат и длина идентификатора определяются протоколом соединения.

Некоторые транспортные протоколы требуют наличия имени у каждого логического устройства. Имя логического устройства является постоянным и уникальным в рамках одного транспортного протокола. Логическое устройство может иметь только одно имя в рамках одного транспортного протокола. Формат и длина имени определяются транспортным протоколом.

Идентификатор логического устройства является обязательным (logical unit number, LUN). Если исполнитель обеспечивает несколько портов доступа к нескольким логическим устройствам, то для каждого логического устройства назначается уникальный LUN в пределах каждого порта. LUN определены двух типов: плоские (длина и формат определяются транспортным протоколом) и иерархические (до 4 уровней иерархии, 2 байта на каждом уровне, на каждом уровне можно использовать один из 4 предопределённых форматов, общая длина LUN - 8 байт, вместо неиспользуемых уровней иерархии подставляются нули).

Подразумевается безошибочная передача SCSI запросов и ответов. Требуется явное извещение клиентов об ошибках транспортного и соединительного протоколов. Пропавшие пакеты могут пересылаться самостоятельно или с помощью извещения об ошибке протокола верхнего уровня. Дубли пакетов могут отбрасываться самостоятельно или с извещением протокола верхнего уровня или передаваться. Ошибочный кадр может передаваться протоколу верхнего уровня, отбрасываться, отбрасываться с извещением протокола верхнего уровня, отбрасываться с извещением передатчика (передатчик может повторять передачу до достижения максимального количества и/или извещать протокол верхнего уровня). Извещение о доставке может быть явное и неявное, положительное (ACK) или отрицательное (NACK). SAM не требует явного подтверждения, но ожидает ответа на каждую команду. Ошибки передачи должны детектироваться, но реакция протоколов нижнего уровня не требуется. Управление потоком может быть проактивным (предварительная договорённость о размере буфера) и реактивным, между соседними устройствами (device-to-device, buffer-to-buffer, link-level) и конечными устройствами (end-to-end). Упорядоченность доставки может реализовываться на уровне кадров, потоков (обычно операция ввода/вывода отображается на поток), узлов и сети. Если необходимо обеспечить упорядоченность операций ввода/вывода (например, для гарантии консистентности файловой системы), то необходима упорядоченность на уровне узла. Инициатор может контролировать упорядоченность SCSI команд средствами управления очередью и атрибутами задачи (SPC-3).

CDB содержит задание для логического устройства, хранится клиентом до получения извещения о выполнении (невыполнении) вместе с I_T_L_Q (уникальный идентификатор задания), типом задания, статусом выполнения, ответом исполнителя, ссылками на буфера ввода и вывода, CRN, приоритетом, Sense Data.

Параллельное соединение SCSI (SPI): физический уровень

При параллельном соединении (SPI-1 (1992), SPI-2 (1992), SPI-3 (1999, Ultra 3), SPI-4 (2001, Ultra-320), SPI-5) устройства SCSI физически соединяются в виде цепочки (каскад, шина, гирляда, шлейф, daisy-chain), когда каждое устройство имеет два SCSI разъёма для подключения к соседям. При этом электрически и логически все устройства соединены напрямую (разделяемая среда передачи). Пропускная способность делится между устройствами. Задержка передачи является постоянной. Шина данных не делится на передающую и принимающую части (полудуплекс). Можно соединить 2 шины через специальный расширитель (expander, повторитель OSI уровня 1). Расширитель иногда устанавливается для реализации горячего подключения в дисковых корзинах.

Параллельная шина SCSI имеет 2 (3) модификации ширины шины:

Типы приёмопередатчиков (HVD несовместим с другими; одно SE устройство переводит всю шину в режим SE):

Частоты шины SCSI:

Типы сигналов:

Комбинация вариантов SCSI шины даёт такую таблицу:

 Bus Speed (MHz) |       8       16      |Note
---------------------------------------------------
  5              |         5      10     | Old
 10              |        10      20     | Fast
 20              |        20      40     | Fast-20 / Ultra
 40              |        40      80     | Ultra 2 / SPI-2
 40 DDR          |        80     160     | Ultra 3 / Ultra-160 / SPI-3
 80 DDR          |       160     320     | Ultra-320 / SPI-4
160 DDR          |       320     640     | Ultra-640 / SPI-5

По умолчанию, каждое устройство находится в самом медленном режиме: 8 бит, не DDR, асинхронная передача. Инициатор должен согласовать с исполнителем (target) более "быстрые" параметры перед обменом.

Параллельная шина SCSI не была предназначена для горячего подключения устройств: исходный стандарт требовал отключения питания при присоединении нового устройства (как минимум, прекратить выполнение операций и сделать сброс шины).

На каждом конце шины должен находиться оконечный резистор (резисторная сборка, terminator), который уменьшает отражение сигнала на конце кабеля. Терминатор для шины с частотой 10MHz и выше должен быть активным. Устройство в середине цепочки не должно включать терминатор. В современных устройствах терминатор встраивается в каждое устройство и включается или выключается автоматически в зависимости от потребности. Если устройство не имеет встроенного терминатора и является последним в цепочке, то используется внешний терминатор, соответствующий ширине и типу шины.

Типы разъёмов:

Соединение SCSI: уровень данных

SPI не определяет имён устройств и портов, только идентификаторы портов ((SCSI ID). Каждое устройство (включая контроллер) имеет уникальный программируемый идентификатор порта на шине: 3 бита для узкого SCSI (от 0 до 7) и 4 бита для широкого SCSI (от 0 до 15). Адрес устройства может задаваться перемычками или программно (SCSI configured automatically, SCAM, введён в SPI-2, убран в SPI-3). Устройство может быть разбито на логические составляющие, которые также имеют уникальные адреса LUN (от 0 до 7). Полный адрес состоит из идентификатора контроллера SCSI на системной шине, адреса исполнителя и адреса логического устройства исполнителя.

Адрес устройства определяет также приоритет устройства: для узкого SCSI - чем больше адрес, тем выше приоритет; для широкого SCSI: адреса от 0 до 7 точно так же, адреса от 8 до 15 имеют более низкий приоритет. Приоритет используется в алгоритме арбитража при захвате шины. Рекомендуется использовать адрес 7 для SCSI контроллера. Опционально может быть реализован быстрый арбитраж (quick arbitration and selection, QAS) и "честный" режим арбитража (fairness), который не позволяет монополизировать шину высокоприоритетному устройству.

Устройство может быть инициатором (initiator) и/или исполнителем (target). Устройство может быть многозадачным. На шине может быть несколько инициаторов (не стоит надеяться на хорошую поддержку). При инициализации или сбросе шины инициатор собирает информацию о всех имеющихся устройствах выдавая команды TEST UNIT READY и INQUIRY по всем адресам. Каждое устройство возвращает тип устройства (с прямым доступом, с последовательным, SAFTE и др.), тип носителя (съёмный или несъёмный), версия набора команд, адресное пространство (8 или 16), поддерживаемые опции (синхронная передача, LUN), изготовитель, модель, серийный номер. Если устройство поддерживает LUN, то они также опрашиваются.

Режимы передачи:

В любой момент времени шина находится в одном из состояний:

Формат кадра определяется состоянием шины. Для состояния шины DATA в синхронном режиме в дополнению к формату кадра данных (data) определены форматы группа данных (data group) и информация (information unit). В режиме pace в состоянии шины DATA допустимы только кадры информации.

SAS

Набор стандартов SAS (Serial Attached SCSI) включает:

Исполнитель может иметь 2 "узких" порта. Расширитель (expander) фактически представляет собой маршрутизатор с таблицей маршрутизации, выделенными портами для управления расширителем, мостами SATA/STP, встроенным исполнителем для управления корзиной. Устройства, подключённые к одному расширителю, образуют SAS домен. Двухпортовый инициатор (исполнитель) может входить в 2 домена. Допускается каскадирование расширителей, но запрещены циклы и множественные пути.

В SAS-2 было введено разбиение SAS домена на зоны (до 256) для управления доступом, зона устройства определяется номером порта расширителя, доступ между устройствами различных зон определяется таблицей доступа, задаваемой менеджером зон (может подключаться через Ethernet). Первые 8 зон предопределены: устройствам зоны 0 доступны только устройства зоны 1, устройствам зоны 1 доступны все устройства.

Каждый порт и расширитель имеют уникальной 64-битное имя (формат соответствует формату имени FC порта), которые используются в таблицах маршрутизации.

Транспортный протокол SCSI

Транспортные протоколы SCSI: SAS (Serial Attached SCSI) SSP (Serial SCSI Protocol), ATAPI (SCSI поверх ATA), STP (Serial ATA Tunneling Protocol, подключение SATA устройств к SAS HBA через расширитель), SMP (Serial Management Protocol, поддержка расширителей SAS), FCP (SCSI поверх Fibre Channel) и iSCSI (SCSI поверх TCP/IP).

Транспортный протокол SCSI не используется для SPI.

SAS SSP

Транспортный протокол SAS (Serial Attached SCSI) SSP (Serial SCSI Protocol) является дуплексным. Перед обменом требуется установление соединения (SATA не требует установления соединения). Кадр состоит из примитива SOF (Start Of Frame), двойных слов с данными и EOF. Ответом на каждый кадр является примитив ACK или NAK. Управление потоком на основе кредитов (как в FC), примитив RRDY. SSP кадр состоит (аналогично FC) из заголовка (24 байта), данных (до 1024 байт), заполнителя (от 0 до 2 байт), CRC (4 байта).

Internet SCSI

Транспортный протокол iSCSI принят в 2004 году (RFC 3720) и описывает блочный обмен между SCSI инициатором и исполнителем по TCP/IP. При этом могут использоваться все обычные услуги TCP/IP (DNS, IPSec и др.). Обычно используется порт TCP/3260.

В протоколе iSCSI имеются соответствия именам SCSI устройств (называются именами узлов iSCSI), именам портов и идентификаторам портов. Типы адресов узлов iSCSI (каждое имя узла начинается с идентификатора типа, за которым записывается точка, далее в зависимости от типа; стандарт RFC 3720 требует глобальной уникальности имён):

Синонимы (alias) имён узлов используются для облегчения восприятия человеком. Синонимы не используются для аутентификации и авторизации (и вообще не используются внутри протокола).

В качестве имени и идентификатора порта iSCSI используется одна и та же глобально уникальная строка, которая не определяет маршрут доступа. Для получения маршрута используется понятие сетевого портала (network portal) - интерфейс (ethernet или любой другой) с IP адресом (и номером TCP порта). Адрес портала используется для передачи пакетов, а идентификатор порта как конечная точка сессии, когда пакет уже достиг конечного устройства. Одно исполнительное устройство может иметь несколько порталов, некоторые из которых могут объединяться в портальные группы (определяются TPGT - target portal group tag). Имена (они же идентификаторы) портов записываются по разному для инициаторов и исполнителей. Имя порта инициатора записывается в виде имени узла, запятой, буквы "i", запятой и идентификатора сессии (ISID, записывается в виде шестнадцатеричного числа, 6 байт). Имя порта исполнителя записывается в виде имени узла, запятой, буквы "t", запятой и TPGT (записывается в виде шестнадцатеричного числа, 2 байта). Все порталы внутри группы представляют один порт. Сессия между портами определяется парой идентификаторов портов, и между портами не может быть двух сессий. Включение ISID в идентификатор порта инициатора позволяет устанавливать несколько сессий между устройствами. Исполнитель при создании сессии создаёт TSIH - идентификатор сессии исполнителя (target session identifying handle, 2 байта). Варианты форматов SSID (необходимо обеспечить согласованное использование оборудованием и программами, тип задаётся в первых 2 битах):

Поиск устройств:

Типы сессий: поиск (discovery) и нормальная. Каждая сессия начинается с регистрации (инициатор сообщает своё имя, синоним, имя желаемого исполнителя; получает все алиасы, сетевые адреса, порты и TPGT исполнителя). Обмен командами SCSI может производиться только в нормальной сессии. Нормальная сессия может использовать несколько TCP соединений (Connection Identifier, CID) с использованием нескольких порталов для балансировки нагрузки и/или увеличения надёжности. Балансировка нагрузки возможна с установлением нескольких сессий между инициатором и исполнителем (требуется реализация multipath в слое между SCSI и iSCSI). Возможно восстановление разорванного соединения с точки разрыва. Для ускорения работы может использоваться передача порции данных в одном блоке с командой SCSI (immediate data) или передача блока данных до получения подтверждения о готовности исполнителя (unsolicited data). Каждая сессия состоит из 2 фаз: фаза регистрации (login) и рабочая фаза (full feature). В свою очередь фаза регистрации происходит в 2 этапа: согласование параметров безопасности и согласование рабочих параметров. Исполнитель на запрос регистрации может послать иницатора в другое место (redirect) или известить об ошибке. Во время рабочей фазы инициатор может передавать iSCSI команды (Logout), SCSI команды и данные. Некоторые рабочие параметры могут пересогласовываться во время рабочей фазы.

Рабочие параметры: поддержка встроенных в команду данных (ImmediateData, да), поддержка досрочной передачи данных (unsolicited data, InitialR2T, нет), наличие и тип контрольной суммы заголовков пакетов и данных (None, CRC32C), минимальная и максимальная версия протокола, максимальное число соединений в сессии (1), сколько времени ждать перед закрытием сбойнувшего соединения (DefaultTime2Wait, 2 сек), скоро времени ждать восстановления соединения (DefaultTime2Retain, 20 мекунд), требуется упорядоченная передача кадров в последовательности (DataPDUInOrder, да), требуется упорядоченная передача последовательностей (DataSequenceInOrder, да), обработка ошибок (ErrorRecoveryLevel, 2), методика определения границ кадров (OFMarker, IFMarker, OFMarkInt, IFMarkInt), размер очереди команд в сессии (MaxCmdSN), параметры протокола управления потоком: максимальный размер передачи от инициатора без подтверждения (MaxBurstLength, 262144), MaxOutstandingR2T, MaxRecvDataSegmentLength (8192), FirstBurstLength (65536).

Каждой несрочной SCSI команде присваивается последовательный номер (iSCSI Command Sequence Number, CmdSN, уникален внутри сессии), блоку данных свой номер (Data Sequence Number, DataSN, нумеруются внутри последовательности) и ответу - свой (Status Sequence Number, StatSN, уникален внутри соединения).

Пакет iSCSI состоит из базового заголовка (basic header segment, BHS, 48 байт), опционального дополнительного заголовка (additional header segments, AHS), опциональноопциональной контрольной суммы заголовка (header-digest), опционального блока данных и опциональной контрольной суммы данных (data-digest). Базовый заголовок определяет тип пакета, срочность исполнения (I, immediate delivery), наличие продолжения (F, final), этикетка задания (задание или последовательность - объединение SCSI команд для исполнения одного прикладного запроса; ITT, Initiator Task Tag, выдаётся инициатором для при досрочной передаче; TTT, Target Transfer Tag, выдаётся исполнителем при подтверждении готовности). Типы пакетов: NOP туда и обратно, SCSI команда и ответ (команда доставлена успешно или нет, статус выполнения команды), запрос управления задачами SCSI (TMF) и ответ, запрос регистрации и ответ, запрос текста и ответ (пересогласование рабочих параметров), данные туда и обратно, запрос разрыва соединения и ответ, запрос избирательного подтверждения или передачи данных или подтверждение от инициатора (SNACK), готовность принять данные от исполнителя (R2T, Recovery R2T), асинхронное сообщение от исполнителя, отказ (reject) от исполнителя.

Команды управления задачами:

  1. ABORT TASK (прервать указанную задачу)
  2. ABORT TASK SET (прервать все команды сессии)
  3. CLEAR ACA (прервать все команды с атрибутом ACA)
  4. CLEAR TASK SET (прервать все команды с полем task set type (TST) в SCSI Control Mode Page
  5. LOGICAL UNIT RESET (прервать все задачи, очистить все ACA, освободить все ресурсы, вернуть LUN в состояние по умолчанию и быть готовым (Unit Attention)
  6. TARGET WARM RESET (менеджер очереди задач для LUN 0 сбрасывает все LUN, доступные через данный порт; накладываются права доступа SCSI и iSCSI)
  7. TARGET COLD RESET (в дополнение закрываются все соединения через этот порт; накладываются права доступа только iSCSI)
  8. TASK REASSIGN (переключить задачу на соединение, с которого пришёл запрос)

Управление потоком при чтении обеспечивается прикладным уровнем SCSI. Управление потоком при записи обеспечивается согласованием максимального размера передачи при регистрации (MaxBurstLength) и при отправке пакета готовности от исполнителя (R2T).

Проблема обработки кадров с ошибками контрольной суммы: выбросив кадр, необходимо определить его границы (кадры имеют переменную длину, заголовок утерян, а TCP не разбивает поток на кадры). Типовой алгоритм - fixed interval markers (FIM) - в TCP поток регулярно вставляются 8-байтные маркеры.

Классы обработки ошибок и восстановления (отдельно по типам ошибок):

При установлении сессии возможна двухсторонняя аутентификация: открытым текстом, SRP (RFC 2945), Kerberos V5 (RFC 4120), SPKM (Simple Public-Key GSS-API Mechanism, RFC 2025), CHAP (RFC 1994). Конфиденциальность и целостность обеспечиваются с помощью IPSec (опционально). Можно использовать домены iSNS и зоны SLP для скрытия iSCSI устройств от посторонних. Подробности в RFC 3723 (Securing Block Storage Protocols over IP).

iSCSI шлюз преобразует iSCSI запрос от инициатора в FCP обращение к Fibre Channel устройству хранения.

Инициатор iSCSI в Linux (Linux-iSCSI)

Реализация инициатора iSCSI - Linux-iSCSI (iscsi-sfnet) - состоит из модулей ядра, которые используются для реализации критических к скорости выполнения функций (read/write), и сервисов и утилит в пространстве пользователя, реализующих управляющие функции (поиск, регистрация, управление сессией и соединением, обработка ошибок), пакет iscsi-initiator-utils. Поддерживается аутентификация CHAP (в обе стороны), управление потоком R2T, multi-path (драйвер самостоятельно обнаруживает все доступные IP адреса и устанавливает все возможные сессии), уровень восстановления ошибок - 0, асинхронное извещение о изменениях портала и исполнителя (?). Используется в RHEL 4.

Модули ядра:

Сервис iscsi реализует поиск исполнителей и LUN, управление сессиями, регистрацию, отображение на SCSI устройства (/dev/sdX), интерфейс с scsi_transport_iscsi (netlink) и утилитами управления (/dev/iscsictl; 254, 0). На каждое соединение запускается дочерний процесс, следящий за его состоянием. По завершении соединения соответствующий процесс завершается. При завершении последнего "следящего" процесса завершается и основной процесс. Имя инициатора задаётся в файле /etc/initiatorname.iscsi при первом запуске. Настройки - в файле /etc/iscsi.conf. Номер процесса записывается в /var/run/iscsid.pid (сигналы: SIGTERM - завершение работы, SIGHUP - заново произвести поиск исполнителей и LUN; при измении /etc/iscsi.conf лучше перезапустить сервис). Сервис отказывается удалять используемые устройства при остановке. Для монтирования файловых систем на iscsi рекомендуется использовать опцию _netdev. Каждый исполнитель получает очередной HostID (может изменяться при перезагрузке), BusID и TargetID всегда равны нулю, LUN назначается исполнителем (инициатор воспринимает от 0 до 255). Привязка между именами устройств (/dev/sda) и LUN исполнителя - динамическая, для опознания логических томов рекомендуется использовать udev и "scsi_id -g -p 0x80 -s /block/sdc" ("scsi_id -g -p 0x83 -s /block/sdc"). Возможен перезапуск (service iscsi reload) без остановки обслуживания (обнаруживаются новые соединения, но параметры существующих соединений не изменяются). Журнал в /var/log/iscsi.log (пуст). Ключи демона (рекомендуется задавать в /etc/sysconfig/iscsi):

Файл настройки (/etc/iscsi.conf) используется при запуске iscsi для поиска исполнителей и установки параметров. Формат файла - построчный. Комментарии начинаются с символа '#'. Параметры могут быть глобальными (до первого DiscoveryAddress, TargetName, Subnet, SLP) или относиться к конкретному адресу (после DiscoveryAddress), исполнителю (после TargetName) или подсети (после Subnet). Глобальные параметры записываются с первой колонки, остальные - с отступом. Параметры:

Возможно управление через sysfs

Утилита iscsi-ls выдаёт информацию об обнаруженных исполнителях (имя iqn, синоним, HostID, BusID (0), TargetID (0), адрес портала (IP, порт, номер сессии), состояние сессии, идентификатор сессии (SID и TSIH). Ключи:

Утилита iscsi-device - проверяет, является ли указанное устройство iSCSI

Утилита iscsi-iname - генерация уникального имени инициатора, каждый раз новое

Утилита iscsi-kill-session - прекращает сессию с указанным хостом

Утилита iscsi-rescan сканирует известные исполнители на новые LUN (ключ -i позволяет задать сканируемый HostID). Осторожно: все устройства удаляются и создаются заново

Рекомендуемые параметры для dm-multipath:

  ConnFailTimeout=90
  LoginTimeout=30
  ActiveTimeout=5
  PingTimeout=15

При реконфигурации хранилища необходимо:

Инициатор iSCSI в Linux (Open-iSCSI)

Реализация инициатора iSCSI - Open-iSCSI - состоит из модулей ядра, которые используются для реализации критических к скорости выполнения функций (read/write), и сервисов и утилит в пространстве пользователя (пакет iscsi-initiator-utils), реализующих управляющие функции (поиск, регистрация, управление сессией и соединением, обработка ошибок). Интерфейс между ними реализован с помощью netlink. Используется в RHEL 5 и 6 и 7.

Модули ядра:

Сервис iscsid реализует управление сессиями, регистрацию, интерфейс с scsi_transport_iscsi (netlink) и утилитами управления (сокет). Ключи:

Утилита iscsiadm реализует функции поиска (discovery), использует iscsid для регистрации и управления сессиями, ведёт базу данных исполнителей и сессий (/var/lib/iscsi/). Операции, ограниченные работой с содержимым БД, не требуют наличия сервиса iscsid. В документации сказано, что формат БД - DBM, однако в реальности там лежат текстовые файлы:

Утилита iscsiadm работает с узлами (порталами, --targetname/--portal), сессиями, соединениями и результатами поиска. Режим работы задаётся ключом "-m" ("--mode")

Конфигурационный файл (по умолчанию /etc/iscsi/iscsid.conf) содержит значения по умолчанию для записей в базе данных. Изменения в конфигурационном файле не влияют на уже существующие записи в базе данных. Некоторые параметры (после установки CHAP надо очистить БД и заново провести поиск):

iscsistart -?, iscsi-iname - вывести имя инициатора iscsi.

Сервис iscsi - запускает сервис iscsid и регистрируется в автоматическом режиме на всех исполнителях, которые есть в БД.

Пример:

# задание имени инициатора
vim /etc/iscsi/initiatorname.iscsi

# настройка параметров iscsiadm
vim /etc/iscsi/iscsid.conf

# запуск демона
service iscsid start

# поиск исполнителей на портале
iscsiadm -m discovery --type=sendtargets --portal=IP-адрес

IP-адрес:3260,1 iqn.2006-03.ru.korund-m:t126.t04

# привязка
iscsiadm -m node --targetname iqn.2006-03.ru.korund-m:t126.t04 [--portal t126] --login

Login session [iface: default, target: iqn.2006-03.ru.korund-m:t126.t04, portal: IP-адрес,3260]

Loading iSCSI transport class v2.0-724.
iscsi: registered transport (tcp)
iscsi: registered transport (iser)
scsi9 : iSCSI Initiator over TCP/IP
  Vendor: IET       Model: Controler         Rev: 0001
  Type:   RAID                               ANSI SCSI revision: 05
scsi 9:0:0:0: Attached scsi generic sg4 type 12
  Vendor: t126      Model: iSCSIt04Lib       Rev: 0001
  Type:   Direct-Access                      ANSI SCSI revision: 05
SCSI device sdd: 1171874816 512-byte hdwr sectors (600000 MB)
sdd: Write Protect is off
sdd: Mode Sense: 77 00 00 08
SCSI device sdd: drive cache: write back
SCSI device sdd: 1171874816 512-byte hdwr sectors (600000 MB)
sdd: Write Protect is off
sdd: Mode Sense: 77 00 00 08
SCSI device sdd: drive cache: write back
 sdd: unknown partition table
sd 9:0:0:1: Attached scsi disk sdd
sd 9:0:0:1: Attached scsi generic sg5 type 0

iscsiadm -m discovery -P 2

SENDTARGETS:
DiscoveryAddress: t126,3260
    Target: iqn.2006-03.ru.korund-m:t126.t04
        Portal: 10.101.0.126:3260,1
           Iface Name: default

iscsiadm -m node -P 1

Target: iqn.2006-03.ru.korund-m:t126.t04
        Portal: 10.101.0.126:3260,1
                Iface Name: default

iscsiadm -m node -P 1 --op show

node.name = iqn.2006-03.ru.korund-m:t126.t04
node.tpgt = 1
node.startup = manual
iface.hwaddress = default
iface.iscsi_ifacename = default
iface.net_ifacename = default
iface.transport_name = tcp
node.discovery_address = t126
node.discovery_port = 3260
node.discovery_type = send_targets
node.session.initial_cmdsn = 0
node.session.initial_login_retry_max = 4
node.session.cmds_max = 128
node.session.queue_depth = 32
node.session.auth.authmethod = CHAP
node.session.auth.username = XXX
node.session.auth.password = ********
node.session.auth.username_in = 
node.session.auth.password_in = 
node.session.timeo.replacement_timeout = 120
node.session.err_timeo.abort_timeout = 15
node.session.err_timeo.lu_reset_timeout = 30
node.session.err_timeo.host_reset_timeout = 60
node.session.iscsi.FastAbort = Yes
node.session.iscsi.InitialR2T = No
node.session.iscsi.ImmediateData = Yes
node.session.iscsi.FirstBurstLength = 262144
node.session.iscsi.MaxBurstLength = 16776192
node.session.iscsi.DefaultTime2Retain = 0
node.session.iscsi.DefaultTime2Wait = 2
node.session.iscsi.MaxConnections = 1
node.session.iscsi.MaxOutstandingR2T = 1
node.session.iscsi.ERL = 0
node.conn[0].address = 10.101.0.126
node.conn[0].port = 3260
node.conn[0].startup = manual
node.conn[0].tcp.window_size = 524288
node.conn[0].tcp.type_of_service = 0
node.conn[0].timeo.logout_timeout = 15
node.conn[0].timeo.login_timeout = 15
node.conn[0].timeo.auth_timeout = 45
node.conn[0].timeo.noop_out_interval = 5
node.conn[0].timeo.noop_out_timeout = 5
node.conn[0].iscsi.MaxRecvDataSegmentLength = 131072
node.conn[0].iscsi.HeaderDigest = CRC32C,None
node.conn[0].iscsi.IFMarker = No
node.conn[0].iscsi.OFMarker = No

iscsiadm -m session -P 2

iSCSI Transport Class version 2.0-724
iscsiadm version 2.0-868
Target: iqn.2006-03.ru.korund-m:t126.t04
        Current Portal: 10.101.0.126:3260,1
        Persistent Portal: 10.101.0.126:3260,1
                **********
                Interface:
                **********
                Iface Name: default
                Iface Transport: tcp
                Iface Initiatorname: iqn.2006-03.ru.korund-m:t04
                Iface IPaddress: 10.101.0.4
                Iface HWaddress: default
                Iface Netdev: default
                SID: 12
                iSCSI Connection State: LOGGED IN
                iSCSI Session State: Unknown
                Internal iscsid Session State: NO CHANGE
                ************************
                Negotiated iSCSI params:
                ************************
                HeaderDigest: CRC32C
                DataDigest: None
                MaxRecvDataSegmentLength: 131072
                MaxXmitDataSegmentLength: 8192
                FirstBurstLength: 65536
                MaxBurstLength: 262144
                ImmediateData: Yes
                InitialR2T: Yes
                MaxOutstandingR2T: 1


# создание таблицы разделов и прочего
fdisk /dev/`scsi_disk_by_name.sh iSCSIt04Lib`
mke2fs -j -L Lib -m 0 -E stride=32,resize=4026531840 -v /dev/`scsi_disk_by_name.sh iSCSIt04Lib`1
mount /dev/`scsi_disk_by_name.sh iSCSIt04Lib`1 /mnt
/usr/sbin/bonnie++ -d /mnt/temp -s 8000 -n 0 -f

Version  1.03       ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
              8000M           48200  18 21785   6           22670   2 292.7   1

# подозрительно медленное чтение
#  попробовал поменять настройки исполнителя, не помогло
#   HeaderDigest=None
#   MaxRecvDataSegmentLength=262144
#   MaxXmitDataSegmentLength=262144
#   FirstBurstLength=262144
#   MaxBurstLength=16776192
#   InitialR2T=No

Version  1.03       ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
              8000M           56069  20 17215   4           24505   2 292.2   1

# отвязать всех
iscsiadm -m node -u

Поддержка установки на iSCSI и загрузки с iSCSI появилась в RHEL 5.1 (QLogic qla4xxx или программная реализация open-iscsi со специальным BIOS или PXE).

tgt - Linux target framework

Начальная поддержка (Technology Preview) iSCSI исполнителя STGT появилась в RHEL 5.1/5.2 в составе Linux target framework (tgt, пакет scsi-target-utils, срез от 2007.06.20). Проект tgt представляет собой оболочку (framework) для разработки различных SCSI исполнителей (iSCSI, iSER (Infiniband, RDMA), несколько других в процессе разработки). Включён в ядро 2.6.20. Основное отличие от SCST состоит в том, что основная функциональность вынесена из ядра на уровень пользовательских процессов. Разработка началась после неудачной попытки включить IET (iSCSI Enterprise target) в ядро.

Состоит из дополнительных модулей ядра (для iscsi не нужны), сервиса tgtd (один на все исполнители) и управляющей утилиты tgtadm. tgtadm и tgtd общаются через управляющий сокет. tgtd взаимодействует с tgtcore в промежуточном уровне SCSI ядра Linux (SCSI Mid Layer) через netlink. Определены два типа объектов: исполнитель и устройство. Исполнитель (target) в терминах tgt представляет собой устройство исполнитель SCSI и привязывается к порталам в терминологии tgt (порты SCSI), а устройство в терминах tgt - это LUN. Перед началом работы необходимо создать экземпляр исполнителя и экземпляр устройства, привязав их к драйверу HBA или порту iSCSI. Все объекты независимы от транспортного протокола. Устройством tgt может быть не только SCSI диск, но любое блочное устройство (SCSI диск, ATA диск, SATA диск, device mapper, md) и обычный файл. tgt может эмулировать выполнение SCSI команд на виртуальном устройстве и может напрямую передавать SCSI команды (passthrough), что позволяет создавать мосты, связывающие различные технологии SAN (storage bridge). В частности, будет рассмотрено создание моста iSCSI-FC, который позволяет подключать новых клиентов к Fibre Channel хранилищу с помощью iSCSI, что позволяет съэкономить на покупке дополнительных FC HBA.

Сервис tgtd управляется стандартными для Red Hat утилитами chkconfig и service.

Утилита tgtadm позволяет

После подключения:

на стороне инициатора

Host: scsi17 Channel: 00 Id: 00 Lun: 00
  Vendor: IET      Model: Controler        Rev: 0001
  Type:   RAID                             ANSI SCSI revision: 05
Host: scsi17 Channel: 00 Id: 00 Lun: 01
  Vendor: IET      Model: VIRTUAL-DISK     Rev: 0001
  Type:   Direct-Access                    ANSI SCSI revision: 05
Host: scsi17 Channel: 00 Id: 00 Lun: 02
  Vendor: IET      Model: VIRTUAL-DISK     Rev: 0001
  Type:   Direct-Access                    ANSI SCSI revision: 05

на стороне исполнителя:

tgtadm --lld iscsi  --mode target --op show

Target 1: iqn.2006-03.ru.korund-m:t126.t04
    System information:
        Driver: iscsi
        Status: running
    I_T nexus information:
        I_T nexus: 4
            Initiator: iqn.1994-05.com.redhat:7095129bc3a
            Connection: 0
                IP Address: 10.101.0.4
    LUN information:
        LUN: 0
            Type: controller
            SCSI ID: deadbeaf1:0
            SCSI SN: beaf10
            Size: 0
            Backing store: No backing store
        LUN: 1
            Type: disk
            SCSI ID: deadbeaf1:1
            SCSI SN: beaf11
            Size: 93G
            Backing store: /dev/sdf
        LUN: 2
            Type: disk
            SCSI ID: deadbeaf1:2
            SCSI SN: beaf12
            Size: 93G
            Backing store: /dev/sdc
    Account information:
    ACL information:
        10.101.0.4

tgtadm --lld iscsi  --mode session --op show --tid 1 --sid 4

MaxRecvDataSegmentLength=8192
MaxXmitDataSegmentLength=8192
HeaderDigest=CRC32C
DataDigest=None
InitialR2T=Yes
MaxOutstandingR2T=1
ImmediateData=Yes
FirstBurstLength=65536
MaxBurstLength=262144
DataPDUInOrder=Yes
DataSequenceInOrder=Yes
ErrorRecoveryLevel=0
IFMarker=No
OFMarker=No
DefaultTime2Wait=2
DefaultTime2Retain=0
OFMarkInt=Reject
IFMarkInt=Reject
MaxConnections=1

iSNS сервер

iSNS сервер (пакет isns-utils) появился в RHEL 5.2.

FCP

Транспортный протокол FCP (Fibre Channel Protocol, ANSI T10 FCP-3) принят ANSI T10 в 1996 году и описывает блочный обмен между SCSI инициатором и исполнителем по сети Fibre Channel. С точки зрения FC стандартов является протоколом уровня FC-4 - настройка протокола верхнего уровня (ULP) на протокол уровня FC-2, т.е. не добавляет свой заголовок к пакету данных протокола верхнего уровня (SCSI-3), а описывает как его разместить внутри пакета FC-2.

Имена и идентификаторы узлов и портов наследуются от FC, средствами FC они и назначаются. Регистрация и поиск устройств осуществляются средствами FC (FCNS). Сразу после включения как инициатор, так и исполнитель устанавливает сессию с FCNS, которая и продолжается до выключения устройства.

Сессия между инициатором и исполнителем является такой же сессией, как и с FCNS. Сессия начинается с выдачи инициатором ELS команды регистрации процесса (PRLI, описана в FC-LS), на который исполнитель выдаёт ответ в формате LS_ACC (согласие или временный или постоянный отказ. При этом происходит согласование требований и объявление возможностей (параметры обслуживания). Для ускорения работы может использоваться передача блока данных до получения подтверждения о готовности исполнителя (unsolicited data). Инициатор и исполнитель, между которыми установлена сессия, называются "image pair". Возможна неявная регистрация процесса. SCSI обмен допускается только внутри сессии. Часть параметров обслуживания согласуются не при регистрации, а с помощью SCSI команд "mode sense" (позволяет узнать возможности исполнителя или LUN) и "mode select" (позволяет установить требуемый режим работы исполнителя или LUN). Выполнение SCSI команды "scsi mode" требует пересогласования параметров обслуживания. Страница режимов "Disconnect-Reconnect": максимальный размер буфера (Maximum Burst Size), размер буфера первой передачи (First Burst Size), перекрытие данных в буфере (Data Overlay). Страница режимов "Protocol Specific Logical Unit" (FC Logical Unit Control mode page): упорядоченная отправка (EPDC, enable precise delivery checking). Страница режимов "Protocol Specific Port" (FC Port Control mode page): минимальное время ожидания после передачи инициативы. Параметры обслуживания: поддержка идентификаторов повторения команды, использование ELS команды SLL для повтора неуспешной команды, поддержка подтверждений (FCP_CONF), инициатор умеет передавать данные в буфер "в нахлёст" (data overlay), поддержка досрочной передачи данных (unsolicited data).

Кадры FCP называются единицами данных (IU, information unit). При передаче инкапсулируются в кадры FC. Передача каждого IU оформляется как последовательность, поэтому нет проблем с определением границ IU. Если размер IU превышает размер кадра FC, то IU передаётся как многокадровая последовательность. В каждый момент времени передача может идти только в одну сторону (определяется битом SI (sequence initiative) в заголовке FC), крома BLS команды ABTS. Типы IU (тип задаётся в заголовке кадра FC - R_CTL Information Category):

Каждой SCSI команде соответствует FCP операция (последовательность FC кадров), которая внутри сессии однозначно идентифицируется с помощью CRN (Command Reference Number) в заголовке IU. Каждой SCSI задаче соответствует FC обмен, который внутри сессии однозначно идентифицируется с помощью Fully Qualified Exchange Identifier (FQXID), состоящим из FC адреса инициатора, FC адреса исполнителя, FC идентификатора (FC Exchange Identifier) инициатора и FC идентификатора исполнителя. При повторе команды используется тот же самый CRN, но назначается новый FQXID. Каждый кадр внутри одного FQXID однозначно идентифицируется с помощью идентификатора последовательности (FC Sequence ID, SEQ_ID) и счётчика внутри последовательности (Sequence Count, SEQ_CNT).

Для управления FCP использует BLS и ELS команды FC.

Восстановление после ошибок возможно на уровне задач (обменов) или опционально на уровне IU (последовательностей), т.е. либо прерывается задача либо перепосылаются повреждённые IU. Определяется политикой обработки ошибок для каждого обмена.

FCP не имеет средств восстановления соединения и сеанса.

Балансировка нагрузки возможна только на уровне сессии (multipath), т.к. нет возможности организовать несколько соединений внутри сессии.

Собственных средств аутентификации, авторизации, обеспечения конфиденциальности и целостности - нет.

Комбинации возможностей FC и FCP, используемые на практике, описываются в ANSI T11 FC-DA.

Реализуется в Linux 2.6 модулем scsi_transport_fc, который имеет параметры:

Уровень приложений SCSI

Уровень приложений SCSI (SCSI application layer, SAL) общие наборы команд SPC-1, SPC-2, SPC-3; специфические наборы команд: SBC-2 (SCSI Block Commands, диски), RBC (Reduced Block Command, диски), SSC-3 (SCSI Stream Command, ленты), MMC-4 (Multi-Media Commands, CD/DVD), SCC-2 (SCSI Controller Commands, RAID), SES-2 (SCSI Enclosure Service).

SPC-2 (SCSI-3 primary commands, revision 2) включает команду EXTENDED COPY, которая позволяет отделить передачу данных резервного копирования от передачи управляющих данных.

Направление передачи отсчитывается относительно инициатора, т.е. чтение (inbound) передаёт данные от исполнителя к инициатору, а запись (outbound) - от инициатора к исполнителю. Чтение разбивается на 3 шага: инициатор передаёт исполнителю команду, исполнитель возвращает данные, исполнитель возвращает индикатор состояния (статус). Запрос на чтение содержит начальный адрес и количество непрерывных блоков для чтения. Число блоков для чтения запрашивается с учётом размера буфера инициатора, так что управление потоком не требуется. Запись разбивается на 4 шага: инициатор посылает команду записи, исполнитель посылает готовность принять данные, инициатор посылает данные, исполнитель возвращает индикатор состояния (статус). Запрос на запись содержит начальный адрес и количество непрерывных блоков для записи. Управление потоком возлагается на транспортный уровень (а SPI?). Бывают двунаправленные команды. Смещение данных в буфере - 32 бита, так то размер запроса ограничивается 2ГБ. Команды, соответствующие одному запросу прикладного уровня, объединяются (link) в задачу. Типы задач:

Индикатор состояния показывает успешность доставки команды (response), успешность выполнения команды (status) и подробный отчёт об ошибке (SCSI sense data). Коды статуса:

SCSI CDB (Control Data Block).

Ограничение адресации - 2GB на LUN для команд с 16-битным адресом, 2ТБ на LUN для команд с 32-битным адресом, ? для команд с 64-битным адресом. Требуется поддержка 64-битной адресации от устройства хранения, контроллера шины (Host Bus Adapter, HBA), драйвера контроллера шины.

SAF-TE

SAF-TE - SCSI Accessible Fault Tolerant Enclosures (Intel и nStor, 1997) - набор SCSI команд (точнее интерпретация имеющихся) для установки (включение индикаторов (корзины и слотов) и сигнализации, установка идентификаторов дисков, подготовка слота к вставке и извлечению диска, установка скорости вентиляторов, включение блока питания) и чтения состояния самого SAF-TE (изготовитель, продукт, версия прошивки, число минут после включения, количество включений), дисковых корзин (идентификатор, состояние источников питания и вентиляторов, температуры и термостаты (бинарный датчик температуры), открытые дверцы), массивов (норма, восстановление, задействован резервный диск) и отдельных слотов (возможность вставить диск в слот, наличие диска в слоте, готовность диска к работе, сколько раз вставляли диск в этот слот после включения питания, состояние диска: норма, сбой, перестройка, часть деградировшего массива, часть сбойного массива, ожидается сбой, устройство незадействовано в массиве, запасное устройство).

Плата с поддержкой SAF-TE обычно встраивается в корзины (например: AXX6SCSIDB), выглядит как дополнительное SCSI устройство со своим ID (SEP - SAF-TE Processor, LUN 0 для своего канала, если SEP поддерживает другие SCSI каналы, то он должен поддерживать LUN 1 и т.д.). Устройство работает только по опросу (не может быть инициатором, не выдаёт асинхронных извещений). С точки зрения ядра Linux выгдядит как SCSI устройство типа процессор:

kernel: scsi[4]: scanning scsi channel 0 [Phy 0] for non-raid devices
kernel:   Vendor: ESG-SHV   Model: SCA HSBP M27      Rev: 1.14
kernel:   Type:   Processor 

# megarc -phys -ch0 -id6 -a0

       Adapter 0, Channel 0, Target ID 6       ----------------------------------------
        Type: PROC                 Vendor      : ESG-SHV
        Product: SCA HSBP M27  Revision    : 1.14
        Synchronous   : No         Wide-32     : No    Wide-16: No
        LinkCmdSupport: No         TagQ support: No    RelAddr: No
        Removable     : No         SoftReset   : No    AENC   : No

SES

SES (SCSI Enclosure Services, принят ANSI T10) предназначен для выполнения тех же задач, что и SAF-TE, также реализован, как исполнитель SCSI. Пакет sg3_utils, в частности, содержит утилиты для получения информации с использование SAF-TE и SES.

Команда "sg_ses --status /dev/sgX" ("sg_ses --status /dev/bsg/0\:0\:8\:0") позволяет узнать имя производителя, модель и версию устройства, его тип, список страниц диагностики. Если sgX не соответствует устройству управления SES, то автоматически ищется ближайшее Например:

  HP        MSA2012i          J210
    enclosure services device
Supported diagnostic pages:
  Supported diagnostic pages [0x0]
  Configuration (SES) [0x1]
  Enclosure status/control (SES) [0x2]
  Threshold In/Out (SES) [0x5]
  Element descriptor (SES) [0x7]
  Enclosure busy (SES-2) [0x9]
  Additional (device) element status (SES-2) [0xa]
   [0x86]
   [0x87]
   [0xa0]
   [0xb0]

Страница 1 (команда "sg_ses --page=1 /dev/sgX") перечисляет компоненты устройства. Например:

  HP        MSA2012i          J210
    enclosure services device
Configuration diagnostic page:
  number of subenclosures (other than primary): 0
  generation code: 0x0
    Subenclosure identifier: 0
      relative ES process id: 0, number of ES processes: 0
      number of element type descriptor headers: 8
      logical identifier (hex): уникальный-номер
      vendor: HP        product: SPS Chassis       rev: 3022
      vendor-specific data: серийный номер
    Element type: Device, subenclosure id: 0
      possible number of elements: 12
      Description: Disk
    Element type: Power supply, subenclosure id: 0
      possible number of elements: 2
      Description: Power Supply
    Element type: Cooling, subenclosure id: 0
      possible number of elements: 2
      Description: Cooling Element
    Element type: Temperature sense, subenclosure id: 0
      possible number of elements: 4
      Description: Temperature Sensor
    Element type: Enclosure services controller electronics, subenclosure id: 0
      possible number of elements: 2
      Description: SES Electronics
    Element type: Voltage sensor, subenclosure id: 0
      possible number of elements: 6
      Description: Voltage Sensor
    Element type: Current sensor, subenclosure id: 0
      possible number of elements: 4
      Description: Current Sensor
    Element type: [0x83], subenclosure id: 0
      possible number of elements: 2
      Description: SAS Expander

Страница 2 (команда "sg_ses --page=2 /dev/sgX") показывает состояние элементов. Например:

  HP        MSA2012i          J210
    enclosure services device
Enclosure status diagnostic page:
  INVOP=0, INFO=0, NON-CRIT=0, CRIT=0, UNRECOV=0
  generation code: 0x0
    Element type: Device, subenclosure id: 0
    Overall status:
     Predicted failure=0, Disabled=0, Swap=0, status: Unsupported
     Slot address: 0
     App client bypassed A=0, Do not remove=0, Enc bypassed A=0
     Enc bypassed B=0, Ready to insert=0, RMV=0, Ident=0
     Report=0, App client bypassed B=0, Fault sensed=0, Fault requested=0
     Device off=0, Bypassed A=0, Bypassed B=0, Device bypassed A=0
     Device bypassed B=0
      Element 1 status:
       Predicted failure=0, Disabled=0, Swap=0, status: OK
       Slot address: 0
       App client bypassed A=1, Do not remove=0, Enc bypassed A=0
       Enc bypassed B=0, Ready to insert=0, RMV=0, Ident=0
       Report=0, App client bypassed B=0, Fault sensed=0, Fault requested=0
       Device off=0, Bypassed A=0, Bypassed B=0, Device bypassed A=0
       Device bypassed B=0
... (остальные 11 дисков)
    Element type: Power supply, subenclosure id: 0
    Overall status:
     Predicted failure=0, Disabled=0, Swap=0, status: Unsupported
     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 status:
       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=1, Off=0, Overtmp fail=0
       Temperature warn=0, AC fail=0, DC fail=0
...
    Element type: Cooling, subenclosure id: 0
    Overall status:
     Predicted failure=0, Disabled=0, Swap=0, status: Unsupported
     Ident=0, Hot swap=0, Fail=0, Requested on=0, Off=0
     Actual speed=0 rpm, Fan stopped
      Element 1 status:
       Predicted failure=0, Disabled=0, Swap=0, status: OK
       Ident=0, Hot swap=0, Fail=0, Requested on=0, Off=0
       Actual speed=4080 rpm, Fan at lowest speed
...
    Element type: Temperature sense, subenclosure id: 0
    Overall status:
     Predicted failure=0, Disabled=0, Swap=0, status: Unsupported
     Ident=0, Fail=0, OT failure=0, OT warning=0, UT failure=0
     UT warning=0
     Temperature: 
      Element 1 status:
       Predicted failure=0, Disabled=0, Swap=0, status: OK
       Ident=0, Fail=0, OT failure=0, OT warning=0, UT failure=0
       UT warning=0
       Temperature=32 C
...
    Element type: Enclosure services controller electronics, subenclosure id: 0
    Overall status:
     Predicted failure=0, Disabled=0, Swap=0, status: Unsupported
     Ident=0, Fail=0, Report=0, Hot swap=0
      Element 1 status:
       Predicted failure=0, Disabled=0, Swap=0, status: OK
       Ident=0, Fail=0, Report=1, Hot swap=0
...
    Element type: Voltage sensor, subenclosure id: 0
    Overall status:
     Predicted failure=0, Disabled=0, Swap=0, status: Unsupported
     Ident=0, Fail=0,  Warn Over=0, Warn Under=0, Crit Over=0 Crit Under=0
     Voltage: 0.00 volts
      Element 1 status:
       Predicted failure=0, Disabled=0, Swap=0, status: OK
       Ident=0, Fail=0,  Warn Over=0, Warn Under=0, Crit Over=0 Crit Under=0
       Voltage: 12.04 volts
...
    Element type: Current sensor, subenclosure id: 0
    Overall status:
     Predicted failure=0, Disabled=0, Swap=0, status: Unsupported
     Ident=0, Fail=0, Warn Over=0, Crit Over=0
     Current: 0.00 amps
      Element 1 status:
       Predicted failure=0, Disabled=0, Swap=0, status: OK
       Ident=0, Fail=0, Warn Over=0, Crit Over=0
       Current: 4.36 amps
...
    Element type: [0x83], subenclosure id: 0 (дополнительная полка)

Страница 5 позволяет посмотреть и изменить пределы контролируемых параметров.

Страница 7 представляет текстовое описание элементов.

Утилита sginfo:

safte-monitor

safte-monitor (пробовал версию 1.0.0rc1 из RPM с сайта разработчика) обеспечивает извлечение из SAF-TE устройства следующей информации (ключ -p): имя и адрес устройства, число вентиляторов и их состояние (по возможности), звучки и их состояние (по возможности), число и состояние блоков питания (по возможности), число слотов для дисков, состояние дверцы корзины (по возможности), число датчиков температуры и текущую температуру, наличие дисков в слотах, их активность и работоспособность:

Found 1 SAF-TE devices
SAF-TE Device ESG-SHV SCA HSBP M27 (4:0:6:0)
no. of fans           = 0
no. of power supplies = 1
no. of device slots   = 6
door lock installed   = 0
no. of temp sensors   = 1
audible alarm         = 0
no. of thermostats    = 0
power supply 0 is unknown
device slot 0 disk present,active,no error
device slot 1 disk present,active,no error
device slot 2 disk present,active,no error
device slot 3 disk present,active,no error
device slot 4 disk present,active,no error
device slot 5 disk not present,no error
temp sensor 0 is 25.0 c and okay
overall temperature is okay

При работе в режиме демона (по умолчанию) изменения в состоянии корзины записываются в syslog (источник - daemon, приоритет - crit?!), может вызываться программа пользователя. Также отвечает на HTTP запросы на порту 8123. Собственный журнал: /var/log/safte-monitor/error_log. Ключи:

Параметры программы обработки события:

  1. имя устройства
  2. текст сообщения о событии
  3. system
  4. partno
  5. code

Файл настройки: /etc/safte-monitor.conf (в основном, параметры web-сервера).

Файл /etc/safte-monitor.passwd содержит пароль для HTTP доступа в формате имя:пароль.

Пакет также содержит файлы (/etc/init.d/safte-monitor, /etc/sysconfig/safte-monitor), необходимые для chkconfig и service, а также типовую программу обработки событий (/usr/lib/safte-monitor/alert - посылка извещения по почте, необходимо поменять адрес получателя).

При достижении граничной температуры приходит извещение, а потом нет.

sdparm

Утилита sas_disk_blink позволяет поморгать индикатором активности указанное параметром --set число секунд (0 - погасить): "sas_disk_blink --set 60 /dev/sda".

ledmon

Пакет ledmon (утилита ledctl) позволяет зажечь индикаторы (режимы 2 или 3 индикаторов) слота или корзинки по указанному шаблону IBPI SFF-8489 (locate, locate_off, normal, off, failure и т.д.) или SES-2 (ses_ident, ses_fault) с помощью SGPIO или SES-2 (AHCI и SAF-TE не поддерживаются):

ledctl locate=/dev/sda

Пробовал в CentOS 7.4 и платформе Intel H2000G (H2216XXKR2 (SGPIO) и H2224XXLR2 (SES-2), 2 LED) - ошибается с позицией для SES-2 (симметрично - возможно подключили неверно, хотя родная утилита sas3ircu не ошибается).

Запасные блоки

Посмотреть список дополнительных запасных блоков (grown defect list) в формате LBA64: "sginfo -Flba64 -G /dev/sdx".

Выделить запасной блок для указанного адреса: "sg_reassign --eight=1 [--dummy] -a адрес-блока,[...] -vv /dev/sdx"

Флаги ARRE и AWRE в странице "Read Write Error Recovery" (sginfo -a /dev/sdx) разрешают автоматическое назначение запасных блоков при ошибках чтения и записи. Флаг PER разрешает выдачу информации об исправленной ошибке.

В конце концов можно и отформатировать с проверкой и игнорируя список дополнительных запасных блоков: "sg_format --format [--verbose] [--long] /dev/sdx".

Ссылки

@ Карта сайта News Автора!

Bog BOS: hardware:  SCSI: архитектурная модель, соединения - SPI и SAS, транспортные протоколы - iSCSI и FCP



Copyright © 1996-2024 Sergey E. Bogomolov; www.bog.pp.ru