RAID контроллер HP Smart Array P400 (SAS/SATA) в Linux.

В статье описываются технические возможности HP Smart Array P400 (SAS/SATA) контроллера. Массив дисков может позволить преодолеть ограничение максимальной ёмкости отдельных дисков, может обеспечить доступность данных при выходе одного или двух дисков из строя, может ускорить доступ к данным, может обеспечить непрерывное функционирование системы при сбое и даже в момент замены диска.
Наличие RAID - не повод для расслабления. Не забудьте также, что купленный для замены диск должен быть не меньше старого, а у некоторых производителей объём диска может меняться от версии к версии (фактически от партии к партии). Или можно поставить диск большего объёма и при инициализации массива использовать не всё доступное место. Массив, проинициализированный одним контроллером, скорее всего не будет распознан контроллером другого типа. Так что резервный RAID контроллер необходим. Многие контроллеры отказываются кешировать операции записи при отсутствии специальной батарейки (и это правильно). При этом скорость записи может снижаться очень сильно, так что стоимость закупаемой дополнительно батарейки необходимо учесть в смете расходов.
Первоначально "I" в слове RAID означало "Inexpensive" (дешёвых), но быстро выяснилось, что цена самого массива очень высока.
Возможные причины потери данных:
•    удаление файла по команде пользователя (администратора, хакера); для защиты данных требуется регулярное резервирование данных (например, с помощью bacula); RAID в этом случае не поможет
•    полный отказ диска; для защиты данных возможно использование RAID технологии
•    внезапное отключение питания; для защиты данных необходимо использование UPS с программным обеспечением аккуратного завершения работы системы при исчерпании батареи; RAID в этом случае только ухудшит последствия (если не имеет встроенной батарейки); может помочь (кроме сохранения БД) файловая система с журнализацией данных при условии, что контроллер и диск не переупорядочивают операции записи (поддерживают barrier)
•    "плохие" блоки; рекомендуется "badblocks -svw" перед использованием диска до сборки RAID или LVM; RAID в этом случае не поможет
•    молчаливая ошибка записи (запись блока происходит по неправильному адресу)
•    ошибки приложений и ОС; рекомендуется система управления версиями (обычное резервирование помогает не всегда); RAID в этом случае не поможет
•    утеря сервера (кража, пожар); рекомендуется регулярное резервирование данных и хранение копий на другой территории
Первоначально деление RAID массивов на уровни (типы) было предложено Гибсоном, Катцом и Патерсоном (University of California at Berkeley), часть предложенных уровней в настоящее время не используется, зато исторически добавились новые (скорость зависит от реализации и доступности кеширования записи, может отличаться от ожидаемой на порядок; терминология составных массивов - 10, 01, 0+1 - не устоялась окончательно):
•    0 (stripe) - данные делятся на блоки (полоски, stripe) и записываются на диски поочерёдно, это увеличивает пропускную способность (запись идёт параллельно), слабо уменьшает латентность и не увеличивает надёжность (вернее, уменьшает надёжность, так как число устройств увеличивается)
•    1 (mirror) - две одинаковые копии данных записываются на два диска, пропускная способность при чтении увеличивается, латентность снижается, пропускная способность при записи слегка уменьшается, надёжность увеличивается (допустим сбой одного диска), стоимость увеличивается вдвое
•    5 - данные делятся на блоки (полоски, stripe) и записываются на диски поочерёдно вместе с блоками контрольных сумм, надёжность увеличивается (допустим сбой одного диска с сильной потерей в производительности); стоимость увеличивается на цену одного дополнительного диска; требуется не менее 3 дисков; скорость записи слегка уменьшается (надо записать сами изменённые данные и блок контрольных сумм, но можно делать это параллельно); пропускная способность при чтении увеличивается с увеличением числа дисков
•    5E - запасной (hotspare) диск "размазан" по всему массиву в виде запасных полосок; увеличивает количество используемых в работе шпинделей, что ускоряет многопоточный доступ
•    6 - две полоски контрольных сумм записываются поочерёдно на различные диски, что позволяет продолжать работу при отказе 2 дисков в массиве; скорость работы ниже, чем у RAID-5 (очень медленно при отказе 2 дисков)
•    10 (1+0) - массив RAID 0 из нескольких RAID 1, обеспечивающая увеличение как скорости, так и надёжности (допустим отказ любого числа дисков, пока не откажут все диски одной группы RAID1)
•    JBOD (Just a Bunch Of Drives) - доступ к дискам осужествляется независимо друг от друга или несколько дисков объединяются в один логический диск большего размера, ни увеличения скорости, ни увеличения надёжности (вернее, уменьшает надёжность, так как число устройств увеличивается)
•    0+1 (01) - массив RAID 1 из RAID 0 с объединением нескольких массивов в один большой (spanning), увеличение как скорости, так и надёжности, стоимость увеличивается вдвое
•    50 - массив RAID 0 из RAID 5 с объединением нескольких массивов в один большой (spanning), увеличение как скорости, так и надёжности, стоимость увеличивается на цену одного дополнительного диска в каждой группе
Правильный расчёт размера полоски, размера блока файловой системы и группы блоков (ext2/3) в зависимости от типа нагрузки - большое искусство. Если полоска маленькая (относительно среднего размера файла), то получаем большую задержку и большую пропускную способность.
RAID может быть организован с помощью аппаратного контроллера (в этом случае массив представляется BIOS и ОС как один диск) или программного драйвера. В настоящее время многие изготовители оборудования выдают [полу]программный RAID (hostRAID) в качестве аппаратного, при этом поддержка аппаратной части в Linux отсутствует или плохо работает. Разработчики ядра Linux рекомендуют использовать для таких "недо-RAID" стандартный программный драйвер RAID (device-mapper и mdadm). Так как формат данных RAID не стандартизован (хотя стандарт DDF существует), то переносить диски от одного аппаратного контроллера в другой в общем случае нельзя. Требуется покупка нового контроллера того же типа. Программная реализация:
•    позволяет съэкономить деньги
•    больше нагружает общую шину ввода/вывода
•    не рекомендуется подключать 2 устройства к одной PATA шине - ухудшается производительность, при сбое одного устройства может быть заблокировано и второе (особенно, если вышло из строя устройство master)
•    больше нагружает процессор, хотя для современного процессора нагрузка невелика
•    позволяет безболезненно переносить диски между системами
•    требует предусмотрительности при настройке загрузчика (загрузочный раздел на RAID-5 определённо вызовет проблемы; если корневая файловая система находится на RAID, то поддержка RAID должна быть встроена в ядро или initrd, а загрузочный раздел отделён)
•    некуда поставить батарейку для кеширования записи
•    в случае внезапного останова (батарейка и UPS не защищают от "kernel panic"!) могут быть серьёзные поломки файловой системы
•    реже ломается и обычно лучше отлажена, чем firmware аппаратного контроллера и утилиты, хотя бывает всякое...
•    позволяет напрямую контролировать отдельные диски (SMART, параметры и т.д.)
•    единый интерфейс управления (в рамках одной ОС)
•    могут быть проблемы с горячей заменой
•    требуется настроить BIOS для загрузки с "выжившего" диска (и auto-detect!)
Кеширование записи на физических дисках включать нельзя - при сбое питания велик шанс порчи данных (LUA?). Кеширование записи в контроллере (Write-Back) включать можно только при наличии BBU (Battery Backup Unit), а ещё лучше TBBU (Transport BBU), которая позволяет спасти данные из кеша даже в случае выхода из строя контроллера. Write-Through - это отсутствие кеширования записи.
Запасные диски (hot disk, hot spare) обеспечивают возможность при отказе одного из действующих дисков массива автоматически заменить его запасным. После синхронизации массив сохраняет устойчивость к возможному сбою другого диска. Запасной диск (диски) могут быть привязаны к массиву, группе массивов или быть общими. Перестроение массива (копирование данных или вычисление контрольных сумм и запись на запасной диск) может выявить плохие блоки на одном из оставшихся дисков, что вызовет полный развал массива (RAID6 позволяет защититься от подобных случаев, если разработчик не оплошал). Рекомендуется регулярная проверка на наличие плохих блоков пока всё ещё хорошо (некоторые контроллеры имеют встроенную возможность периодической проверки в фоновом режиме).
Возможность горячей замены (hot swap, hot plug) позволяет заменить неисправный диск, не останавливая системы. Требуется поддержка со стороны диска (PATA диски не предназначены для горячей замены; SCSI SCA - предназначены; SATA - зависит от модели), корзины (хороший признак - совмещённый разъём питания и логики в корзине) и контроллера (после замены PATA диска необходимо сканировать шину - hdparm - и прочитать заново таблицу разделов; SATA драйвер в ядре 2.6 должен сработать; для SCSI может потребоваться ручное вмешательство - /proc/scsi/scsi). В некоторых случаях можно обеспечить горячую замену там, где она не подразумевалась производителем, но можно и сжечь оборудование. Например, я многократно менял обычные SCSI диски, подключенные внешним кабелем, не выключая Sun SparcServer, но требовалось соблюдать правильную последовательность действий (размонтировать файловые системы, выключить питание диска, отсоединить кабель в точке присоединения к хосту, заменить диск и т.д.).
SAF-TE (SCSI Accessed Fault-Tolerance Enclosure) позволяет мониторить наличие и работоспособность дисков, блоков питания, температуру и т.д.. Представляется в виде дополнительного SCSI устройства (для SCSI) или I2O устройства (для ATA, SATA).
Нет смысла размещать раздел подкачки (swap) на RAID массиве с целью ускорения работы - ядро умеет балансировать нагрузку на несколько разделов подкачки с равными приоритетами. Однако использование RAID-1/5/6 позволит продолжить работу при сбое диска.


