cciss(4) блочный драйвер устройства HP Smart Array

ОБЗОР


modprobe cciss [ cciss_allow_hpsa=1 ]

ОПИСАНИЕ

cciss — это блочный драйвер для старых контроллеров RAID HP Smart Array.

Параметры

cciss_allow_hpsa=1: этот параметр запрещает драйверу cciss пробовать управлять контроллерами, которыми может управлять драйвер hpsa(4). Другими словами, этим параметром драйвер cciss будет ограничен следующими контроллерами:
    Smart Array 5300
    Smart Array 5i
    Smart Array 532
    Smart Array 5312
    Smart Array 641
    Smart Array 642
    Smart Array 6400
    Smart Array 6400 EM
    Smart Array 6i
    Smart Array P600
    Smart Array P400i
    Smart Array E200i
    Smart Array E200
    Smart Array E200i
    Smart Array E200i
    Smart Array E200i
    Smart Array E500

Поддерживаемое оборудование

Драйвер cciss поддерживает следующие платы Smart Array:
    Smart Array 5300
    Smart Array 5i
    Smart Array 532
    Smart Array 5312
    Smart Array 641
    Smart Array 642
    Smart Array 6400
    Smart Array 6400 U320 Expansion Module
    Smart Array 6i
    Smart Array P600
    Smart Array P800
    Smart Array E400
    Smart Array P400i
    Smart Array E200
    Smart Array E200i
    Smart Array E500
    Smart Array P700m
    Smart Array P212
    Smart Array P410
    Smart Array P410i
    Smart Array P411
    Smart Array P812
    Smart Array P712m
    Smart Array P711m

Особенности настройки

Для настройки контроллеров HP Smart Array используйте HP Array Configuration Utility (hpacuxe(8) или hpacucli(8)) или Offline ROM-based Configuration Utility (ORCA), которую можно запустить из ROM Smart Array при включении машины.

ФАЙЛЫ

Узлы устройства

Ниже приведена схема именования устройств:
Старшие номера:
    104     cciss0
    105     cciss1
    106     cciss2
    105     cciss3
    108     cciss4
    109     cciss5
    110     cciss6
    111     cciss7
Младшие номера:
    b7 b6 b5 b4 b3 b2 b1 b0
    |----+----| |----+----|
         |           |
         |           +-------- Идентификатор раздела (0=всё устройство,
                                                      1-15 раздел)
         |
         +-------------------- Номер логического тома
Порядок именования устройств:
    /dev/cciss/c0d0         Контроллер 0, диск 0, устройство целиком
    /dev/cciss/c0d0p1       Контроллер 0, диск 0, раздел 1
    /dev/cciss/c0d0p2       Контроллер 0, диск 0, раздел 2
    /dev/cciss/c0d0p3       Контроллер 0, диск 0, раздел 3
    /dev/cciss/c1d1         Контроллер 1, диск 1, устройство целиком
    /dev/cciss/c1d1p1       Контроллер 1, диск 1, раздел 1
    /dev/cciss/c1d1p2       Контроллер 1, диск 1, раздел 2
    /dev/cciss/c1d1p3       Контроллер 1, диск 1, раздел 3

Файлы в /proc

В файлах /proc/driver/cciss/cciss[0-9]+ содержится информация о настройке каждого контроллера. Пример:
    $ cd /proc/driver/cciss
    $ ls -l
    total 0
    -rw-r--r-- 1 root root 0 2010-09-10 10:38 cciss0
    -rw-r--r-- 1 root root 0 2010-09-10 10:38 cciss1
    -rw-r--r-- 1 root root 0 2010-09-10 10:38 cciss2
    $ cat cciss2
    cciss2: HP Smart Array P800 Controller
    Board ID: 0x3223103c
    Firmware Version: 7.14
    IRQ: 16
    Logical drives: 1
    Current Q depth: 0
    Current # commands on controller: 0
    Max Q depth since init: 1
    Max # commands on controller since init: 2
    Max SG entries since init: 32
    Sequential access devices: 0
    cciss/c2d0:   36.38GB       RAID 0

Файлы в /sys

