|
Bog BOS: hardware: SCSI: архитектурная модель, соединения - SPI и SAS, транспортные протоколы - iSCSI и FCP |
Последнее изменение файла: 2024.02.08
Скопировано с www.bog.pp.ru: 2024.11.23
Интерфейс малых вычислительных систем SCSI (Small Computer System Interface, "скази") разработан в 1981 году фирмами Schugart Associates (SASI) и NCR, утверждён комитетом ANSI X3T9 в 1986 году (SCSI-2 в 1989), разделён на слои в SCSI-3.
В статье описаны:
Архитектурная модель 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.
При параллельном соединении (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 и выше должен быть активным. Устройство в середине цепочки не должно включать терминатор. В современных устройствах терминатор встраивается в каждое устройство и включается или выключается автоматически в зависимости от потребности. Если устройство не имеет встроенного терминатора и является последним в цепочке, то используется внешний терминатор, соответствующий ширине и типу шины.
Типы разъёмов:
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 (Serial Attached SCSI) включает:
Исполнитель может иметь 2 "узких" порта. Расширитель (expander) фактически представляет собой маршрутизатор с таблицей маршрутизации, выделенными портами для управления расширителем, мостами SATA/STP, встроенным исполнителем для управления корзиной. Устройства, подключённые к одному расширителю, образуют SAS домен. Двухпортовый инициатор (исполнитель) может входить в 2 домена. Допускается каскадирование расширителей, но запрещены циклы и множественные пути.
В SAS-2 было введено разбиение SAS домена на зоны (до 256) для управления доступом, зона устройства определяется номером порта расширителя, доступ между устройствами различных зон определяется таблицей доступа, задаваемой менеджером зон (может подключаться через Ethernet). Первые 8 зон предопределены: устройствам зоны 0 доступны только устройства зоны 1, устройствам зоны 1 доступны все устройства.
Каждый порт и расширитель имеют уникальной 64-битное имя (формат соответствует формату имени FC порта), которые используются в таблицах маршрутизации.
Транспортные протоколы 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 (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 байта).
Транспортный протокол 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) от исполнителя.
Команды управления задачами:
Управление потоком при чтении обеспечивается прикладным уровнем 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-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 - 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")
iscsiadm -m iface --interface=имя-iscsi-интерфейса [--print=число] \ --op={show|delete|new|update} [--name=имя --value=значение]
iscsiadm -m discovery --op=show --portal=IP-адрес[:порт[,экземпляр]]
iscsiadm -m discovery --op=delete --portal=IP-адрес[:порт[,экземпляр]]
iscsiadm -m discovery --op={update|new} --portal=IP-адрес[:порт[,экземпляр]] \ --name=имя --value=значение
iscsiadm -m node
iscsiadm -m node --targetname=имя-исполнителя --portal=IP-адрес[:порт[,экземпляр]] \ [--interface=имя-iscsi-интерфейса] --login
iscsiadm -m node --portal=IP-адрес[:порт[,экземпляр]] \ [--interface=имя-iscsi-интерфейса] --loginall[={all|manual|automatic}]
iscsiadm -m node --targetname=имя-исполнителя --portal=IP-адрес[:порт[,экземпляр]] \ [--interface=имя-iscsi-интерфейса] --logout
iscsiadm -m node --targetname=имя-исполнителя --portal=IP-адрес[:порт[,экземпляр]] \ [--interface=имя-iscsi-интерфейса] --rescan
iscsiadm -m node --targetname=имя-исполнителя --portal=IP-адрес[:порт[,экземпляр]] \ [--interface=имя-iscsi-интерфейса] --stats
iscsiadm -m node --targetname=имя-исполнителя --portal=IP-адрес[:порт[,экземпляр]] \ [--interface=имя-iscsi-интерфейса] --op={show|delete|new|update} \ [--name=имя --value=значение]
iscsiadm -m node --logoutall={all | automatic | manual}
iscsiadm -m session --print=число (0 - базовая информация, 1 - в иерархическом виде, 2 - параметры iSCSI, 3 - информация о LUN)
iscsiadm -m session --sid=ид-сессии --logout [--print=число]
iscsiadm -m session --sid=ид-сессии --rescan [--print=число]
iscsiadm -m session --sid=ид-сессии [--print=число] --op={show|delete|new|update} \ [--name=имя --value=значение]
Конфигурационный файл (по умолчанию /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).
Начальная поддержка (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 позволяет
tgtadm --lld iscsi --op new --mode target --tid 1 -T iqn.2006-03.ru.korund-m:t04
tgtadm --lld iscsi --op show --mode target Target 1: iqn.2006-03.ru.korund-m:t04 System information: Driver: iscsi Status: running I_T nexus information: LUN information: LUN: 0 Type: controller SCSI ID: deadbeaf1:0 SCSI SN: beaf10 Size: 0 Backing store: No backing store Account information: ACL information:
tgtadm --lld iscsi --op show --mode target --tid 1 MaxRecvDataSegmentLength=8192 MaxXmitDataSegmentLength=8192 HeaderDigest=None 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=20 OFMarkInt=Reject IFMarkInt=Reject MaxConnections=1
tgtadm --lld iscsi --op update --mode target --tid 1 --name=HeaderDigest --value=CRC32C
tgtadm --lld iscsi --op bind --mode target --tid 1 -I 10.101.0.4
tgtadm --lld iscsi --op unbind --mode target --tid 1 -I 10.101.0.4
tgtadm --lld iscsi --op delete --mode target --tid 1
tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /dev/`scsi_disk_by_name.sh iSCSIt04Lib` tgtadm --lld iscsi --op show --mode target Target 1: iqn.2006-03.ru.korund-m:t126.t04 System information: Driver: iscsi Status: running I_T nexus information: 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 logicalunit --op update --tid 1 --lun 1 \ --params vendor_id=t126,product_id=iSCSIt04Lib,product_rev=0010,scsi_sn=серийный-номер # на стороне инициатора виртуальный диск выглядит так: cat /proc/scsi/scsi Attached devices: ... Host: scsi19 Channel: 00 Id: 00 Lun: 01 Vendor: t126 Model: iSCSIt04Lib Rev: 0010 Type: Direct-Access ANSI SCSI revision: 05 # и с ним можно работать по имени fdisk -l /dev/`scsi_disk_by_name.sh iSCSIt04Lib`
tgtadm --lld iscsi --op delete --mode logicalunit --tid 1 --lun 1
tgtadm --lld драйвер --mode account --op new --user=имя --password=пароль
tgtadm --lld драйвер --mode account --op delete --user=имя
tgtadm --lld драйвер --tid идентификатор --mode account --op bind --user=имя
tgtadm --lld драйвер --tid идентификатор --mode account --op bind --user=имя --outgoing
tgtadm --lld драйвер --tid идентификатор --mode account --op unbind --user=имя
tgtadm --lld драйвер --mode session --op show --tid ид-исполнителя --sid ид-сессии
После подключения:
на стороне инициатора 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-utils) появился в RHEL 5.2.
Транспортный протокол 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 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 - 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 (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 (пробовал версию 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. Ключи:
Параметры программы обработки события:
Файл настройки: /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 - посылка извещения по почте, необходимо поменять адрес получателя).
При достижении граничной температуры приходит извещение, а потом нет.
Утилита sas_disk_blink позволяет поморгать индикатором активности указанное параметром --set число секунд (0 - погасить): "sas_disk_blink --set 60 /dev/sda".
Пакет 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".
|
Bog BOS: hardware: SCSI: архитектурная модель, соединения - SPI и SAS, транспортные протоколы - iSCSI и FCP |