HP Smart Array P400 (SAS/SATA)

HP Smart Array P400 (HP 398648-001) - серия RAID контролеров SAS (3Gbps) и/или SATA (1.5Gbps). P400i (412206-001) - встроенный вариант (процессор - PowerPC 440, память под кеш - ECC DDR2/533 256МБ 40-bit, наращивается до 512МБ 72-bit, PCI-Express x8), P400/256 (на базе SAS 1078, память под кеш - ECC DDR2/533 256МБ 40-bit, PCI-Express x8, имеется 8 индикаторов активности и сбоев). Обещается совместимость между всеми моделями серии Smart Array по формату данных, утилитам конфигурирования и управления. До 8 дисков SAS (3Gb) или SATA (1.5Gb, с NCQ). Диски (корзины) подсоединяются 2 каналами SAS x4 (SFF8484, 1.2GBps на порт), каждый канал поддерживает до 4 устройств (работа не прерывается, если 3 из 4 phy окажутся повреждены), имеется 2 варианта с подключением на лицевой или обратной стороне. Звучок отсутствует.

Стандартная NiMH батарейка (BBWC, Battery-Backed Write Cache, 390936-001, кабель 399034-001, только батарея 398648-001; для P400i - HP 381573-001) хранит данные 72 часа (по другим данным - 2 суток) при пропадании питания или поломке сервера; менять через 3 года; имеет индикатор, который мигает при сохранении данных из кеша на диск (на самом деле, индикаторов много и они подмигивают азбукой морзе, подробности в документации); начальная зарядка - 4 часа, обычная зарядка - 2 часа. Обязательна для кеширования записи и некоторых операций над массивами (при проблемах с батарейкой кеширование отключается и восстанавливается при их разрешении). При поломке сервера необходимо перенести контроллер с батарейкой и дисками на другой сервер. При поломке контроллера модуль кеша с батарейкой необходимо переставить на новый контроллер того же типа.