/sys/bus/pci/devices/<dev>/ccissX/cXdY/model
Модель логического устройства Y контроллера X со страницы 0 SCSI INQUIRY.
/sys/bus/pci/devices/<dev>/ccissX/cXdY/rev
Версия логического устройства Y контроллера X со страницы 0 SCSI INQUIRY.
/sys/bus/pci/devices/<dev>/ccissX/cXdY/unique_id
Серийный номер логического устройства Y контроллера X со страницы 83 SCSI INQUIRY.
/sys/bus/pci/devices/<dev>/ccissX/cXdY/vendor
Производитель логического устройства Y контроллера X со страницы 0 SCSI INQUIRY.
/sys/bus/pci/devices/<dev>/ccissX/cXdY/block:cciss!cXdY
Символьная ссылка на /sys/block/cciss!cXdY.
/sys/bus/pci/devices/<dev>/ccissX/rescan
При записи в этот файл драйвер повторно сканирует контроллер для обнаружения новых, удалённых или изменённых логических дисков.
/sys/bus/pci/devices/<dev>/ccissX/resettable
Значение 1 в файле показывает, что параметр ядра «reset_devices=1» (используемый kdump) был принят данным контроллером. Значение 0 показывает, что параметр ядра «reset_devices=1» принят не был. Некоторые модели Smart Array не способны принять этот параметр.
/sys/bus/pci/devices/<dev>/ccissX/cXdY/lunid
8-байтовый LUN ID, используемый для адресации логического устройства Y контроллера X.
/sys/bus/pci/devices/<dev>/ccissX/cXdY/raid_level
Уровень RAID логического устройства Y контроллера X.
/sys/bus/pci/devices/<dev>/ccissX/cXdY/usage_count
Счётчик использования (число открытий) логического устройства Y контроллера X.

Поддержка ленточных устройств SCSI и устройств смены носителя

Драйвер поддерживает устройства SCSI с последовательным доступом и смены носителя, и автоматически создаёт соответствующие узлы устройств (например, /dev/st0, /dev/st1 и т. д.; подробней смотрите в st(4)). Чтобы использовать ленточные устройства SCSI с контроллером Smart Array 5xxx в настройках ядра нужно включить «SCSI tape drive support for Smart Array 5xxx» и «SCSI support».

Также заметим, что драйвер не привлекает ядро SCSI во время инициализации. Драйвер должен динамически задействовать ядро SCSI через запись в файловой системе /proc, которую (/proc/driver/cciss/cciss*) «блочная» часть драйвера создаёт во время работы. Так сделано потому, что на момент инициализации драйвера ядро SCSI ещё может быть не инициализировано (так как драйвер — блочный) и попытка зарегистрировать его в ядре SCSI в этом случае вызывала бы зависание. Это лучше всего выполнять из сценария инициализации (обычно, в /etc/init.d, но в разных дистрибутивах по-разному). Пример:

    for x in /proc/driver/cciss/cciss[0-9]*
    do
        echo "engage scsi" > $x
    done
После того, как драйвер подключил ядро SCSI, он не может быть выключен (за исключением выгрузки драйвера, если он собран в виде модуля).

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

Ленточные устройства SCSI, подключаемые во время работы (hot plug)

Поддерживается подключение ленточных устройств SCSI без выключения машины. Драйвер cciss должен быть уведомлён об изменениях на шине SCSI. Это можно сделать через файловую систему /proc. Пример:


    echo "rescan" > /proc/scsi/cciss0/1

Это заставляет драйвер:

1.
Опросить адаптер об изменениях на физических шинах SCSI и/или управляемой петли (arbitrated loop) fibre channel;
2.
Определить все новые или удалённые устройства с последовательным доступом или смены носителя;

Драйвер выводит сообщения о добавленных или удалённых устройствах, а также контроллер, шину, назначение и lun каждого используемого устройства. Также, драйвер уведомляет промежуточный слой SCSI об этих изменениях.

Заметим, что по соглашению об именовании кроме имени драйвера, записи файловой системы /proc содержат номер (например, «cciss0» вместо «cciss», как вы могли бы ожидать).

Замечание: драйвер cciss на промежуточном слое SCSI представляет в виде устройств SCSI только устройства с последовательным доступом и смены носителя. Устройства для физических дисков SCSI не представляются на промежуточном слое SCSI. Дисковые устройства представляются ядром как логические устройства, который контроллер массива собрал из частей физических дисков. Логические устройства представляются на блочном уровне (не на промежуточном слое SCSI). Это важно для драйвера — не дать прямой доступ ядру к физическим дискам, так как устройства используются контроллером массива для сборки логических устройств.

Обработка ошибок SCSI для ленточных устройств и устройств смены носителя

Промежуточный слой Linux SCSI предоставляет порядок (protocol) обработки ошибок, который запускается, если команда SCSI выполнилась с ошибкой определённое количество раз (которое может зависеть от команды). Драйвер cciss следует этому порядку с некоторыми изменениями. Обычный порядок состоит из четырёх шагов:
*
Устройству указывается прервать работу команды.
*
Если это не сработало, устройство сбрасывается (reset).
*
Если это не сработало, сбрасывается шина SCSI.
*
Если это не сработало, сбрасывается адаптер шины узла.

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

Если событие обработки ошибок возникло и ленточное устройство успешно сброшено или последняя команда успешно прервана, то ленточное устройств может всё ещё продолжать не позволять выполнять ввод-вывод, пока какая-нибудь команда не поместит ленточное устройство в известное положение. Как правило, вы должны перемотать ленту (например, командной mt -f /dev/st0 rewind) перед тем как продолжить ввод-вывод снова в ленточное устройство, которое было сброшено.