Поддерживаемые уровни: RAID-0, RAID-1 (утверждается, что с балансировкой чтения - не заметил), RAID-1+0, RAID-5, RAID-6 (ADG, только при наличии BBWC). Может настраиваться автоматически в зависимости от числа имеющихся дисков на момент включения. Инициализация в фоновом режиме.

Адаптивное упреждающее чтение. Кеширование записи (write-back) при наличии батарейки. Умеет объединять последовательные операции записи до размеров полоски (stripe), что значительно ускоряет запись на RAID-5 и RAID-6. Имеется управление распределением кеша на упреждающее чтение и запись (по умолчанию - 50/50 или 25/75, возможные значения: 0/100, 25/75, 50/50, 75/25, 100/0).

Физические диски одного типа (SAS или SATA) объединяются в массив. От каждого физического диска берётся не более размера самого маленького диска массива. Имя назначается автоматически - A, B и т.д.. Сложная система идентификации физических дисков - канал[I|E]:ящик:слот.

Логический диск (до 32, до 16?) делается из части массива. Нумеруются с единицы. Тип RAID, размер полоски, MaxBoot (для NT4), кеширование чтения и записи настраиваются на уровне логического диска. Один массив может содержать логические диски различного уровня RAID. Размер логического диска может превышать 2ТБ.

Мониторинг количества операций в секунду, среднего времени выполнения операции и загрузки контроллера.

Добавление диска к массиву или замена всех дисков на диски большего размера осуществляется без прерывания работы (данные равномерно перераспределяются по всем дискам, приоритет задаётся, требуется батарейка). Образовавшееся свободное место может быть добавлено к существующему логическому диску или использовано для создания нового логического диска. Также без остановки эксплуатации происходит смена типа RAID и размера полоски. Только одна операция одновременно. Требуется наличие BBWC для нормальной скорости миграции. При закупке дополнительной лицензии возможно изъятие "лишнего" диска из массива. RAID-1 и RAID-1+0 можно разбить на 2 массива (требуется выключение сервера) и слить обратно (данные второго массива будут потеряны) с помощью загрузочного диска с ACU (Split Mirrored Array и Re-Mirror Array).

Загрузить новую прошивку можно не останавливая работы, она будет активирована автоматически при перезагрузке. Запасная копия прошивки в ROM. Более простой способ обновления прошивки - загрузка с Firmware Maintenance CD.

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

Восстановление массива начинается автоматически при наличии резервного диска или добавлении нового диска (того же типа и достаточной ёмкости) при включённом сервере (ручного запуска нет!). Если при восстановлении будут обнаружены неисправимые ошибки чтения, то восстановление будет прервано (в инструкции рекомендуется сделать резервное копирование, восстановиться обратно, затем повторить попытку реконструкции массива). Если новый диск добавляется при выключенном сервере, то при загрузке требуется нажать F1 для начала восстановления. При невосстановимом разрушении массива можно перезагрузиться и нажать F2 в момент получения сообщения 1779 POST. Массив будет помечен как рабочий, но часть данных на нём будет потеряна.

Фоновое сканирование дисков в поиске плохих блоков.

Диски можно безнаказанно переставлять в другой слот, доступный тому же контроллеру (не получилось). Массив целиком в нормальном состоянии и без задействованных запасных дисков можно переносить на другой контроллер (сообщения 1724 или 1727 при загрузке означают удачу, сообщение 1785 - вернуть немедленно обратно).

Настройка массива при начальной загрузке (ORCA, минимальный набор возможностей) - нажать F8 (или "Esc 8" при использовании последовательного порта, глотаются символы при вводе). Интерфейс в виде меню или командный режим. При работе в командном режиме необычно расположение команды и параметров:

    controller номер show (узнать тип контроллера)

    CLI> controller 1 show

    Controller: HP Smart Array P400i, slot 0                                     
    Direct-Attached Storage

    CLI> controller 2 show

    Controller: HP Smart Array P400i, slot 0                                     
    External Array Controller 1

    controller номер select
    controller blink={off|on}
    controller modify bootable=yes
    controller delete (?!)
    controller create type=logicaldrive raid={6|5|1|0} drives=... spare=...
    logicaldrive номер show

    Logical Drive # 1, RAID 1+0, 136.7 GB, Status OK                              
    Physical Drive # 1, Port 1I, Box 1, Bay 1, 146.8GB SAS Drive OK , Data
    Physical Drive # 2, Port 1I, Box 1, Bay 2, 146.8GB SAS Drive OK , Data

    logicaldrive номер blink={off|on}
    logicaldrive номер delete
    physicaldrive номер show

    Physical Drive # 1, Port 1I, Box 1, Bay 1, 146.8GB SAS Drive OK , Data

    physicaldrive номер blink={off|on}

Драйвера и утилиты собраны на диске SmartStart CD.

Драйвер для Linux - cciss (поставляется вместе с RHEL/CentOS и есть своя версия, только для поставочного ядра RHEL, но в пакете есть исходные тексты). В /proc/scsi/scsi попадают только НМЛ и автозагрузчики (?!). Имена устройств: /dev/cciss/c"НомерКонтроллера"d"НомерЛогическогоДиска". Номер устройства: major - 104 для cciss0, minor - состоит из номера логического диска (старший полубайт) и номера раздела на нём (младший полубайт). Информация в /proc/driver/cciss/cciss0:

cciss0: HP Smart Array P400i Controller
Board ID: 0x3235103c
Firmware Version: 5.26
IRQ: 90
Logical drives: 1
Sector size: 2048
Current Q depth: 0
Current # commands on controller: 0
Max Q depth since init: 159
Max # commands on controller since init: 159
Max SG entries since init: 31
Sequential access devices: 0

cciss/c0d0:     146.77GB    RAID 1(1+0)

Обновление информации о томах:

echo "rescan volumes" > /proc/driver/cciss/cciss0

Утилита /sbin/cciss_id (часть device-mapper-multipath) выводит WWID логического диска.

В комплекте с "родным" драйвером поставляются утилиты /sbin/cciss_phys_devs (выводит список SCSI-устройств, подключённых к указанному контроллеру) и /sbin/cciss_hotplug (поиск НЛМ).

Утилита hpacucli (HP Array Configuration Utility CLI, пакет hpacucli-8.28-13.0.noarch.rpm) предоставляет командный интерфейс для настройки и мониторинга. В начале указывается объект, затем действие, затем параметры (параметр "forced" заранее подверждает потенциально опасное действие). В качестве объекта можно указать

    контроллер (controller {all | slot=номер | wwn=адрес | serialnumber=номер | chassisserialnumber=номер})
    массив (controller выбор-контроллера array {all | идентификатор})
    физический диск (controller выбор-контроллера physicaldrive {all | канал:ящик:слот})
    логический диск (controller выбор-контроллера logicaldrive {all | номер})

Действия:

    show (опции: detail, status и config [detail])
    create/remove (работа с массивами и логическими дисками), параметры:
        type=ld
        drives={список|all|allunassigned}
        raid={0|1|1+0|5|6|50|60}
        ss=размер-страйпа-в-КБ
        size={max|количество-МБ}
        arrayaccelerator={enable|disable}
        drivetype={sas|sata})
    modify, параметры:
        rebuildpriority={high|low|medium}
        expandpriority={high|low|medium}
        led={on|off}
        queuedepth={automatic|число}
        surfacescandelay=секунд
        reenable (объявить физический диск хорошим)
        size=число|max
        raid=уровень
        ss=размер-страйпа-в-КБ|default
        cacheratio=доля-чтения/доля-записи
        drivewritecache={enable|disable}
        arrayaccelerator={enable|disable})
    add (добавить диск к массиву - "add drives=список"; вызывает преобразование типа массива)
    remove (удалить диск из массива, отказывается - требуется лицензия?)
    объявить запасной диск (add spares=список)
    добавить лицензию
    delete # удаление массива или логического диска
    diag ("ctrl all diag file=/tmp/temp [xml=on]" выдаёт почти 3 тысячи строк информации со всей подноготной; в версии 9 в виде zip-архива в форматах txt, HTML и XML)
    rescan (поиск контроллеров)

При установке создаётся /opt/compaq. В документации утверждается, что для работы требуется "HP Management Base". Я не заметил такой потребности. Можно вызывать из скрипта: "hpacucli controller slot=0 show status; hpacucli controller slot=0 ld 1 show status". "ctrl all diag file=/tmp/temp" выдаёт почти 3 тысячи строк информации со всей подноготной. Например:

# добавление отдельного диска под видом RAID-0
hpacucli controller slot=0 create type=ld raid=0 drives=allunassigned drivetype=sata

# не использовать кеш контроллера при работе с этим диском
hpacucli controller slot=0 logicaldrive 2 modify arrayaccelerator=disable

# разрешить использование кеширования записи на всех (!) дисках
hpacucli controller slot=0 modify drivewritecache=enable

# удалить логический диск
hpacucli controller slot=0 logicaldrive 2 delete

# вернуть диск из массива в строй (если не помог rebuild)
hpacucli controller slot=0 logicaldrive 2 modify reenable
blockdev --rereadpt /dev/cciss/c0d1

# удалить все запасные диски
hpacucli controller slot=0 array A remove spares=all

Утилита cpqacuxe (HP Array Configuration Utility) пристраивает к веб-интерфейсу для настройки и мониторинга (объединённая System Management Homepage, HTTPS, порт 2381) возможность настраивать RAID контроллер (выпрыгивающее окошко). Сервер cpqacuxe запускается как демон. Может использоваться как для настройки локального контроллера (--disable-remote), так и удалённой настройки контроллера (cpqacuxe --enable-remote). После использования можно остановить (-stop). Есть возможность изготовить скрипт из текущей конфигурации (-c имя-файла) и выполнить его (-i имя-файла [-reset]). Декларативный язык создания конфигурации описан в документации. Есть автономный загрузочный диск с cpqacuxe.

Утилита hpadu (HP Array Diagnostic Utility) пристраивает к веб-интерфейсу для настройки и мониторинга (объединённая System Management Homepage, HTTPS, порт 2381) веб-интерфейс для генерации отчётов. Имеется также командный интерфейс (hpaducli -f имя-файла), который не требует SMH (вывод подозрительно похож на "hpacucli diag").

Загрузочный диск для автономной настройки массива - hpacucd.

Простейший способ обновить прошивку - загрузиться с Firmware Maintenance CD (заодно можно обновить прошивку дисков, BIOS и прочее).

Данные SMART (обощённые) для отдельных физических дисков доступны утилитам из комплекта smartmontools. Настройки для smartd (/etc/smartd.conf, один логический диск 0 из двух физических в слотах 0 и 1):

/dev/cciss/c0d0 -d cciss,0 -m root -M daily
/dev/cciss/c0d0 -d cciss,1 -m root -M daily

Вызов smartctl:

smartctl -a -d cciss,НомерДиска /dev/cciss/c0d0

Измерение производительности

HP Proliant DL320 G5p, P400/256, RAID 1+0 из двух SATA дисков 250GB, 7200RPM, кеширование включено

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
s191.cs.niis 11000M           31349   7 16120   2           68845   4 270.9   0

HP Proliant DL365 G5, P400i/512, RAID 1+0 из двух SAS дисков 146.8GB, 10000RPM, кеширование включено

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
             40000M           76154  15 28177   3           72999   5 369.7   0

HP Proliant DL365 G1, RAID 5 из четырёх SAS дисков 146.8GB, 10000RPM, кеширование включено

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
             40000M           80360  54 41559  20           146629  32 176.5   1
 


Продажа серверов и комплектующих © 2018