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

Bog BOS: hardware:  Использование RAID контроллеров в Linux

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

Bog BOS: hardware: Использование RAID контроллеров в Linux

В статье описываются технические возможности некоторых RAID (Redundant Array of Independent Disk) контроллеров, драйверов и утилит. Массив дисков может позволить преодолеть ограничение максимальной ёмкости отдельных дисков, может обеспечить доступность данных при выходе одного или двух дисков из строя, может ускорить доступ к данным, может обеспечить непрерывное функционирование системы при сбое и даже в момент замены диска.

Наличие RAID - не повод для расслабления. Не забудьте также, что купленный для замены диск должен быть не меньше старого, а у некоторых производителей объём диска может меняться от версии к версии (фактически от партии к партии). Или можно поставить диск большего объёма и при инициализации массива использовать не всё доступное место. Массив, проинициализированный одним контроллером, скорее всего не будет распознан контроллером другого типа. Так что резервный RAID контроллер необходим. Многие контроллеры отказываются кешировать операции записи при отсутствии специальной батарейки (и это правильно). При этом скорость записи может снижаться очень сильно, так что стоимость закупаемой дополнительно батарейки необходимо учесть в смете расходов.

Первоначально "I" в слове RAID означало "Inexpensive" (дешёвых), но быстро выяснилось, что цена самого массива очень высока.

Общие сведения

Возможные причины потери данных:

Первоначально деление RAID массивов на уровни (типы) было предложено Гибсоном, Катцом и Патерсоном (University of California at Berkeley), часть предложенных уровней в настоящее время не используется, зато исторически добавились новые (скорость зависит от реализации и доступности кеширования записи, может отличаться от ожидаемой на порядок; терминология составных массивов - 10, 01, 0+1 - не устоялась окончательно):

Правильный расчёт размера полоски, размера блока файловой системы и группы блоков (ext2/3) в зависимости от типа нагрузки - большое искусство. Если полоска маленькая (относительно среднего размера файла), то получаем большую задержку и большую пропускную способность.

RAID может быть организован с помощью аппаратного контроллера (в этом случае массив представляется BIOS и ОС как один диск) или программного драйвера. В настоящее время многие изготовители оборудования выдают [полу]программный RAID (hostRAID) в качестве аппаратного, при этом поддержка аппаратной части в Linux отсутствует или плохо работает. Разработчики ядра Linux рекомендуют использовать для таких "недо-RAID" стандартный программный драйвер RAID (device-mapper и mdadm). Так как формат данных RAID не стандартизован (хотя стандарт DDF существует), то переносить диски от одного аппаратного контроллера в другой в общем случае нельзя. Требуется покупка нового контроллера того же типа. Программная реализация:

Кеширование записи на физических дисках включать нельзя - при сбое питания велик шанс порчи данных (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 позволит продолжить работу при сбое диска.

Intel RAID controller SRCS28X

Intel RAID controller SRCS28X. Отзывается на кличку LSI Logic MegaRAID LD (является аналогом MegaRAID SATA 300-8X). Интерфейс: PCI-X 1.0a (64 bit, 133 MHz, может работать на частоте 66 или 100 MHz). Содержит собственный процессор Intel 80331 (аппаратный XOR для RAID 4/5, 100 MHz?) и память под кеш (128MB embedded, unbuffered ECC DDR 333 SDRAM). Поддерживает 8 независимых SATA II портов на контроллере Marwell 88SX6081. Поддерживает SAF-TE. Обеспечивает RAID уровней 0, 1, 5 (инициализация в фоновом режиме), 10 и 50. Текущая версия прошивки 814b (у меня 813i/H430, т.к. в описании ничего полезного не заявлено). Инициализируется больше минуты.

Для включения кеширования записи необходимо докупить батарейку AXXRIBBU1 867464 INTEL (заряжается несколько часов; менять через 3 года). Держит содержимое кеша два дня (по неофициальной информации), при восстановлении питания записывает содержимое кеша записи на диск. Без неё кеширование записи write back нельзя включить из BIOS (можно сделать это из web консоли, но не советую). Скорость записи без кеширования для RAID-5 меньше 10 MB/sec, с кешированием - более 90 MB/s (переход на RAID-50 без кеширования скорость записи не увеличивает). Не помогает при пропадании питания при включённом кешировании на самих дисках (можно включить/выключить только в BIOS 813i/H430).

Поддержка горячей замены дисков (должна быть поддержка в самих дисках и корзине). Возможность задержки раскручивания дисков. Обеспечивается автоматическое восстановление при наличии запасных дисков (hot disk, hot spare). Запасной диск можно добавить позднее (в общий пул или для конкретного массива). При отсутствии запасного диска после сбоя второго диска массив RAID-5 переходит в состояние "Fail" и восстановлению не подлежит. При сбое одного диска (состоягие массива "Degradated") необходимо отключить его, вынуть неисправный диск, вставить новый, добавить его к массиву (в версии 813g/H425 не сработало). Автоматическое продолжение создания или восстановления массива RAID-5 после перезагрузки (необходимо указать при создании - FlexRAID PowerFail в BIOS, указывается доля расходуемой на это пропускной способности, при 30% и запрете кеширования записи восстановление диска 400 GB занимает больше суток, более 50% может не понравиться ОС, та же доля используется при проверке массива; собственно, создание массива RAID-5 есть непрерываемый режим проверки; при нахождении различия данные считаются правильными, а контрольная сумма перевычисляется).

Имеет собственный звучок (включается при переходе одного из массивов в состояние Fail или Error; отключается программно или в BIOS временно или навсегда; равномерные гудки - деградация, длинные - отказ, короткие - задействован резервный диск; на одном экземпляре звук очень тихий - как щелчки).

Чтобы войти в BIOS RAID необходимо нажать ^G при загрузке. Не срабатывает, если разрешена загрузка с CD-ROM или ATA и загрузка возможна (например, установлен загружаемый CD-ROM). Требуется отключить в BIOS материнской платы всякие там Quick boot, Fast boot, Silent boot и прочее. Можно сконфигурировать до 30 логических дисков на контроллер, до 32 физических дисков в массиве, не более 2 TB на логический диск. Логические диски можно удалять только в порядке обратном порядку создания. Логический диск (в реальности, хост) конструируется из массивов (необходимо для RAID-10 и 50), может состоять только из части массива. Массив конструируется из физических дисков. Логический диск после создания должен быть проинициализирован (заполняется нулями). BIOS позволяет объединять/заменять физические диски слегка различающегося размера (coercion) округляя вниз до 128 MB или 1 GB (GB = 10^9), но это надо делать в самом начале. Все настроечные данные хранятся на диске и в NVRAM (настройка контроллера BIOS Config Auto Selection позволяет выбирать при их несовпадении).

Политика ввода/вывода: с использованием кеша, прямой доступ. Кеширование чтения: обычное кеширование, предварительное чтение, адаптивное кеширование. Кеширование записи: write back (контроллер рапортует о завершении записи сразу после записи в кеш), write through (контроллер рапортует о завершении записи после передачи на диск). Кеширование записи можно включать только при наличии батарейки (см. выше). Кеширование записи дисков необходимо выключить.

По типу управления входит в семейство Software Stack 2 (нельзя взять диск из массива, созданного контроллером семейства Software Stack 1). Официально поддерживается RHEL AS 4.0 (включая EM64), Red Hat 8.0 и 9 (megaraid_mbox). CentOS 4.2 нормально устанавливается на массив с использованием встроенного драйвера. Управление осуществляется исключительно с помощью web-консоли (ir2_Linux_Webconsole_v2.8-00-5.tgz). Для этого на компьютер с RAID контроллером устанавливается управляющее Java-приложение (вместе с собственной JVM!), которое изображает HTTP-сервер (порт 3570 для HTTP и --beep-- динамически выделяемый порт для TLS, номера портов и другие параметры хранятся в файле /opt/SVR/svr.properties, создаются файлы "/usr/share/applications/Start Web Server.desktop" и "/usr/share/applications/Stop Web Server.desktop") - 60MB в /opt/SVR (это имя заносится в /etc/profile). Сервис называется reboot ( --beep-- ; при установке в /etc/rc6.d/ делается ссылка S50reboot на ../init.d/reboot со всеми вытекающими проблемами при перезагрузке: дважды --beep--). HTTP-сервер получает информацию от RAID сервера (порт 3571, /usr/sbin/RSLinux, сервис rslinux, /usr/sbin/K255megadev, /usr/sbin/StopServer, /etc/rc.d/init.d/rslinux, /dev/megadev0, /var/log/PollMessages.log, /var/log/RSMessages.log, /var/log/javaraid.log, иногда подвисает при запуске, так что автоматический запуск при загрузке лучше не делать). Для работы RAID сервера требуется пакет compat-libstdc++-296. На управляющем компьютере никаких специальных программ устанавливать не нужно (только браузер с включённым JavaScript). Имеется также сервер регистрации, который позволяет управлять RAID массивами на хостах с динамическими IP (управляющее приложение на таком хосте извещает сервер регистрации о своём адресе - адрес сервера регистрации в /etc/regsrv.dat; при установке необходимо указать networking вместо Standalone. Установка: ./RAID_Web_Console_Linux.bin -console. Запуск: /opt/SVR/binstartup.sh (/opt/SVR/binshutdown.sh). Рекомендуется сразу озаботиться правами доступа к /opt/SVR, т.к. после установки любой может запустить или остановить web консоль. Кстати, защиты доступа на чтение по HTTP - нет. Можно запустить только одну сессию с доступом на запись. Пароль доступа по сети устанавливается утилитой /usr/sbin/SetPass (закрыть /etc/raidpass.val!). Можно сохранить (в двоичном виде) конфигурацию контроллера и загрузить её в дальнейшем. Нет ни возможности узнать серийные номера, ни возможности помигать лампочками, чтобы физически идентифицировать сбойнувший диск. Фоновые задания начинают показываться (Device Progress) только после достижения 1%. Попытка переставить диск с одного контроллера (813i) на другой (813g) кончилась плохо (пришлось заполнять диск мусором с помощью badblocks). Поддержки SMART нет. Управление сделано настолько неудобно, что возникает мысль, что это неслучайно. К счастью, утилиты megarc и megamgr от LSI Logic MegaRAID подходят и к этому контроллеру (однако серийные номера и информацию SMART увидеть всё равно невозможно).

Замена firmware: скопировать 813I.rom (ir2_SRCS28X_FW_v813i_package_v1.0.zip) на флоппи, скопировать irflash (заменить внутри "/usr/sbin" на "./") и irflash.bin на флоппи (irflash-4.01.00-0.i386.rpm), загрузиться (CentOS 4.2 x86_64 не подошёл), cd флоппи, ./irflash -p, ввести 813I.rom.

Результаты тестирования с помощью bonnie:

SE7230NH1LX (E7230), Pentium D 3000 MHz, RAM: 1 GB, 6 Seagate ST3400832AS (400GB)

RAID-5 6x400G Write Thru,  No Read Ahead, Direct I/O, hd cache - Write Thru
              ---Sequential Output (nosync)--- ---Sequential Input-- --Rnd Seek-
              -Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --04k (03)-
Machine    MB K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU   /sec %CPU
m7     1*4000  7682 16.5  7259  2.9  5879  1.9 23415 41.5 72048 10.0  304.0  1.0

RAID-5 6x400G Write Thru,  No Read Ahead, Cached I/O, hd cache - Write Thru
              ---Sequential Output (nosync)--- ---Sequential Input-- --Rnd Seek-
              -Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --04k (03)-
Machine    MB K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU   /sec %CPU
m7     1*4000  7196 15.4  6870  2.7  5676  1.9 28476 50.7 60275  8.4  307.9  0.9

RAID-5 6x400G Write Thru, Adaptive ReadAhead, Cached I/O, hd cache - Write Thru
              ---Sequential Output (nosync)--- ---Sequential Input-- --Rnd Seek-
              -Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --04k (03)-
Machine    MB K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU   /sec %CPU
m7     1*4000  7304 15.7  7056  2.8  5993  2.0 26043 46.2 56675  8.1  314.2  0.9

RAID-5 6x400G Write Back, Adaptive ReadAhead, Cached I/O, hd cache - Write Thru
              ---Sequential Output (nosync)--- ---Sequential Input-- --Rnd Seek-
              -Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --04k (03)-
Machine    MB K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU   /sec %CPU
m7     1*4000 45858 97.6 109810 43.5 34725 10.5 34700 61.4 57584  8.1  345.3  1.0

RAID-5 6x400GB Write Thru, Adaptive ReadAhead, Cached I/O, hd cache - Write-Back
              ---Sequential Output (nosync)--- ---Sequential Input-- --Rnd Seek-
              -Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --04k (03)-
Machine    MB K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU   /sec %CPU
RAID   1*4000 15368 34.0 16212  6.6 13546  4.4 32698 63.0 56587  8.1  310.8  0.9

RAID-50 2x3x400GB Write Thru, Adaptive ReadAhead, Cached I/O, hd cache - Write-Back
              ---Sequential Output (nosync)--- ---Sequential Input-- --Rnd Seek-
              -Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --04k (03)-
Machine    MB K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU   /sec %CPU
m7     1*4000 13847 30.5 13987  5.8 11277  3.7 29361 55.6 50942  7.3  334.0  1.0

RAID-50 2x3x400GB Write-Back, Adaptive ReadAhead, Cached I/O, hd cache - Write-Back
              ---Sequential Output (nosync)--- ---Sequential Input-- --Rnd Seek-
              -Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --04k (03)-
Machine    MB K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU   /sec %CPU
m7     1*4000 44556 98.2 94405 40.3 31298  9.6 31920 60.5 51559  7.3  356.3  1.3

LSI Logic MegaRAID SATA300-8X

LSI Logic MegaRAID SATA300-8X (аналог Intel RAID controller SRCS28X). Интерфейс: PCI-X 1.0a (64 bit, 133 MHz, может работать на частоте 66 или 100 MHz). Содержит собственный процессор Intel 80331 (аппаратный XOR для RAID 4/5, 100 MHz?) и память под кеш (128MB embedded, unbuffered ECC DDR 333 SDRAM). Поддерживает 8 независимых SATA II портов (с NCQ и TCQ) на контроллере Marwell 88SX6081 (нумеруются снизу и от платы). Поддерживает SAF-TE (управление контроллером ящика, I2C). Обеспечивает RAID уровней 0, 1, 5 (инициализация в фоновом режиме), 10 и 50. Текущая версия прошивки 814B, BIOS H431, U828, WebBIOS 3.23 (813G загружался быстрее, а задержка раскрутки дисков так и не появилась). Инициализируется больше минуты.

Для включения кеширования записи необходимо докупить батарейку LSIBBU03 (640 mAH, 32 часа) или LSIiBBU01 (880 mAH, 72 часа, автоматический заряд и информация о напряжении, температуре и токе). Заряжается несколько часов; менять через 3 года. Держит содержимое кеша, при восстановлении питания записывает содержимое кеша записи на диск. Без неё кеширование записи write back нельзя включить из BIOS. Скорость записи без кеширования для RAID-5 меньше 10 MB/sec, с кешированием - более 90 MB/s (переход на RAID-50 без кеширования скорость записи не увеличивает). Не помогает при пропадании питания при включённом кешировании на самих дисках (можно включить/выключить только в BIOS 813i/H430).

Поддержка горячей замены дисков (должна быть поддержка в самих дисках и корзине). Возможность задержки раскручивания дисков. Обеспечивается автоматическое восстановление при наличии запасных дисков (hot disk, hot spare). Запасной диск можно добавить позднее (в общий пул или для конкретного массива). При отсутствии запасного диска после сбоя второго диска массив RAID-5 переходит в состояние "Fail" и восстановлению не подлежит. При сбое одного диска (состояние массива "Degradated") необходимо отключить его, вынуть неисправный диск, вставить новый, добавить его к массиву (в версии 813g/H425 не сработало). Автоматическое продолжение создания или восстановления массива RAID-5 после перезагрузки (необходимо указать при создании - FlexRAID PowerFail в BIOS, указывается доля расходуемой на это пропускной способности, при 30% и запрете кеширования записи восстановление диска 400 GB занимает больше суток, более 50% может не понравиться ОС, та же доля используется при проверке массива; собственно, создание массива RAID-5 есть непрерываемый режим проверки; при нахождении различия данные считаются правильными, а контрольная сумма перевычисляется).

Имеет собственный звучок (включается при переходе одного из массивов в состояние Fail или Error; отключается программно или в BIOS временно или навсегда; равномерные гудки - деградация, длинные - отказ, короткие - задействован резервный диск; на одном экземпляре звук очень тихий - как щелчки).

Чтобы войти в настройки RAID необходимо нажать ^M (текстовый режим) или ^H (графический режим) при загрузке. Не срабатывает, если разрешена загрузка с CD-ROM или ATA и загрузка возможна (например, установлен загружаемый CD-ROM). Требуется отключить в BIOS материнской платы всякие там Quick boot, Fast boot, Silent boot и прочее. Можно сконфигурировать до 30 логических дисков на контроллер, до 32 физических дисков в массиве, не более 2 TB на логический диск. Логические диски можно удалять только в порядке обратном порядку создания. Логический диск (в реальности, хост) конструируется из массивов (необходимо для RAID-10 и 50), может состоять только из части массива. Массив конструируется из физических дисков. Логический диск после создания должен быть проинициализирован (заполняется нулями). BIOS позволяет объединять/заменять физические диски слегка различающегося размера (coercion) округляя вниз до 128 MB или 1 GB (GB = 10^9), но это надо делать в самом начале. Все настроечные данные хранятся на диске и в NVRAM (настройка контроллера BIOS Config Auto Selection позволяет выбирать при их несовпадении).

Политика ввода/вывода: с использованием кеша, прямой доступ. Кеширование чтения: обычное кеширование, предварительное чтение, адаптивное кеширование. Кеширование записи: write back (контроллер рапортует о завершении записи сразу после записи в кеш), write through (контроллер рапортует о завершении записи после передачи на диск). Кеширование записи можно включать только при наличии батарейки (см. выше). Кеширование записи дисков необходимо выключить.

Мультипликатор портов (до 4, PM-ENBL, нельзя включать при наличии логических дисков, требуется перезагрузка).

С точки зрения драйверов и утилит - аналог Intel RAID controller SRCS28X, так что можно использовать megamgr и megarc.

LSI Logic (Symbios Logic) MegaRAID SATA150-6

LSI Logic (Symbios Logic) MegaRAID SATA150-6 SER523 Rev B2. Интерфейс: PCI 2.2 66 MHz, 64-bit, 3.3V или 5V (для 32-битной шины необходим 3-позиционный джампер). Содержит собственный процессор Intel GC80302 (аппаратный XOR) и память под кеш (64 MB, 66 MHz, ECC SDRAM). Поддерживает 6 независимых SATA-1 портов (150 MB/s, 3 контроллера Silicon Image SATALink Sil3112ACT144, порт 0 с края корпуса). Джамперы: PCI 32-bit, использовать ли BIOS, Mode 0 (?), 3.3V load sharing (питание снимается с одновременно с линий 3.3V и 5V, иначе только с линии 5V). Поддерживает протокол SAF-TE (интерфейс I2C с процессором SEP стойки). Обеспечивает RAID уровней 0, 1, 5 (инициализация в фоновом режиме), 10 и 50. Текущая версия прошивки 713N (не обновлялась с 2004 года), BIOS Version : G119.

Для включения кеширования записи необходимо докупить батарейку LSIBBU01 (NiMH, 600 mAH, быстрая зарядка - 6 часов - не сработала (из-за температуры выше 40?); менять ежегодно (?!) или через 1000 циклов зарядки - счётчик доступен в megamgr). Держит содержимое кеша 53 часа (свежая полностью заряженная батарейка, обещание изготовителя), при восстановлении питания записывает содержимое кеша записи на диск, имеется интерфейс для подключения индикатора наличия незаписанных данных в кеше.. Без неё кеширование записи write back нельзя включить. Скорость записи без кеширования для RAID-5 меньше 6 MB/sec, с кешированием - более 40 MB/s. Не помогает при пропадании питания при включённом кешировании на самих дисках.

Поддержка горячей замены дисков (должна быть поддержка в самих дисках и корзине). Возможность задержки раскручивания дисков (не работает). Обеспечивается автоматическое восстановление при наличии запасных дисков (hot disk, hot spare). Запасной диск можно добавить позднее (только общий пул). При отсутствии запасного диска после сбоя второго диска массив RAID-5 переходит в состояние "Fail" и восстановлению не подлежит. При сбое одного диска (состояние массива "Degradated") необходимо отключить его, вынуть неисправный диск, вставить новый, добавить его к массиву. Возможно автоматическое продолжение создания или восстановления массива RAID-5 после перезагрузки, необходимо указать при создании FlexRAID PowerFail в BIOS. Указание доли пропускной способности, расходуемой на восстановление. При 30% и запрете кеширования записи восстановление диска 400 GB занимает больше суток, более 50% может не понравиться ОС. Та же доля используется при проверке массива (создание массива RAID-5 есть непрерываемый режим проверки). При нахождении различия данные считаются правильными, а контрольная сумма перевычисляется, если при чтении произошла ошибка ввода, то данные перевычисляются из контрольной суммы, а блок переназначается на резервную дорожку. Рекомендуется периодически делать проверку массива, т.к. если "плохой" блок "проявится" при восстановлении, то данные будут потеряны.

Имеет собственный звучок (включается при переходе одного из массивов в состояние Fail или Error; отключается программно или в BIOS временно или навсегда; равномерные гудки - деградация, длинные - отказ, короткие - задействован резервный диск).

Настройка во время загрузки BIOS - ^M, графический режим настройки - ^H (дополнительные функции - отключение BIOS, требуется при загрузке не с массива; coercion; отключение восстановления данных при проверке; остановка при ошибке в конфигурации; выбор конфигурации при расхождении между версиями в NVRAM и на диске; задержка раскрутки; отключение автовосстановления). Можно сконфигурировать до 40 логических дисков на контроллер, до 32 физических дисков в массиве, не более 2 TB на логический диск. Логические диски можно удалять только в порядке обратном порядку создания. Логический диск (в реальности, хост) конструируется из массивов (необходимо для RAID-10 и 50), может состоять только из части массива или частей массива (даже несмежных), но на реконфигурацию такого логического диска накладывается множество ограничений. Массив конструируется из физических дисков. Логический диск после создания должен быть проинициализирован (заполняется нулями). BIOS позволяет объединять/заменять физические диски слегка различающегося размера (coercion) округляя вниз до 128 MB или 1 GB (GB = 10^9), но это надо делать в самом начале. Все настроечные данные хранятся на диске и в NVRAM (настройка контроллера BIOS Config Auto Selection позволяет выбирать при их несовпадении). Это позволяет перемещать диск внутри контроллера. Чтобы переместить массив целиком на новый контроллер (того же типа), необходимо очистить конфигурацию нового контролера, диски необходимо подключать в те же самые позиции, что и на сгоревшем контроллере. Если в кеше записи остались данные, а батарейный модуль не типа TBBU, то они при смене контроллера будут потеряны. Реконфигурацию массива (добавление диска, смена типа RAID) нельзя прерывать и перезагружаться (что происходит с данными не уточняется ;).

Политика ввода/вывода: с использованием кеша, прямой доступ. Кеширование чтения: обычное кеширование, предварительное чтение, адаптивное кеширование. Кеширование записи: write back (контроллер рапортует о завершении записи сразу после записи в кеш), write through (контроллер рапортует о завершении записи после передачи на диск). Кеширование записи можно включать только при наличии батарейки (см. выше). Кеширование записи дисков необходимо выключить.

Заявлена поддержка RHL 7.3 и 8.0. Работает в RHL 9 (состояние /proc/megaraid) и в CentOS 4.2 (модули megaraid_mbox и megaraid_mm, управление megarc и megamgr).

Материнская плата S875WP1, Pentium 4 3000 MHz, 1GB

RAID-5 5x400GB Write Thru, Adaptive ReadAhead, Cached I/O, hd cache - off
              ---Sequential Output (nosync)--- ---Sequential Input-- --Rnd Seek-
              -Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --04k (03)-
Machine    MB K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU   /sec %CPU
       3*2000  5326 12.6  5292  2.5  4753  1.8 25555 51.8 49339  7.7  253.6  0.8

RAID-5 5x400GB Write Back, Adaptive ReadAhead, Cached I/O, hd cache - off
              ---Sequential Output (nosync)--- ---Sequential Input-- --Rnd Seek-
              -Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --04k (03)-
Machine    MB K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU   /sec %CPU
       2*2000 34438 85.4 42080 19.4 14883  5.0 24167 76.0 27510  4.2  249.9  0.8

Утилита LSI Logic megarc

megarc 1.11 (ut_linux_megarc_1.11.zip) позволяет мониторить и управлять из командной строки RAID-контроллерами Intel SRCS28X, MegaRAID SATA 300-8x и MegaRAID SATA150-6. Нет работы с батарейкой, получения серийного номера и данных SMART. Не все обещанные (и имеющиеся в BIOS утилите) функции имеются: настройка быстрой инициализации; задержка раскручивания диска; настройка интервала сброса кеша; отключение BIOS; автоматическое восстановление; coercion; выбор между конфигурацией в NVRAM и на диске; прерывание фоновой инициализации и проверки; мультипликатор портов; NCQ. Содержит скрипт megarc, который создаёт /dev/megadev0 и запускает megarc.bin (собран статически). При запуске в текущем каталоге создаётся файл megarc.log. Краткую справку можно получить задав параметр "?". Между ключом и значением параметра пробел ставить не надо.

Параметры (номер диска для SATA контроллеров выглядит, например, как 0:4):

Команды мониторинга и управления (команда указывается первым ключом; -aN указывать почти всегда; команды конфигурации массива описаны в документации в формате .doc ;):

Утилита LSI Logic megamgr

megamgr 5.20 (ut_linux_mgr_5.20.zip) - интерактивная утилита (curses) позволяющая настроить контроллер и сконфигурировать массив. В отличие от megarc умеет показывать состояние батарейки. По функциям аналогичен текстовой версии в BIOS (т.е. нет функции миграции). Некоторые управляющие клавиши:

Обещанных в документации патрульного чтения, SAF-TE, FlexRAID Virtual Sizing не обнаружено.

Реконструкция. F2 - показать параметры логического устройства. Пробел - выбрать диск для удаления (из RAID-0 удалить диск нельзя) или добавления (пометка не ставится!). Enter - выбрать логическое устройство. Следующий Enter - войти в меню выбора режима. Здесь можно преобразовать RAID-5 в RAID-0 (10 часов на массив из 5x73GB, 293GB в 349GB, Linux не заметил изменения размера устройства - придётся перезагрузиться), поменять размер полоски и начать реконструкцию. Прерывать реконструкцию нельзя. После этого можно добавить диск и преобразовать массив обратно в RAID-5. Linux не замечает изменения размера устройства - приходится перезагружаться, затем использовать LVM.

LSI Logic MegaRAID Configuration Console Package

Аналог (точнее прародитель) вебконсоли от Intel. Устанавливать не стал.

megamon

Мониторинг состояния RAID для LSI Logic (Intel ???, Dell Perc) - вывод состояния массива на syslog, извещение администратора о неприятностях (включая SMART и состояние батареи), планирование проверки массива. Устанавливал из комплекта Dell perc-cerc-apps-6.03-A06.tar.gz, который содержит пакет Megamon-4.0-0a.i386.rpm. Пробный запуск: /etc/rc.d/init.d/raidmon start (после тестирования: chkconfig --add raidmon). Настроечный файл: /etc/megamon.conf (список e-mail адресов получателей извещений). Интервал опроса контроллера задаётся в файле /etc/megapoll.conf в виде: $pollingInterval число-секунд. Журнал: /var/log/megaserv.log и /etc/megamonitor/monitor (?!). Документация в комплекте отсутствует, но есть у добрых японцев, а также ключ -help у команды MegaCtrl:

Упал при извлечении диска (при этом RAID не перешёл в состояние critical, зато файловая система стала read-only со всеми вытекающими последствиями, на всякий случай отключил):

MegaServ[4845]: segfault at 0000000000000046 rip 000000000807851c rsp 00000000ffffd0a0 error 4

LSI Logic GAM

GAM (Global Array Manager) - "тяжёлый" пакет управления большим количеством контроллеров (агент, SNMP, сервер управления).

Power Console Plus не имеет версии под Linux (позволяет преобразовать RAID0 в RAID1 или RAID5 добавлением диска; позволяет преобразовать деградировавший RAID5 в оптимальный RAID0 с удалением диска; позволяет преобразовать RAID5 в RAID0; позволяет мониторить производительность; позволяет остановить диск; позволяет немедленно записать кеш на диск): клиент (позволяет мониторить зарегистрированные сервера), сервер (обеспечивает интерфейс с контроллером), сервер регистрации, SNMP агент (обеспечивает сетевой интерфейс), монитор.

Intel RAID controller SRCS14L

Intel RAID controller SRCS14L Низкопрофильная PCI 2.2 (64 bit, 66 MHz) плата, с собственным процессором (Intel 80303, аппаратный XOR для RAID 4/5, 100 MHz) и памятью под кеш (64MB embedded, unbuffered PC100 ECC SDRAM), поддерживает 4 независимых SATA порта (A:0, A:1, B:0, B:1) на двух контроллерах (Silicon Image Sil3112A). Переключатели. Имеет собственный звучок (80 dB, включается при переходе одного из массивов в состояние Fail или Error; отключается только програмно - Advanced Setup > Configure Controller > F4) и индикаторы. Обеспечивает JBOD, chain (disk span), RAID уровней 0, 1, 5, 10, до 2 массивов. Физический диск перед использованием инициализируется (первая инициализация RAID-5 деструктивна, при этом выдаётся неверное сообщение; повторная инициализация на том же контроллере - не деструктивна), чтобы перенести RAID на другой компьютер, он должен иметь такой же контроллер (SRCS14L), хотя в режимах RAID-0 и RAID-1 таблица разделов стандартная. Все настроечные данные хранятся в 2 экземплярах на каждом диске. Логический диск конструируется из физических (физического), может содержать часть физического диска (полезно, если принесённый на замену диск окажется на пару мегабайт меньше исходных). Каждый массив содержит не менее 2 дисков (логических) и представляется системе как SCSI диск (Host Drive, /dev/sda и т.д.) или 2 диска (после расширения или разделения). Похоже, что разработчики сами путаются между физическими, логическими и хост устройствами (содрали у IBM не разобравшись?), так что надо быть осторожнее. Порядок хостовых дисков можно изменить (загрузочный только из BIOS). При удалении хостового диска, имеющего напарника, удаляются оба устройства (с потерей всех данных). Обеспечивается автоматическое восстановление при наличии запасных дисков (hot disk, hot spare). Запасной диск можно добавить позднее (в общий пул или для конкретного массива). При отсутствии запасного диска после сбоя одного диска массив переходит в состояние "Fail", необходимо отключить его (BIOS или storcon), вынуть неисправный диск, вставить новый, добавить его к массиву (перестроение 114 ГБ заняло 12 часов). При этом обеспечивается горячее подключение PCI-платы (требуется поддержка со стороны материнской платы и ОС) и дисков (сам диск должен это уметь). При сбое двух дисков в массиве он переходит в состояние "Error", данные теряются. Описание и установка. По типу управления входит в семейство Software Stack 1. Официально поддерживается Red Hat 7.3, 8.0 (ядро 2.4.18-18.8.0) и 9 (драйвер gdth (GDT-HA, 3.04 для ядра 2.6.8.1), /proc/scsi/gdth/, имеет множество не особо полезных параметров). Конфигурация, управление, мониторинг и статистика осуществляется с помощью BIOS (Ctrl-G при загрузке, некоторые возможности - destructive build, очистка журнала, изменение номера загрузочного диска, форматирование, разделение и слияние хост дисков, управление разделами - доступны только из BIOS) или утилитой storcon 2.16.6. Утилита поставляется в виде пакетов различного типа (rpm, deb, tar.gz), но в действительности оттуда необходимо извлечь программу storcon и документацию storcon.8 (не содержит ничего полезного). Имеется также утилита удалённого управления, о которой лучше сразу забыть. Функции:

Утилиту, позволяющую получить доступ к контроллеру из скриптов, найти не удалось. Видимо, опять придётся искать аналог как в случае с SRCS28X.

Текущая версия firmware 2.36.02-R048, имеется 2.42.02-R07A. Для обновления требуется само firmware и Firmware Recovery Utility (FRU), создающая загружаемую дискету, или System Update Package (SUP) создающий загружаемый CD-ROM. Кстати, найти их на сайте Intel можно только гуглом, ссылки на странице поддержки контроллера ведут в никуда. Чтобы посмотреть Release Notes фирма Intel предлагает записать ISO на CD-R, загрузиться с него и выбрать соответствующий пункт из меню. Приколисты. Самое смешное, что выводимый в результате текст не содержит никакой информации об изменениях в firmware.

История: деградировавший БП привёл к зацикливанию контроллера во время POST, так что не было доступа даже к обычному BIOS.

Результаты тестирования с помощью bonnie 1.4:

i875, Intel(R) Pentium(R) 4 CPU 2.80GHz, RAM: 1 GB, 4 Seagate ST3120026AS (120GB), RH 9, 2.6.8.1

RAID-5 4x120G Delayed Write - off, hd cache - off
              ---Sequential Output (nosync)--- ---Sequential Input-- --Rnd Seek-
              -Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --04k (03)-
Machine    MB K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU   /sec %CPU
       1*2000  7010 98.8 13289  2.8  8100  2.1  6153 84.9 36931  4.3  263.4  0.4

RAID-5 4x120G Delayed Write - on, hd cache - off
              ---Sequential Output (nosync)--- ---Sequential Input-- --Rnd Seek-
              -Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --04k (03)-
Machine    MB K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU   /sec %CPU
       1*2000  6921 97.9 11782  2.5  9164  2.3  6023 83.3 43438  4.9  265.3  0.5

RAID-5 4x120G Delayed Write - on, hd cache - on
              ---Sequential Output (nosync)--- ---Sequential Input-- --Rnd Seek-
              -Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --04k (03)-
Machine    MB K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU   /sec %CPU
       1*2000  7011 99.2 20625  4.4 16007  4.2  6618 91.4 39487  4.7  274.1  0.5

Mylex AcceleRAID 170

Mylex (в девичестве BusLogic, потом IBM, ныне часть LSI Logic) AcceleRAID 170 на базе Intel 960RM (100 MHz) и QLogic ISP 10160A, плата PCI 2.2 (33 MHz, 32 бит, 5V), один канал Ultra 160 SCSI (внешний 68 Pin, внутренний 68 Pin), LVD, 80 MHz, 16 бит, глубина очереди - 16, контроллер имеет идентификатор 7. На дисках необходимо отключить терминаторы (кроме последнего активного терминатора в цепочке) и включить termination power. Контроллер имеет автоматический терминатор с распознаванием SE и LVD. 32 MB ECC DIMM на неиспользуемый из-за отстутствия батарейки кеш (можно увеличить до 128 MB). Индикация LED: Single Ended, LVD и сбой. Разъём под LED индикации несброшенного кеша. Поддерживает RAID 0, 1, 0+1 (Mylex RAID 6), 5, 10, 50 и JBOD (Mylex RAID 7), диски горячего резерва (standby, hot spare, при сбое диска данные перевычисляются и записываются на резервный диск, резервный диск переводится в состояние Online, сбойнувший диск вынимается, вставляется новый и помечается как резервный) и автоматическое восстановление массива (требуется SAF-TE, по умолчанию выключено). Фоновая инициализация. PCI Hot Plug (только замена; требуется поддержка со стороны материнской платы и ОС). Hot Swap: при отказе диска контроллер выдаёт предупреждение оператору, отказавший диск вынимается, вставляется заменяющий диск, оператор выдаёт команду перестроения массива (в EzAssist). Логический диск не более 2 ТБ. Не более 32 логических дисков. Поддержка SAF-TE (по SCSI) и SES. Возможность перемещать диски внутри контроллера. Поддержка SMART. Кеширование записи write-through (без кеширования) и write-back (с кешированием). Конфигурация массивов и настройка контроллера хранится в NVRAM и на дисках (COD), образующую массив группу дисков можно переносить на аналогичный контроллер. При ошибке чтения блока данные считываются с зеркала или перевычисляются с других дисков.

firmware 7.00-03 (имеется 7.02), BIOS 6.01-30, EzAssist 3.00-02 (утилита конфигурации в BIOS). Вызов утилиты настройки BIOS при загрузке - Alt-M (отключение BIOS - BIOS требуется для загрузки с диска или CD-ROM, подключённого к контроллеру; разрешить загрузку с CD-ROM, подключённого к контроллеру; геометрия диска 2 GB (128/32) или 8 GB (255/63) - при изменении требуется форматирование файловой системы, загрузочный раздел должен находиться в первых 2 или 8 GB; для больших дисков необходимо поставить 8 GB, иначе могут быть проблемы). Вызов утилиты конфигурирования массива (RAID EzAssist) при загрузке - Alt-R. Настройка параметров контроллера (TAB, +, -, пробел): автоматическое восстановление массива (отслеживает удаление неисправного диска и вставку нового, требуется SAF-TE); выделяемая на восстановление или расширение (MORE) доля пропускной способности (50); инициализация в фоновом режиме (включено) и доля пропускной способности на него (50); доля пропускной способности на проверку (50); округление (coercion) размера физического диска (запрещено); параметры постепенного запуска дисков; регулярное тестовое чтение данных и интервал (patrol read, выключено); SMART (IEC, PFA; выключено). 3 метода конфигурации массива (Drive Groups, Packs): автоматическая (один логический диск из всех физических), с помощью проводника, ручная. Состояния физического диска: READY (работоспособен, но незадействован), ONLINE, STANDBY (горячий резерв), OFFLINE (добавлен в массив вместо вышедшего из строя, но ещё не синхронизирован), REBUILD (в процессе восстановления). Состояние дисков хранится в NVRAM. Физические диски объединяются в массив. Из массива можно сделать один или несколько логических дисков. К массиву (не JBOD, RAID 10, 30 или 50) можно добавить новый диск, но на нём придётся сделать новый логический диск. Можно добавить диск горячего резерва для конкретного массива или в общий пул или убрать его из пула. Можно делать логический диск из нескольких массивов (spanning, в массивах должно быть одинаковое число дисков; RAID 10, 50; необходимо озаботиться до создания первого массива; к связанным массивам нельзя добавлять диски). Состояния логического (системного) диска: ONLINE, CRITICAL (отказ одного диска), OFFLINE (отказ 2 дисков). EzAssist позволяет обновить с гибкого диска firmware, BIOS и сам EzAssist (FAT-12, без поддиректорий, имя файла запрашивается, при вводе необходимо указывать "A:\", автораспознавание содержимого), сохранить в файл и восстановить конфигурацию контроллера и массива, очистить конфигурацию и вывести её в файл в читаемом виде. Мониторинг и управление: статус массива и информация о нём (свободное место, физические диски); статус логического диска и информация о нём (уровень RAID, объём, физические диски (можно поморгать лампочками), тип кеширования записи (можно изменить), размер страйпа (можно изменить, данные теряются), размер строки кеша); список ошибок логического диска; запустить фоновую задачу для логического диска: проверка состояния (сравнение данных на зеркале или сравнение контрольных сумм, с исправлением или без), пересчёт контрольных сумм, инициализация логического диска; прервать фоновую задачу; посмотреть состояние фоновых задач. Для физического диска можно посмотреть статус и информацию (изготовитель, модель, версия прошивки, объём, канал и идентификатор, кеширование чтения (можно изменить), кеширование записи (можно изменить)), получить список плохих блоков (первичный и дополнительный), посмотреть и обнулить счётчики ошибок (чётности, исправляемых, фатальных; в моём экземпляре вместо кнопки "Reset" оказалась кнопка "Ok", которая не обнуляет счётчики), поморгать лампочками, запустить фоновую задачу восстановления массива (пересчёт данных и запись их на физический диск, находящийся в состоянии Offline; необходимо прервать, чтобы перезагрузиться - почему тогда задача называется фоновой?), запустить фоновую задачу низкоуровневого форматирования (эту задачу прервать нельзя), перевести диск из Online в Offline, перевести диск из Offline в Online (рекомендуется задуматься о последствиях и отказаться от неразумного желания), посмотреть SCSI настройки: скорость, глубина очереди заданий (можно изменить), ширина шины, сканировать SCSI шину в поисках новых устройств. В реальности никаких фоновых задач нет - задачу необходимо остановить перед перезагрузкой.

Модуль ядра 2.4 и 2.6 DAC960 (описание - README.DAC960; DAC - Disk Array Controller). Поддерживает eXtremeRAID 1100/2000/3000, AcceleRAID 352/170/160, AcceleRAID 250/200/150, DAC960PJ, DAC960PG, DAC960PU, DAC960PD, DAC960PL, DAC960P. Имена дисков выглядят как /dev/rd/c0d0p1 (SCSI подсистема не используется, НМЛ и CD-ROM не поддерживаются), имена дисков не меняются при сбое диска с меньшим номером. Блочное устройство имеет major 48 для первого контроллера (55 для восьмого), minor состоит из 5 старших бит для номера логического диска и 3 младших бит для номера раздела (т.е. не более 7 разделов на логический диск, расширенный раздел тоже надо учитывать). Файл /proc/rd/status содержит краткую информацию о состоянии массива (OK, ALERT). Обновляется каждые 10 секунд. Файл /proc/rd/c0/current_status содержит информацию о физических дисках (канал, идентификатор, изготовитель, модель, серийный номер, интерфейс, состояние, объём), настройках контроллера (тип, версия прошивки, количество каналов, объём кеша, размер очереди команд контроллера и драйвера, наличие SAF-TE) и логических дисков (имя устройства, состояние, объём, размер полоски, длина строки кеша, кеширование чтения, кеширование записи), текущих фоновых заданиях. Обновляется каждые 60 секунд. Изменения состояния записываются в syslog (подсистема kern, сообщения начинаются со строки 'DAC960#'). Также в syslog выдаются сообщения о проблемах с дисками (включая "мягкие" ошибки чтения). При загрузке сообщения об обнаруженных физических и логических дисках и их состоянии записывается в /var/log/dmesg. Файл /proc/rd/c0/initial_status содержит аналогичную информацию на момент загрузки. Файл /proc/rd/c0/user_command позволяет передавать команды контроллеру и считывать результат их выполнения (записывается также в syslog):

fdisk, grub и lilo умеют работать с DAC960. RH9 и Centos 4 ставятся на раздел логического диска, подключённого к контроллеру типа DAC960. Рекомендуется создавать файловую систему ext3fs с параметрами "mke2fs -b 4096 -R stride=16" (при стандартном размеры полоски 64 KB).

Имеется gam сервер под Linux (Global Array Manager, 5.00-17 от 2002-11-15, не пробовал, требуется wine?!). nvram.exe - утилита (DOS 16-bit) для доступа к журналу событий в NVRAM.

Материнская плата Intel D865PERL, Pentium 3000

cache: disable, RAM: 512 MB

              ---Sequential Output (nosync)--- ---Sequential Input-- --Rnd Seek-
              -Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --04k (03)-
Machine    MB K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU   /sec %CPU
t03    1*2000 14435 36.7 13931  6.6 10672  3.7 22210 44.6 42235  6.4  307.0  1.0

cache: disable, RAM: 1 GB

              ---Sequential Output (nosync)--- ---Sequential Input-- --Rnd Seek-
              -Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --04k (03)-
Machine    MB K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU   /sec %CPU
t03    2*2000 13443 34.3 14106  6.7 10606  3.6 23517 47.1 42803  6.4  239.2  1.0

cache: Write-Back, RAM: 1 GB

              ---Sequential Output (nosync)--- ---Sequential Input-- --Rnd Seek-
              -Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --04k (03)-
Machine    MB K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU   /sec %CPU
t03    2*2000 18637 48.2 18455  9.3 12742  4.3 22698 45.2 42479  6.3  248.9  1.1

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" при использовании последовательного порта, глотаются символы при вводе). Интерфейс в виде меню или командный режим. При работе в командном режиме необычно расположение команды и параметров:

Драйвера и утилиты собраны на диске 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" заранее подверждает потенциально опасное действие). В качестве объекта можно указать

Действия:

При установке создаётся /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

В RHEL 7 вместо драйвера cciss можно использовать новый драйвер hpsa (при загрузке требуется ключ "hpsa.hpsa_allow_any=1" для старых (P400 - старый) контроллеров; ключ "hpsa.hpsa_simple_mode" управляет производительностью - performant или simple), логические диски прикидываются SCSI-устройствами (в cciss - блочными). Переменные в /sys/class/scsi_host/hostX/: rescan, firmware_revision, transport_mode (performant, simple). В /proc/scsi/scsi попадают в том числе и логические тома. Имена устройств - стандартные для SCSI /devsdX. Вместо утилиты hpacucli используется hpssacli (пакет hpssacli-2.40-13.0.x86_64 с сайта HPE, интерфейс аналогичен. smartctl работает как через sg (использовать sg контроллера, а не логического диска): "smartctl -x /dev/sg1 -d cciss,0". Утилита "cciss_vol_status -V /dev/sda" работает:

Controller: Smart Array P400i
  Board ID: 0x3235103c
  Logical drives: 1
  Running firmware: 5.22
  ROM firmware: 5.22
/dev/sda: (Smart Array P400i) RAID 1 Volume 0 status: OK. 
  Physical drives: 2
         connector 1I box 1 bay 1                 HP      DG146BAAJB                                       P4X5TWEA     HPD9 OK
         connector 1I box 1 bay 2                 HP      DG146BAAJB                                       P4X5PRUA     HPD9 OK
/dev/sda(Smart Array P400i:0): Non-Volatile Cache status:
                   Cache configured: Yes
                  Read cache memory: 52 MiB
                 Write cache memory: 156 MiB
                Write cache enabled: Yes
Как подружить со smartmontools?

LSI Logic MegaRAID 320-1

LSI Logic MegaRAID 320-1 LSI53C1020. Интерфейс: PCI 2.2 66 MHz, 64-bit (можно 32-bit), 3.3V или 5V. Содержит собственный процессор Intel GC80302 (аппаратный XOR, 66 MHz) и память под кеш (64 или 128 MB распаяно на борту, 100 MHz, ECC SDRAM). Поддерживает один канал SCSI Ultra320 (LSI53C1020, внутренний разъём HDCI 68 pin, внешний разъём VHDCI 68 pin, до 255 команд параллельно, scatter/gathers, ), до 15 физических устройств на логический массив (14 при использовании SAF-TE), до 40 логических устройств на контроллер, сам контроллер имеет ID 7, автоматическое терминирование при подключении только одного разъёма. Обеспечивает RAID уровней 0, 1, 5 (инициализация в фоновом режиме), 10 и 50, отдельный диск. Джамперы: использовать ли BIOS, SCSI terminator power, SCSI terminator, очистка EPROM. Индикаторные разъёмы: кеш содержит несохранённые данные, активность SCSI. Поддерживает протокол SAF-TE (интерфейс I2C с процессором SEP стойки) и SMART. Последняя версия прошивки (1 MB) - 1L49 (G500, HTML 3.23, WebBIOS 2.01, U828 от 14 октября 2005), глюк при ручном создании массива (сообщение о размере массива более 2 ТБ и отказ). Отличия 1L47-3 (BIOS G121) относительно 1L37 (BIOS G119): прерывание перестроения под большой нагрузкой, проблема загрузки с CD-ROM, ^M/^H работает не всегда, зависание при включённом Read-Ahead и плохом блоке; убрано низкоуровневое форматирование:

Для включения кеширования записи необходимо докупить батарейку LSIBBU01 (NiMH, 600 mAH, может работать при температуре от 10 до 40 градусов; быстрая зарядка - 6 часов - не срабатывает на одном устройстве (из-за температуры выше 40?); менять ежегодно (?!) или через 1000 циклов зарядки - счётчик доступен в megamgr). Держит содержимое кеша 48 (53?) часов (свежая полностью заряженная батарейка, обещание изготовителя), при восстановлении питания записывает содержимое кеша записи на диск, имеется интерфейс для подключения индикатора наличия незаписанных данных в кеше. Без неё кеширование записи (write back) включать не рекомендуется. Не помогает при пропадании питания при включённом кешировании на самих дисках.

Поддержка горячей замены дисков (должна быть поддержка в самих дисках и корзине). Возможность задержки раскручивания дисков (интервал между парами дисков). Обеспечивается автоматическое восстановление при наличии запасных дисков (hot disk, hot spare). Если запасной диск имеет больший размер, то свободное место использовать не получится. И вообще, выделить логический диск из куска свободного места не удастся. Как удалить диск из массива? Только через WebBIOS? Запасной диск можно добавить позднее (только общий пул). При вставке нового диска в корзину он автоматически становится запасным. При отсутствии запасного диска после сбоя второго диска массив RAID-5 переходит в состояние "Fail" и восстановлению не подлежит. При сбое одного диска (состояние массива "Degradated") необходимо отключить его, вынуть неисправный диск, вставить новый, добавить его к массиву. Возможно автоматическое продолжение создания или восстановления массива RAID-5 после перезагрузки, необходимо указать при создании FlexRAID PowerFail в BIOS (странно, что отсчёт остатка всегда начинается с нуля). При вставке обратно временно изъятого диска перестроение происходит быстрее. Указание доли пропускной способности, расходуемой на восстановление. При 30% и запрете кеширования записи восстановление диска 400 GB занимает больше суток, более 50% может не понравиться ОС. Та же доля используется при проверке массива (создание массива RAID-5 есть непрерываемый режим проверки). При нахождении различия данные считаются правильными, а контрольная сумма перевычисляется, если при чтении произошла ошибка ввода, то данные перевычисляются из контрольной суммы, а блок переназначается на резервную дорожку. Рекомендуется периодически делать проверку массива, т.к. если "плохой" блок "проявится" при восстановлении, то данные будут потеряны.

Имеет собственный звучок (включается при переходе одного из массивов в состояние Fail или Error; отключается программно или в BIOS для текущего события или навсегда; равномерные гудки - деградация, длинные - отказ, короткие - задействован резервный диск).

Настройка во время загрузки BIOS - ^M, графический режим настройки - ^H (дополнительные функции - отключение BIOS, требуется при загрузке не с массива; округление размера дисков вниз (coercion) - требуется для последующей беспроблемной замены диска; отключение восстановления данных при проверке; остановка при ошибке в конфигурации; выбор конфигурации при расхождении между версиями в NVRAM и на диске; задержка раскрутки; отключение автовосстановления). Можно сконфигурировать до 40 логических дисков на контроллер, до 32 физических дисков в массиве, не более 2 TB на логический диск. Логические диски можно удалять только в порядке обратном порядку создания (megarc под Linux обещает возможность удаления произвольного логического диска). Логический диск (в реальности, хост) конструируется из массивов (необходимо для RAID-10 и 50), может состоять только из части массива или частей массива (даже несмежных), но на реконфигурацию такого логического диска накладывается множество ограничений. Массив конструируется из физических дисков. Логический диск после создания должен быть проинициализирован (заполняется нулями). BIOS позволяет объединять/заменять физические диски слегка различающегося размера (coercion) округляя вниз до 128 MB или 1 GB (GB = 10^9), но это надо делать в самом начале. Все настроечные данные хранятся на диске (COD) и в NVRAM 32 KB (настройка контроллера BIOS Config Auto Selection позволяет выбирать при их несовпадении). Это позволяет перемещать (roaming) диск внутри контроллера (необходимо отключение питания). Чтобы переместить (migration) массив целиком на новый контроллер (того же типа), необходимо очистить конфигурацию нового контролера, диски необходимо подключать в те же самые позиции, что и на сгоревшем контроллере. Если в кеше записи остались данные, а батарейный модуль не типа TBBU, то они при смене контроллера будут потеряны. Реконфигурацию массива (добавление диска, смена типа RAID) нельзя прерывать и перезагружаться (что происходит с данными не уточняется ;).

Политика ввода/вывода: с использованием кеша, прямой доступ. Кеширование чтения: обычное кеширование, предварительное чтение, адаптивное кеширование. Кеширование записи: write back (контроллер рапортует о завершении записи сразу после записи в кеш), write through (контроллер рапортует о завершении записи после передачи на диск). Кеширование записи можно включать только при наличии батарейки (см. выше). Кеширование записи дисков необходимо выключить.

Экспериментальным путём выяснено, что распараллеливания чтения в режиме RAID-1 не производится.

Заявлена поддержка RHL 7.3 и 8.0, RHEL3 и RHEL4. Работает в CentOS 4.4 (модули megaraid_mbox и megaraid_mm, состояние /proc/megaraid) и CentOS 5.0 (модули megaraid_mbox и megaraid_mm). Управление megarc и megamgr. Совместим с safte-monitor.

megaraid cmm: 2.20.2.6 (Release Date: Mon Mar 7 00:01:03 EST 2005)
megaraid: 2.20.4.6-rh2 (Release Date: Wed Jun 28 12:27:22 EST 2006)
megaraid: probe new device 0x1000:0x1960:0x1000:0x0520: bus 4:slot 0:func 0
megaraid: fw version:[1L37] bios version:[G119]
scsi4 : LSI Logic MegaRAID driver
scsi[4]: scanning scsi channel 0 [Phy 0] for non-raid devices
  Vendor: ESG-SHV   Model: SCA HSBP M27      Rev: 1.14
  Type:   Processor                          ANSI SCSI revision: 02
scsi[4]: scanning scsi channel 1 [virtual] for logical drives
  Vendor: MegaRAID  Model: LD0 RAID5 79512R  Rev: 1L37
  Type:   Direct-Access                      ANSI SCSI revision: 02
SCSI device sda: 572440576 512-byte hdwr sectors (293090 MB)
sda: asking for cache data failed
sda: assuming drive cache: write through
 sda: sda1 sda2
Attached scsi disk sda at scsi4, channel 1, id 0, lun 0
Attached scsi generic sg0 at scsi4, channel 0, id 6, lun 0,  type 3
Attached scsi generic sg1 at scsi4, channel 1, id 0, lun 0,  type 0

SE7230NH1 (E7230), Pentium D 2800 MHz, RAM: 1 GB, PCI32/33
5 Seagete CHEETAH ST373207LC (10000 rpm, Ultra320)

RAID-5 5x73G  Write Thru, Adaptive Read Ahead, Cached I/O, hd cache - off
bonnie++ 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
              3000M  8234  19  7853   3  6505   1 27060  55 42828   4 541.8   1

при плотном потоке записи компьютер "подвисает"

RAID-5 5x73G  Write Back, Adaptive Read Ahead, Cached I/O, hd cache - off
bonnie++ 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
              3000M 40353  93 51799  22 22260   5 34104  69 43591   4 604.1   1

RAID-5 5x73G  Write Thru, Adaptive Read Ahead, Cached I/O, hd cache - on
bonnie++ 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
              3000M 11459  26 10705   4  9500   2 33896  69 42680   4 559.3   1

RAID-5 5x73G  Write Back, Adaptive Read Ahead, Cached I/O, hd cache - on
bonnie++ 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
              3000M 40742  95 56377  23 19886   5 33768  68 43685   4 591.8   1

SE7230NH1 (E7230), Pentium D 2800 MHz, RAM: 2 GB, PCI32/33
5 Seagete CHEETAH ST373207LC (10000 rpm, Ultra320)

RAID-0 5x73G  Write Back, Adaptive Read Ahead, Cached I/O, hd cache - off
bonnie++ 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
              5000M 40531  94 68731  28 25717   6 40108  81 52590   5 634.6   1

Intel 5000P/Intel 3100/PXH, Intel Xeon 5110 (C2D, 1.6 GHz), RAM: 2 GB, PCI-X
Write Back, Adaptive Read Ahead, Cached I/O, hd cache - off
Seagete CHEETAH ST3146707LC (10000 rpm, Ultra320)

RAID-1

bonnie++ 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
infra         8000M 34283  91 46545  17 15769   4 38066  93 67274   6 338.1   0

LVM stripe поверх двух RAID-1

bonnie++ 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
infra         8000M 32752  89 53432  20 21082   5 38389  93 59056   7 432.2   1

LSI Logic MegaRAID SAS 9266-8i

LSI Logic (Avago) MegaRAID SAS 9266-8i C1 (LSI00295, LSI00296) из серии MegaRAID Value Line (есть более дорогая серия Feature Line и боле дешёвая Entry Line). Системный интерфейс: PCI Express 2.0 x8 (32 Gbps), совместим с PCI Express 1.1, вставляется в x16. Низкопрофильная (MD2, 6.6" x 2.536"). Содержит собственный ROC (Raid On Chip) процессор MegaRAID SAS 2208 Dual Core (Thunderbolt, 2 x 800 MHz PowerPC) и память под кеш (1GB, 1333 MHz, ECC DDR3, 10.7 GBps). Совместим с архитектурой Fusion-MPT. Поддерживает 8 портов SAS 2.1 или SATA (SATA I, SATA II, SATA III) 6 Gbps (2 внутренних разъёма mini-SAS SFF-8087 x4, монтаж сбоку, 48 Gbps, порт 0 сверху), к которым можно подключить (через экспандеры, протоколы SMP и STP) до 128 устройств (до 16 корзин, до 2 корзин (SEP) на порт, до 15 устройств на порт, включая SEP и экспандеры). Имеется поддержка широких портов. STP (SATA устройства за экспандером) ограничен скоростью 3 Gbps (в другом месте написано 6 Gbps и это правда). Большее количество портов на старших моделях обеспечивается встроенными экспандерами. Устройства SATA SSD должны поддерживать набор команд ATA-8 ACS. Не поддерживается команда TRIM (LSI 3ware and MegaRAID controllers do not support TRIM, LSI SAS HBAs with IR firmware do not support TRIM) ("Sense Key : Illegal Request [current]; Add. Sense: Invalid field in parameter list"). Варианты:

Данный бизнес был куплен как часть LSI Corporation компанией Avago, затем Avago купила Emulex и Broadcom Corporation и переименовалась в Broadcom Limited, новые продукты (MegaRAID 9460-8i на SAS3508 - SAS/SATA/NVMe) продаются только для OEM.

В списке совместимости SuperMicro SAS2-216EB и SAS2-216EL2 (экспандер от LSI, fw 206) Поддержка UEFI 2.0 (driver configuration protocol и driver diagnostic protocol). Хранение конфигурации на диске в соответствии со стандартом DDF. Управление корзиной с помощью SES или SGPIO (корзины нумеруются не с нуля, например, с 12; "Zero Based Enclosure Enumeration = No").

Соединители: с модулем управления дисковой полкой (2 штуки, 3-pin, I2C?), с локальной батарейкой LSIiBBU09, с удалённой батарейкой LSIiBBU09, с CVFM02, 2 порта SFF-8087, с аппаратным ключом для "продвинутых" опций (3-pin). Джамперы: использовать ли BIOS (SBR bypass). Индикаторные разъёмы: с 8 индикаторами ошибки для каждого из 8 портов, с индикатором активности, с индикатором загруженного кеша, индикатор активности (Drive), индикатор ошибки (Global). Поддерживает протокол SAF-TE (интерфейс I2C с процессором SEP стойки) и SMART (диски нумеруются не с нуля, например, с 8).

До 1008 (255?) команд параллельно, scatter/gathers до 60 (80?), максимальный размер передачи - 8192 сектора (до 42 полосок), до 32 физических устройств на группу устройств, до 128 групп устройств и до 64 логических устройств (virtual drive) на контроллер (до 64 TB на LUN), до 16 логических устройств на группу устройств. Размер полоски (strip) - от 8 КиБ до 1 МиБ. Обеспечивает RAID уровней 0 (до 32 дисков), RAID-1 (чётное число дисков от 2 до 32), RAID-5 (от 3 до 32 дисков), RAID-6 (от 4 до 32 дисков), RAID-00 (RAID-0 из групп дисков типа RAID-0; от 2 до 256 дисков), RAID-10 (RAID 1+0, RAID-0 из групп дисков (до 8 групп, чётное число дисков от 2 до 32 в группе), собранных в RAID-1; размер stripe (strp*число-дисков-данных) д.б. одинаков), RAID-50 (RAID-0 из дисков, собранных в RAID-5, размер stripe (strp*число-дисков-данных) д.б. одинаков) и RAID-60 (RAID-0 из дисков, собранных в RAID-6, размер stripe (strp*число-дисков-данных) д.б. одинаков). Независимые диски конфигурируются как RAID-0 или RAID-00 (в другом месте говорится про JBOD без метаданных и это правда). Можно делать смешанные логические устройства из SAS и SATA дисков, но не из SSD (диски и SSD тоже нельзя смешивать). Описание вариантов смешивания - мутное. Начиная с версии ? можно смешивать всё. Возможность расширения и миграции между уровнями RAID без остановки работы (добавление 17-го диска - SAS, 900GB и 10k rpm - в RAID-6 заняло 52 часа, после чего инициализация массива ещё 6 часов, всё это время данные беззащитны, а скорость доступа упала в десятки раз; 24-го диска - предположительно займёт 70 часов; добавление 3 дисков к 12 - SAS, 1800GB и 10k rpm, RAID-6 - 97 часов, после чего инициализация массива ещё 23 часа; добавление 1 диска к 9 - SAS, 900GB и 10k rpm, RAID-6 - 27 часов, после чего инициализация массива ещё 5 часов; добавление 2 дисков к 13 - SATA, 500GB и 7200, RAID-6 - 42 часа, после чего инициализация массива ещё 7 часов). Возможность задержки раскручивания дисков (интервал между парами дисков). Диски горячей замены позволяют автоматически и без остановки работы заменять неисправные диски с помощью перестроения (восстановления, rebuild) группы дисков (автоматическое продолжение восстановления после перезагрузки, возможность задать долю - 30% - доступа к дискам для операций восстановления). Диски горячей замены можно привязывать к дисковой полке и/или к группе дисков. Возможно автоматическое назначение неиспользуемого диска в качестве диска горячей замены. Поддержка нескольких путей доступа к дискам (multipath) в пределах контроллера. Обещана балансировка загрузки путей для SAS устройств (2 пути вижу, а скорость не прибавилась), автоматическое обнаружение путей, использование запасных путей. Возможно автоматическое копирование данных с SSD с плохими данными SMART на запасное устройство (SSD Guard). Автоматическая остановка несконфигурированных дисков, дисков горячей замены и неиспользуемых логических дисков (Dimmer Switch). Проверка соответствия данных и чётности по расписанию (необходимо установить время на контроллере) и вручную (без нагрузки на массив: RAID6 - 240 минут, RAID1- 200 минут; 24 диска SAS 10000rpm 900GB; при полной нагрузке на массив: RAID6 - 300 часов, влияние на нагрузку минимальное - 10%; RAID6 из 18 дисков SAS 4TB 7200rpm - 20 часов независимо от ccrate), расхождения исправляются (RAID6). Патрульное чтение дисков (без нагрузки на массив, все диски одновременно - 2 часа; при полной нагрузке время патрульного чтения стремится в бесконечность, влияние на нагрузку минимальное - 20%). При обнаружении ошибок чтения блокируется соответствующая область на других устройствах (Punctured Block Entries), последующие чтения всегда будут возвращать ошибку до очистки (полной инициализации). Замена диска (копирование данных и изменение конфигурации) без остановки работы в ручном и автоматическом (по SMART) режиме. Только фоновая инициализация логических дисков (запускается автоматически через 5 минут после создания для RAID-5 из 5 дисков и RAID-6 из 7 дисков), повторная инициализация с теми же параметрами не портит данные. Фоновые операции (инициализация, восстановление, проверка) могут быть приостановлены и продолжены в любое время. Снимки (snapshot) от LSI называются "MegaRAID recovery". по непонятным причинам фоновая инициализация (RAID6 из 24 диска SAS 10000rpm 900GB) длится от 2 часов до суток; инициализация RAID-6 из 18 дисков SATA 2TB 7200rpm - более 5 суток при 100% доле). Возможна перестановка местами дисков, подключённых к одному контроллеру (требуется отключать питание). Возможна перестановка группы дисков на другой контроллер (требуется сохранять порядок дисков, импортирование не работает при заполненном кеше контроллера). При очистке конфигурации (предлагалось во время импортирования конфигурации с неосвобождённым кешем) и последующем созданием точно такой же данные сохранились. Возможен импорт группы дисков с контроллеров типа IR (Integrated RAID), если использовался формат метаданных LDF (LSI Data Format) размером 512 MB (группа дисков с метаданными LDF 64MB будет испорчена).

Интерфейс управления: MegaRAID Management Suite, MegaRAID Storage Manager (MSM, установить или обновить пакеты Lib_Utils (libsysfs) и Lib_Utils2 (Pegasus), множество 32-битных библиотек, затем пакет MegaRAID_Storage_Manager; после этого у вас появляются сервисы login и logoff (хорошо хоть не reboot, как у Intel ;), дополнения к /etc/X11/xinit/xinitrc.d, ещё одно старое JRE, скрипт msm_profile в /etc/init.d вместо /etc/sysconfig и прочие радости; перед запуском необходимо выключить SELinux, сетевой экран и настроить маршруты multicast; сервис vivaldiframework, сервис ls_mrdsnmpd (SNMP интерфейс); в общем, не стоит "разворачивать" это без надобности), WebBIOS Configuration Utility (^H при загрузке, отключение OPROM в BIOS значительно ускоряет загрузку), MegaCLI (MegaCli64), StorCLI, интерфейс к SNMP, интерфейс SMIS.

Прошивки:

Установка новой прошивки с помощью storcli (старые прошивки не распознают ResetNow, поэтому после установки требуется перезагрузка с выключением питания ("storcli /c0 restart"?), длительная инициализация при загрузке, прерывается фоновая инициализация - надо сразу запустить CC):

/opt/MegaRAID/storcli/storcli64 /c0 download file=mr2208fw.rom ResetNow

Установка новой прошивки CacheVault (Gas Gauge) до обновления прошивки контроллера с помощью storcli (TFM для 9266-8i, модуль CVPM02 версии 25849-01 требует обновления до 70-25849-04), предварительно обновить прошивку минимум до MR 5.12 (пакет 23.32.0-0009, 3.450.55-4187) и storcli до 1.14.12:

/opt/MegaRAID/storcli/storcli64 /c0/cv show all # Module Version 25849-01
/opt/MegaRAID/storcli/storcli64 /c0 download file=TFM_70-25849-04.rom fwtype=2 resetnow

Для включения кеширования записи необходимо докупить модуль сброса кеша на флешку LSICVM01 (CacheVault, LSI00297), включающий флеш (CVFM02, USB флешка), суперконденсатор (CVPM02, LSI 49571-01, 283 J, 9.4V, есть датчик температуры и заряда, очень быстрая зарядка, хранение данных много лет, необязательно мониторить и регулярно менять, не нагревать выше 55, потребляет 6 Вт при зарядке) и переходной кабель (6-pin разного размера с обоих концов), или батарейный модуль LSIBBU09 (LiON, достаточно для 48 часов, может работать при температуре до 45 градусов). При восстановлении питания содержимое кеша из флеша или памяти записывается на диск, имеется интерфейс для подключения индикатора наличия незаписанных данных в кеше. Если при загрузке обнаруживаются данные в кеше, которые некуда восстановить (дисков от нужных логических томов нет или они были обновлены "на стороне"), то в модуле BIOS появляется строка меню для очистки кеша. При заполненном кеше некоторые функции недоступны, например, импорт конфигурации с вновь вставленных дисков (foreign), зато предлагается очистить постороннюю конфигурацию. Надо отказаться, очистить кеш, затем импортировать конфигурацию Не помогает при пропадании питания при включённом кешировании на самих дисках, так что кеш устройств необходимо выключить. Интересно, что происходит с кешем при зависании ОС и сбросе без выключения питания?

Имеет собственный звучок (включается при переходе одного из массивов в состояние Fail; отключается утилитами или в BIOS для текущего события или навсегда; равномерные гудки - деградация, длинные - отказ, короткие - задействован резервный диск).

Дополнительно можно закупить ПО ускорения работы с SSD FastPath (программная лицензия LSI00266 или аппаратный ключ LSI00289) и/или ПО кеширования доступа к массивам на SSD CacheCade Pro 2.0 (программная лицензия LSI00293 или аппаратный ключ LSI00290). Максимальный поддерживаемый объём SSD - 512 ГБ на контроллер. Для использования в комплекте с CacheCade Pro 2.0 предлагается LSI Nytro WarpDrive (SLC: 200 или 400 ГБ, MLC: 400, 800 или 1600 ГБ) или LSI Nytro MegaRAID (одна плата, совмещающая LSI 9266-4i с Nytro WarpDrive; SLC: 100 ГБ, eMLC: 200 или 800 ГБ) или LSI Nytro XD (MLC 400 ГБ в комплекте с ПО). Имеется утилита LSI Nytro Predictor для оценки выигрыша в производительности. Отдельно от ПО Cache Cade продаётся SSD WarpDrive (SLC 300GB). Ключ активации можно перемещать между контроллерами (re-host).

SafeStore - управление ключами шифрования виртуальных дисков. Утрата ключей обеспечивает очень быстрой способ стирания данных.

Поддержка горячей замены дисков (должна быть поддержка в самих дисках и корзине). Обеспечивается автоматическое восстановление при наличии запасных дисков (hot disk, hot spare). Если запасной диск имеет больший размер, то свободное место использовать не получится. Запасной диск можно добавить позднее (в общий пул или выделенный). При вставке нового чистого диска в корзину он автоматически становится запасным (и форматируется при необходимости). При сбое одного диска (состояние массива "Degradated") необходимо отключить его, вынуть неисправный диск, вставить новый, добавить его к массиву. При сбое 2 дисков в RAID-6 их восстановление производится по очереди. Восстановление как первого, так и второго диска RAID-6 без нагрузки произсходит очень быстро (2 часа для SAS диска 900GB 10000rpm), под полной нагрузкой - очень медленно (более 2 суток для SAS диска 900GB 10000rpm). Возможно автоматическое продолжение создания или восстановления массива после перезагрузки, необходимо указать при создании FlexRAID PowerFail в BIOS. Возможно указание долей пропускной способности, расходуемых на восстановление и проверку массива (создание массива RAID-5 в действительности есть непрерываемый режим проверки). При нахождении различия данные считаются правильными, а контрольная сумма перевычисляется, если при чтении произошла ошибка ввода, то данные перевычисляются из контрольной суммы, а блок переназначается на резервную дорожку. Рекомендуется периодически (раз в месяц) делать проверку массива, т.к. если "плохой" блок "проявится" при восстановлении, то данные будут потеряны. Возможно предупреждающая замена "подозрительных" дисков (replace) с копированием данных.

При настройке физические диски объединяются в группы дисков. Из группы дисков или нескольких групп дисков (до 8, span, упряжка) нарезаются виртуальные диски (логические устройства с точки зрения ОС). Данные нарезаются на полоски, которые распределяются по дискам (strip size - размер полоски на одном диске, stripe width - число дисков в группе, stripe size - сумма размеров полосок данных "на одном обороте"). Логический диск после создания должен быть проинициализирован, происходит в фоновом режиме, запускается автоматически при достаточном количестве дисков (5 для RAID-5, 7 для RAID-6).

Настройка во время загрузки в графическом режиме - ^H (дополнительные функции - отключение BIOS, требуется при загрузке не с массива; округление размера дисков вниз (coercion) - требуется для последующей беспроблемной замены диска; отключение восстановления данных при проверке; остановка при ошибке в конфигурации; выбор конфигурации при расхождении между версиями в NVRAM и на диске; задержка раскрутки; отключение автовосстановления). Для работы USB мышки требуется включить эмуляцию порта 60/64. Все настроечные данные хранятся на диске (COD) в формате DDF и в NVRAM (настройка контроллера BIOS Config Auto Selection позволяет выбирать тип поведения при их несовпадении). Это позволяет перемещать (roaming) диск внутри контроллера (при отключении питания), перестроение массива начнётся с начала. Чтобы переместить (migration) массив целиком на новый контроллер (того же типа), необходимо предварительно очистить конфигурацию нового контролера, диски необходимо подключать в те же самые позиции, что и на сгоревшем контроллере. Если в кеше записи остались данные, а батарейный модуль не типа TBBU, то они при смене контроллера будут потеряны. Реконфигурацию массива (добавление диска, смена типа RAID) нельзя прерывать и перезагружаться, после вынимания диска на ходу массив остался в состоянии миграции, сделать с ни ничего не смог.

Кеширование записи: write back (контроллер рапортует о завершении записи сразу после записи в кеш), write through (контроллер рапортует о завершении записи после передачи на диск). Кеширование записи можно включать только при наличии батарейки (см. выше). Кеширование записи дисков необходимо выключить. Тип предваряющего чтения: включено, выключено (раньше был адаптивный режим - удалили). Политика ввода/вывода: с использованием кеша (все читаемые и записываемые данные попадают в кеш), прямой ввод-вывод (читаемые данные не попадают в кеш, предварительно читаемые данные попадают в кеш, записываемые данные попадают в кеш в режиме writeback). Изготовитель рекомендует прямой ввод-вывод без предварительного чтения (и похоже знает, что говорит).

Возможные состояния физического диска:

Возможные состояния виртуального диска:

Заявлена поддержка RHEL5 и RHEL6 (модуль megaraid_sas.ko, параметры max_sectors - не получается задать более 280 KiB (/sys/block/sda/queue/max_sectors_kb) - и msix_disable). Управление megacli и StorCLI.

Сообщения ядра (FUA отсутствует, несмотря на обновление прошивки):

megasas: 06.504.01.00-rh1 Mon. Oct. 8 17:00:00 PDT 2012
megasas: 0x1000:0x005b:0x1000:0x9266: bus 2:slot 0:func 0
megaraid_sas 0000:02:00.0: PCI INT A -> GSI 32 (level, low) -> IRQ 32
megaraid_sas 0000:02:00.0: setting latency timer to 64
megasas: Waiting for FW to come to ready state
megasas: FW now in Ready state
  alloc irq_desc for 89 on node 0
  alloc kstat_irqs on node 0
alloc irq_2_iommu on node 0
megaraid_sas 0000:02:00.0: irq 89 for MSI/MSI-X
... 90,91,92,93,94,95,96,97,98,99,100,101,102,103,104 - 16 прерываний
megasas:IOC Init cmd success
megasas: INIT adapter done
scsi0 : LSI SAS based MegaRAID driver
scsi 0:0:0:0: Direct-Access     LSI      MR9266-8i        3.27 PQ: 0 ANSI: 5
scsi 0:0:12:0: Enclosure         LSI CORP SAS2X36          0717 PQ: 0 ANSI: 5
scsi 0:0:15:0: Enclosure         LSI CORP SAS2X36          0717 PQ: 0 ANSI: 5
scsi 0:2:0:0: Direct-Access     LSI      MR9266-8i        3.27 PQ: 0 ANSI: 5
sd 0:2:0:0: [sda] 38655885312 512-byte logical blocks: (19.7 TB/18.0 TiB)
sd 0:2:0:0: [sda] Write Protect is off
sd 0:2:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
sda: unknown partition table
sd 0:2:0:0: [sda] Attached SCSI disk
sd 1:2:0:0: [sda] 4096-byte physical blocks

/proc/scsi/scsi

Host: scsi0 Channel: 00 Id: 12 Lun: 00
  Vendor: LSI CORP Model: SAS2X36          Rev: 0717
  Type:   Enclosure                        ANSI  SCSI revision: 05
Host: scsi0 Channel: 00 Id: 15 Lun: 00
  Vendor: LSI CORP Model: SAS2X36          Rev: 0717
  Type:   Enclosure                        ANSI  SCSI revision: 05
Host: scsi0 Channel: 02 Id: 00 Lun: 00
  Vendor: LSI      Model: MR9266-8i        Rev: 3.16
  Type:   Direct-Access                    ANSI  SCSI revision: 05

Совместим с SES, включая загрузку прошивки. Информация о составе:

sg_ses --page=1 /dev/sg0

  LSI CORP  SAS2X36           0717
    enclosure services device
Configuration diagnostic page:
  number of secondary subenclosures: 0
  generation code: 0x0
  enclosure descriptor list
    Subenclosure identifier: 0
      relative ES process id: 1, number of ES processes: 1
      number of type descriptor headers: 11
      logical identifier (hex): 50030480015a967f
      vendor: LSI CORP  product: SAS2X36           rev: 0717
      vendor-specific data:
 00     11 22 33 44 55 00 00 00                             ."3DU...        
  type descriptor header/text list
    Element type: Array device, subenclosure id: 0
      number of possible elements: 24
      text: Drive Slots
    Element type: Temperature sense, subenclosure id: 0
      number of possible elements: 1
      text: Temperature Sensors
    Element type: Cooling, subenclosure id: 0
      number of possible elements: 3
      text: Fans
    Element type: Audible alarm, subenclosure id: 0
      number of possible elements: 1
      text: Buzzers
    Element type: Voltage sensor, subenclosure id: 0
      number of possible elements: 2
      text: Voltage Sensors
    Element type: Current sensor, subenclosure id: 0
      number of possible elements: 2
      text: Current Sensors
    Element type: Power supply, subenclosure id: 0
      number of possible elements: 2
      text: Power Supplies
    Element type: Enclosure, subenclosure id: 0
      number of possible elements: 1
      text: Enclosure
    Element type: SAS expander, subenclosure id: 0
      number of possible elements: 2
      text: SAS Expanders
    Element type: SAS connector, subenclosure id: 0
      number of possible elements: 30
      text: SAS Connectors
    Element type: Communication port, subenclosure id: 0
      number of possible elements: 2
      text: Ethernet ports

Состояние:

sg_ses --page=2 /dev/sg0

  LSI CORP  SAS2X36           0717
    enclosure services device
Enclosure status diagnostic page:
  INVOP=0, INFO=1, NON-CRIT=0, CRIT=0, UNRECOV=0
  generation code: 0x0
  status descriptor list
    Element type: Array device, subenclosure id: 0
      Overall status:
        Predicted failure=0, Disabled=0, Swap=0, status: Unsupported
...
      Individual element 1 status:
        Predicted failure=0, Disabled=0, Swap=0, status: OK
        OK=0, Reserved device=0, Hot spare=0, Cons check=0
        In crit array=0, In failed array=0, Rebuild/remap=0, R/R abort=0
        App client bypass A=0, Don't remove=0, Enc bypass A=0, Enc bypass B=0
        Ready to insert=0, RMV=0, Ident=0, Report=0
        App client bypass B=0, Fault sensed=0, Fault reqstd=0, Device off=0
        Bypassed A=0, Bypassed B=0, Dev bypassed A=0, Dev bypassed B=0
... все 24 диска ...
    Element type: Temperature sense, subenclosure id: 0
      Individual 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=29 C
    Element type: Cooling, subenclosure id: 0
      Individual element 1 status:
        Predicted failure=0, Disabled=0, Swap=0, status: Unknown
        Ident=0, Hot swap=0, Fail=0, Requested on=0, Off=0
        Actual speed=0 rpm, Fan stopped
... и якобы все выключены ...
    Element type: Audible alarm, subenclosure id: 0
    Element type: Voltage sensor, subenclosure id: 0
      Individual 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: 4.93 volts
      Individual element 2 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: 11.83 volts
    Element type: Current sensor, subenclosure id: 0
      Individual element 1 status:
        Predicted failure=0, Disabled=0, Swap=0, status: OK
        Ident=0, Fail=0, Warn Over=0, Crit Over=0
        Current: 22.54 amps
      Individual element 2 status:
        Predicted failure=0, Disabled=0, Swap=0, status: OK
        Ident=0, Fail=0, Warn Over=0, Crit Over=0
        Current: 1.45 amps
    Element type: Power supply, subenclosure id: 0
      Individual element 1 status:
        Predicted failure=0, Disabled=0, Swap=0, status: Not installed
        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 type: Enclosure, subenclosure id: 0
      Individual element 1 status:
        Predicted failure=0, Disabled=0, Swap=0, status: OK
        Ident=0, Time until power cycle=0, Failure indication=0
        Warning indication=0, Requested power off duration=0
        Failure requested=0, Warning requested=0
   Element type: SAS expander, subenclosure id: 0
      Individual element 1 status:
        Predicted failure=0, Disabled=0, Swap=0, status: OK
        Ident=0, Fail=0
...
    Element type: SAS connector, subenclosure id: 0
      Individual element 1 status:
        Predicted failure=0, Disabled=0, Swap=0, status: OK
        Ident=0, Mini SAS 4i receptacle (SFF-8087) [max 4 phys], Connector physical link=0xff
        Fail=0
... 6 штук
      Individual element 7 status:
        Predicted failure=0, Disabled=0, Swap=0, status: OK
        Ident=0, SAS Drive backplane receptacle (SFF-8482) [max 2 phys], Connector physical link=0x0
        Fail=0
... 24 штуки

Дополнительная информация (слоты и адреса):

sg_ses --page=0xa /dev/sg0

Additional element status diagnostic page:
  generation code: 0x0
  additional element status descriptor list
    Element type: Array device, subenclosure id: 0
      element index: 0 [0x0]
      Transport protocol: SAS
      number of phys: 1, not all phys: 0, bay number: 0
      phy index: 0
        device type: end device
        initiator port for:
        target port for: SSP
        attached SAS address: 0x500304800163d4ff
        SAS address: 0x5000cca016212fe2
        phy identifier: 0x1
...

smartctl умеет получать информацию об отдельных дисках с помощью ключа "-d megaraid,номер" (диски нумеруются не с нуля! при замене диска номер изменяется!)

smartctl -a -d megaraid,8 /dev/sda

Vendor:               WD      
Product:              WD9001BKHG-02D22
Revision:             SR03
User Capacity:        900,185,481,216 bytes [900 GB]
Logical block size:   512 bytes
Logical Unit id:      0x50014ee7aaadd8f0
Serial number:                WXL1E32HSEPM
Device type:          disk
Transport protocol:   SAS
Local Time is:        Wed Sep  4 21:31:39 2013 MSK
Device supports SMART and is Enabled
Temperature Warning Enabled
SMART Health Status: OK

Current Drive Temperature:     26 C
Drive Trip Temperature:        69 C
Manufactured in week 01 of year 2010
Specified cycle count over device lifetime:  1048576
Accumulated start-stop cycles:  47
Specified load-unload count over device lifetime:  1114112
Accumulated load-unload cycles:  0
Elements in grown defect list: 0

Error counter log:
           Errors Corrected by           Total   Correction     Gigabytes    Total
               ECC          rereads/    errors   algorithm      processed    uncorrected
           fast | delayed   rewrites  corrected  invocations   [10^9 bytes]  errors
read:     122820      428       466    123248        428     106471.048           0
write:       620     4753         0      5373       4753      48017.563           0
verify:       62        2         2        64          2         19.126           0

Non-medium error count:      297
No self-tests have been logged
Long (extended) Self Test duration: 6362 seconds [106.0 minutes]

Часть информации доступна через /sys, например:

cat /sys/class/enclosure/0\:0\:8\:0/Slot\ 24/status
OK 

Тестирование скорости записи (на примере параллельного восстановления домашних каталогов, 18546GB, 33779024 файлов), CentOS 6.3, прошивка 3.220.35.1998, полоска 64КБ, RAID-6, 24 диска SATA 900GB 10000rpm, кеширование записи на дисках выключено, writeback, кеширование чтения и readahead включены, перед началом записи очищаются буфера - 3 в /proc/sys/vm/drop_caches, создание файловой системы xfs с параметрами "-d su=64k,sw=22 -i attr=2,maxpct=5 -l su=64k,lazy-count=1", монтирование с параметрами "-o nodiratime,attr2,logbufs=8,logbsize=65536"; команда восстановления - "lzop -F -cd /другой-массив/$home.tar.lzo | dd bs=102400k |tar -C /first --warning=no-timestamp -xf -"

Тестирование скорости чтения (на примере параллельного чтения домашних каталогов после параллельной записи в 100 потоков, 18546GB, 33779024 файлов), CentOS 6.3, прошивка 3.220.35.1998, полоска 64КБ, RAID-6, 24 диска SATA 900GB 10000rpm, кеширование записи на дисках выключено, writeback, кеширование чтения и readahead включены, перед началом чтения файловая система размонтируется и очищаются буфера - 3 в /proc/sys/vm/drop_caches, создание файловой системы xfs с параметрами "-d su=64k,sw=22 -i attr=2,maxpct=5 -l su=64k,lazy-count=1", монтирование с параметрами "-o nodiratime,attr2,logbufs=8,logbsize=65536"; команда чтения отдельного домашнего каталога - "tar -C $1 -H posix -b2048 -cf - ."; результат направляется в "dd bs=10240k" и далее в /dev/null:

Выключаем для массива кеширование чтения и readahead (ReadAheadNone и Direct), записываем 1408 в /sys/block/sda/bdi/read_ahead_kb записать:

Записываем deadline в /sys/block/sda/queue/scheduler вместо cfq, монтирование с параметрами "-o nodiratime,attr2,logbufs=8,logbsize=65536,nobarrier":

Записываем noop в /sys/block/sda/queue/scheduler, монтирование с параметрами "-o nodiratime,attr2,logbufs=8,logbsize=65536,nobarrier":

Записываем noop в /sys/block/sda/queue/scheduler вместо cfq, монтирование с параметрами "-o relatime,nodiratime,attr2,logbufs=8,logbsize=65536,nobarrier", 0 в /proc/sys/vm/vfs_cache_pressure вместо 100 (33779024 файлов - это в теории 34GB памяти, а на практике 52GB), с предварительным прогревом (find /first -ls) и без размонтирования и очистки буферов:

Уменьшил фрагментацию до 0.27% (8 часов, 250 МБ/сек), в результате свободное место фрагментировалось в пыль и дальнейшая дефрагментация невозможна. Записываем noop в /sys/block/sda/queue/scheduler, монтирование с параметрами "-o nodiratime,attr2,logbufs=8,logbsize=65536,nobarrier" (без relatime и vfs_cache_pressure):

Тестирование скорости записи (на примере параллельного восстановления домашних каталогов, 18546GB, 33779024 файлов), CentOS 6.3, прошивка 3.220.35.1998, полоска 64КБ, RAID-6, 24 диска SATA 900GB 10000rpm, кеширование записи на дисках выключено, writeback, кеширование чтения и readahead выключены, перед началом записи очищаются буфера - 3 в /proc/sys/vm/drop_caches, планировщик noop, создание файловой системы xfs с параметрами "-d su=64k,sw=22 -i attr=2,maxpct=5 -l su=64k,lazy-count=1", монтирование с параметрами "nodiratime,attr2,logbufs=8,logbsize=262144,nobarrier,inode64,filestreams"; команда восстановления - "lzop -F -cd /другой-массив/$home.tar.lzo | dd bs=102400k |tar -C /first --warning=no-timestamp -xf -"

Чтение обратно (noop, "nodiratime,attr2,logbufs=8,logbsize=262144,nobarrier,inode64,filestreams"):

Дефрагментация мелких файлов (до 14080KB) и чтение обратно (noop, "nodiratime,attr2,logbufs=8,logbsize=262144,nobarrier,inode64,filestreams"):

Тестирование скорости записи (на примере параллельного восстановления домашних каталогов, 18546GB, 33779024 файлов), CentOS 6.3, прошивка 3.220.35.1998, полоска 64КБ, RAID-6, 24 диска SATA 900GB 10000rpm, кеширование записи на дисках выключено, writeback, кеширование чтения и readahead выключены, перед началом записи очищаются буфера - 3 в /proc/sys/vm/drop_caches, планировщик noop, создание файловой системы ext4 (e2fsprogs-1.42) с параметрами "-E stride=16,stripe_width=352 -G 64 -J size=512", монтирование с параметрами "nobarrier,nodiratime,journal_checksum,journal_async_commit,stripe=352,delalloc"; команда восстановления - "lzop -F -cd /другой-массив/$home.tar.lzo | dd bs=102400k |tar -C /first --warning=no-timestamp -xf -"

Чтение обратно (noop, 0 в /proc/sys/vm/vfs_cache_pressure, без сброса кеша и перемонтирования, "nobarrier,nodiratime,relatime,journal_checksum,journal_async_commit,delalloc", с предварительным прогревом:

Чтение обратно после дефрагментации (довёл фрагментацию до 2.5%):

Сообразил, что исходную файловую систему тоже можно дефрагментировать и сделал это (по большей части командой mv - на порядок быстрее).

Тестирование скорости записи (на примере параллельного восстановления домашних каталогов, 18546GB, 33779024 файлов), CentOS 6.3, прошивка 3.220.35.1998, полоска 64КБ, RAID-6, 24 диска SATA 900GB 10000rpm, кеширование записи на дисках выключено, writeback, кеширование чтения и readahead выключены, перед началом записи очищаются буфера - 3 в /proc/sys/vm/drop_caches, планировщик noop для обеих файловых систем, создание файловой системы ext4 (e2fsprogs-1.42.6) с параметрами "-E stride=16,stripe_width=352 -G 128 -J size=512", монтирование с параметрами "nobarrier,nodiratime,journal_checksum,journal_async_commit,stripe=352,delalloc,commit=60,max_batch_time=30000,min_batch_time=1000"; команда восстановления - "lzop -F -cd /другой-массив/$home.tar.lzo | dd bs=102400k |tar -C /first --warning=no-timestamp -xf -"

Настройка параметров: 256 в /sys/block/sdX/queue/nr_requests, 4096 в /sys/block/sdX/queue/read_ahead_kb, 50 в /proc/sys/vm/vfs_cache_pressure, 262144 в /proc/sys/vm/min_free_kbytes, 100000000 в /proc/sys/vm/dirty_background_bytes, 700000000 в /proc/sys/vm/dirty_bytes:

Чтение записанного в 1 поток, 100 в /proc/sys/vm/vfs_cache_pressure, 3 в /proc/sys/vm/drop_caches, монтирование с параметрами "nobarrier,nodiratime,relatime,journal_checksum,journal_async_commit,delalloc,commit=60,max_batch_time=30000,min_batch_time=1000":

Чтение записанного в 1 поток, 50 в /proc/sys/vm/vfs_cache_pressure, 1000 в /sys/block/sda/queue/nr_requests (это слишком много - большие задержки), 4096 в /sys/block/sda/queue/read_ahead_kb, 262144 в /proc/sys/vm/min_free_kbytes:

Тестирование скорости записи (на примере параллельного восстановления домашних каталогов, 18546GB, 33779024 файлов), CentOS 6.3, прошивка 3.220.35.1998, полоска 64КБ, RAID-6, 24 диска SATA 900GB 10000rpm, кеширование записи на дисках выключено, writeback, кеширование чтения и readahead выключены, перед началом записи очищаются буфера - 3 в /proc/sys/vm/drop_caches, планировщик noop для обеих файловых систем, создание файловой системы с параметрами "-d su=64k,sw=22 -i attr=2,maxpct=5 -l su=64k,lazy-count=1,size=256m", монтирование с параметрами "nodiratime,relatime,attr2,nodelaylog,logbufs=8,logbsize=256k,nobarrier,inode64,filestreams,osyncisdsync", 256 в /sys/block/sdX/queue/nr_requests (4096 даёт средний await в 2 секунды), 4096 в /sys/block/sdX/queue/read_ahead_kb, 50 в /proc/sys/vm/vfs_cache_pressure, 262144 в /proc/sys/vm/min_free_kbytes, 100000000 в /proc/sys/vm/dirty_background_bytes, 700000000 в /proc/sys/vm/dirty_bytes:

Поменяем nodelaylog на delaylog:

Ещё "урежем" кеширование записи /proc/sys/vm/dirty_background_bytes до 10000000, proc/sys/vm/dirty_bytes до 40000000:

Чтение, записанного в 1 поток (с размонтированием и сбросом буферов):

Сборка 3 массивов RAID1 из 24 дисков и объединение их в LVM с чередованием ("lvcreate --stripes 3 --stripesize 64K"), исходные архивы на другом сервере (соединение 10 Гбит по NFS), планировщик noop для всех блочных устройств, 256 в /sys/block/sdX/queue/nr_requests, 4096 в /sys/block/sdX/queue/read_ahead_kb, 50 в /proc/sys/vm/vfs_cache_pressure, 262144 в /proc/sys/vm/min_free_kbytes, 100000000 в /proc/sys/vm/dirty_background_bytes, 400000000 в /proc/sys/vm/dirty_bytes, создание файловой системы с параметрами "-d su=64k,sw=66 -i attr=2,maxpct=5 -l su=64k,lazy-count=1,size=256m", монтирование с параметрами "nodiratime,relatime,attr2,nodelaylog,logbufs=8,logbsize=256k,nobarrier,inode64,filestreams":

Чтение, записанного в 2 потока (с размонтированием и сбросом буферов):

Переключение в режим оптимизации времени доступа вместо IOPS ускоряет чтение на 10% и замедляет запись на 10% (XFS, 12 потоков).

При размонтировании с накопленным кешем записи достигается скорость записи 2 ГБ/сек, т.е. успех возможен.

Сборка 2 массивов RAID1 из 24 дисков и последовательное соединение их в логический том LVM: запись в 8 потоков - 1614 МБ/сек, чтение в много потоков - 881 МБ/сек.

Тестирование чтения tarnull с LVM (stripe по 64КБ), собранного из 2 * RAID6 из 18 дисков SAS 4TB 7200 на одном контроллере, perfmode=1, NORA, Direct, XFS (сборка - "mkfs.xfs -d su=64k,sw=32 -i attr=2 -l su=64k,lazy-count=1", монтирование - "nodiratime,relatime,attr2,logbufs=8,logbsize=256k,inode64,filestreams,nobarrier"), запись bacula в 5 потоков - 643 МБ/сек, копирование на себя в очень много потоков - 165 МБ/сек:

375
потоковпосле bacula, МБ/секпосле копирования, МБ/сек
117077
2191111
3236148
4279178
5314204
6344227
7372248
8397268
9421285
10441301
11461315
12478328
13499340
14501351
15499359
16490368
17470374
18473377
19455378
20443379 (389, 382)
21440378 (381)
22439378 (372)
23439376 (371)
24439369
25438370
26441371
27439372
28436373
29439 (454)374
30439 (454)374
31430 (455)375
32436 (449, 458)
33439 (452)376
34436 (459)376
35435 (453)377
36436 (458)375
37436 (460)377
38435 (453)376
39429 (453)377
40436 (467, 489)376
41436 (472)376
42435 (464)380
43434 (467375
44434 (463)373
45434 (461)374
46435 (451)374
47433 (442)373
48434 (444)
49446 (446)
50442 (457)
51430 (451)
52428 (447)
53431 (447)
54427 (474)
55429 (458)
56428 (459)
57430 (457)
58426 (448)
59427 (445)
60427 (440)
61430 (437)
62427 (442)
63425 (439)
64426 (440)
65422 (436)
66426 (438)
67424 (436)
68424 (436)
69421 (437)
70420 (435)
71420 (437)
72419 (435)
76 (432)
80 (430)
84 (432)
88 (427)
92 (427)
96 (426)
100 (425)
104 (426)
108 (426)
112 (424)
116 (424)
120 (424)
124 (421)
128 (422)
132 (419)
136 (420)
140 (416)

Настройка:

/opt/MegaRAID/storcli/storcli64 /c0 set coercion=0 # всё-равно неправильно округляет
/opt/MegaRAID/storcli/storcli64 /c0 set loadbalancemode=on
/opt/MegaRAID/MegaCli/MegaCli64 -AdpSetProp -LoadBalanceMode -0 -a0 # storcli не умеет (не умел?) устанавливать баланс
/opt/MegaRAID/storcli/storcli64 /c0 set perfmode=1 # минимизация задержек
/opt/MegaRAID/storcli/storcli64 /c0 set patrolread=off # cc достаточно и он "правильней"
# для сервера резервного копирования bacula "ra cached" вместо "nora direct"
/opt/MegaRAID/storcli/storcli64 /c0 add vd type=raid6 size=all name=first drives=9:0-17 pdcache=off wb nora direct Strip=64 
/opt/MegaRAID/storcli/storcli64 /c0 add vd type=raid6 size=all name=second drives=9:18-23,8:0-11 pdcache=off wb nora direct Strip=64 
pvcreate /dev/sda /dev/sdb
vgcreate x42fronttop /dev/sda /dev/sdb
lvcreate -n share --stripes 2 --stripesize 64K -l +100%FREE x136all36 /dev/sda /dev/sdb
mkfs.ext4 -E stride=16,stripe_width=512,lazy_itable_init=1 -G 128 -J size=512 -L share -v \
    -O 64bit,dir_index,dir_nlink,extent,ext_attr,filetype,flex_bg,has_journal,huge_file,large_file,meta_bg,sparse_super,uninit_bg \
    /dev/x136all36/share

в /etc/fstab:
/dev/x136all36/share /share ext4 data=ordered,stripe=512,nobarrier,nodiratime,norelatime,journal_checksum,journal_async_commit,delalloc 1 2

Стабильное зависание при тестировании LVM cache под нагрузкой (прошивка 23.33.0-0018, xfs) с использованием SSD:

systemd-udevd: worker [24958] /devices/pci0000:00/0000:00:02.0/0000:02:00.0/host0/target0:2:0/0:2:0:0/block/sda timeout; kill it 
systemd-udevd: seq 32557 '/devices/pci0000:00/0000:00:02.0/0000:02:00.0/host0/target0:2:0/0:2:0:0/block/sda' killed
systemd-udevd: worker [24958] terminated by signal 9 (Killed) 
kernel: INFO: task smartd:1068 blocked for more than 120 seconds. 
kernel: INFO: task scsi_id:24959 blocked for more than 120 seconds. 
kernel: megasas: [ 0]waiting for 1 commands to complete for scsi0
...
kernel: megasas: [175]waiting for 1 commands to complete for scsi0
kernel: megaraid_sas: pending commands remain after waiting, will reset adapter scsi0. 
kernel: megaraid_sas: resetting fusion adapter scsi0. 
kernel: megasas: Waiting for FW to come to ready state 
kernel: megasas: FW now in Ready state 
kernel: megasas:IOC Init cmd success 

Аналогичное зависание на ровном месте (нулевая нагрузка, SSD перенесены на другой контроллер, ext4) привело к формированию метаданных на дисках, выводящих из строя (зависание при обращении, индикаторы дисков дёргаются) любой аналогичный контроллер. Вылечил выниманием дисков, сменой контроллера, отключением автоматического импорта чужих дисков, вставкой дисков, удалением конфигурации, созданием виртуальных дисков с теми же параметрами - данные остались на месте, ошибок не обнаружено.

Была пара случаев зависания одного из 3 контроллеров (оба раза пустого без дисков), storcli ждёт вечно и не снимается. Массивы на оставшихся контроллерах работают совершенно нормально (storcli также зависает), smartctl отрабатывает, жалоб в журнале нет. После попыток обратиться к полке зависшего контроллера по smartctl и sg_ses отвис storcli на оставшихся контроллерах с сообщением в журнале:

Jan 10 16:24:42 x145 kernel: megasas: Found FW in FAULT state, will reset adapter scsi9.
Jan 10 16:24:42 x145 kernel: megaraid_sas: resetting fusion adapter scsi9.
Jan 10 16:26:26 x145 kernel: megaraid_sas 0000:06:00.0: Diag reset adapter never cleared megasas_adp_reset_fusion 2431
Jan 10 16:28:10 x145 kernel: megaraid_sas 0000:06:00.0: Diag reset adapter never cleared megasas_adp_reset_fusion 2431
Jan 10 16:29:54 x145 kernel: megaraid_sas 0000:06:00.0: Diag reset adapter never cleared megasas_adp_reset_fusion 2431
Jan 10 16:29:54 x145 kernel: megaraid_sas: Reset failed, killing adapter scsi9.
Jan 10 16:29:55 x145 kernel: ses 9:0:8:0: Device offlined - not ready after error recovery
Jan 10 16:29:55 x145 kernel: ses 9:0:8:0: Device offlined - not ready after error recovery
Jan 10 16:31:22 x145 kernel: ses 9:0:8:0: rejecting I/O to offline device
Jan 10 16:31:22 x145 kernel: ses 9:0:8:0: rejecting I/O to offline device
Jan 10 16:31:22 x145 kernel: ses 9:0:8:0: rejecting I/O to offline device
...
Jan 10 16:36:55 x145 kernel: Controller in crit error
storcli видит только 2 контроллера из 3 (в /proc/scsi/scsi host9 остался, остались и sg6/sg7):
/opt/MegaRAID/storcli/storcli64 show ctrlcount
Controller Count = 2
на тестовом сервере (аналогичный боевому) проблему удалось решить удалив устройство и просканировав шину (scsi host поменялся), на боевом не рискнул пока:
echo 1 > /sys/bus/pci/devices/0000:06:00.0/remove
ls -lL /sys/bus/pci/devices/0000:06:00.0
ls: cannot access /sys/bus/pci/devices/0000:06:00.0: No such file or directory

echo 1 > /sys/bus/pci/rescan
Jan 13 06:08:21 x142 kernel: pci 0000:06:00.0: BAR 3: assigned [mem 0xdfa00000-0xdfa3ffff 64bit]
Jan 13 06:08:21 x142 kernel: pci 0000:06:00.0: BAR 6: assigned [mem 0xdfa40000-0xdfa5ffff pref]
Jan 13 06:08:21 x142 kernel: pci 0000:06:00.0: BAR 1: assigned [mem 0xdfa60000-0xdfa63fff 64bit]
Jan 13 06:08:21 x142 kernel: pci 0000:06:00.0: BAR 0: assigned [io  0x5000-0x50ff]
Jan 13 06:08:21 x142 kernel: mgag200 0000:08:03.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment
Jan 13 06:08:21 x142 kernel: megasas: Waiting for FW to come to ready state
Jan 13 06:08:21 x142 kernel: megasas: FW now in Ready state
Jan 13 06:08:21 x142 kernel: megaraid_sas 0000:06:00.0: firmware supports msix#011: (16)
Jan 13 06:08:21 x142 kernel: megaraid_sas 0000:06:00.0: current msix/online cpus#011: (12/12)
Jan 13 06:08:21 x142 kernel: megasas:IOC Init cmd success
Jan 13 06:08:21 x142 kernel: megaraid_sas 0000:06:00.0: firmware type#011: Extended VD(240 VD)firmware
Jan 13 06:08:21 x142 kernel: megaraid_sas 0000:06:00.0: controller type#011: MR(1024MB)
Jan 13 06:08:21 x142 kernel: megasas: INIT adapter done
Jan 13 06:08:21 x142 kernel: megaraid_sas 0000:06:00.0: pci id#011#011: (0x1000)/(0x005b)/(0x1000)/(0x9266)
Jan 13 06:08:21 x142 kernel: megaraid_sas 0000:06:00.0: unevenspan support#011: no
Jan 13 06:08:21 x142 kernel: megaraid_sas 0000:06:00.0: disable ocr#011#011: no
Jan 13 06:08:21 x142 kernel: megaraid_sas 0000:06:00.0: firmware crash dump#011: no
Jan 13 06:08:21 x142 kernel: megaraid_sas 0000:06:00.0: secure jbod#011#011: no
Jan 13 06:08:21 x142 kernel: scsi host10: Avago SAS based MegaRAID driver
Jan 13 06:08:21 x142 kernel: scsi 10:0:8:0: Enclosure         LSI      SAS3x40          0601 PQ: 0 ANSI: 5
Jan 13 06:08:21 x142 kernel: scsi 10:0:9:0: Enclosure         LSI      SAS3x40          0601 PQ: 0 ANSI: 5
Jan 13 06:08:21 x142 kernel: ses 10:0:8:0: Attached Enclosure device
Jan 13 06:08:21 x142 kernel: ses 10:0:8:0: Attached scsi generic sg5 type 13
Jan 13 06:08:21 x142 kernel: ses 10:0:9:0: Attached Enclosure device
Jan 13 06:08:21 x142 kernel: ses 10:0:9:0: Attached scsi generic sg6 type 13

/opt/MegaRAID/storcli/storcli64  show
Ctl Model                 Ports PDs DGs DNOpt VDs VNOpt BBU sPR DS  EHS ASOs Hlth
----------------------------------------------------------------------------------
  0 LSIMegaRAIDSAS9266-8i     8  15   1     0   1     0 Opt Off 1&2 Y      4 Opt
  1 LSIMegaRAIDSAS9266-8i     8   0   0     0   0     0 Opt Off 1&2 Y      4 Opt
  2 LSIMegaRAIDSAS9266-8i     8   0   0     0   0     0 Opt Off 1&2 Y      4 Opt

/opt/MegaRAID/storcli/storcli64 /c2 set time=systemtime

LSI Logic StorCLI

Утилита storcli (/opt/MegaRAID/storcli/storcli64) предназначена для управления RAID контроллерами фирмы LSI Logic линеек 924x и выше, например, MegaRAID SAS 9266-8i. Имеет одинаковый командный интерфейс для RHEL 5.8, RHEL 6.1, Fedora 15, EFI (не все возможности реализованы), Solaris, FreeBSD, VMware ESX 4.0, VMware ESXi 4.U2, MS Windows 7, MS Windows Server 2008 R2. Не поддерживает работу со снимками.

Установка выполнена в виде пакета storcli-1.02.08-1.noarch.rpm (/opt/MegaRAID/storcli/storcli64).

Командный интерфейс имеет следующий формат: [указатель-объекта] команда [параметр] [ключ=значение] [J]. Указание "J" в конце строки приводит в форматированию ответа в формате JSON. Булевы параметры задаются в виде "on" и "off".

Указатель объекта:

Команды:

Пример замены дисков (после вставки UNCONFIGURED_GOOD, Foreign Configuration Detected):

/opt/MegaRAID/storcli/storcli64 /c0/e8/s7 insert dg=0 array=0 row=7 # from UNCONFIGURED_GOOD to OFFLINE
/opt/MegaRAID/storcli/storcli64 /c0/e8/s14 insert dg=0 array=0 row=14
/opt/MegaRAID/storcli/storcli64 /c0/e8/s7 start rebuild # from OFFLINE to REBUILD
/opt/MegaRAID/storcli/storcli64 /c0/e8/s14 start rebuild
/opt/MegaRAID/storcli/storcli64 /c0/e8/s7,14 show rebuild

Руководство от 2013 года.

Изменения от 1.02.08 до 1.13.06: AdpRestart, FastPath для отдельного устройства, NCQ для отдельного устройства, сброс настроек на фабричные, adpsetsata, adpdiag, adpshutdown, подписанные прошивки, удалено обновление прошивок дисков, управление списком плохих блоков (даже не показывает), show health, можно посмотреть и сбросить количество ошибок (show phyerrorcounters) для ящика и диска, проверка памяти контроллера (и где?), поддержка 128 устройств на полке, разбивка и сборка зеркала, обновление прошивки батарйки (GG - GasGauge).

Изменения от 1.13.06 до 1.18.05: можно посмотреть и сбросить количество ошибок для SATA устройств (show phyerrorcounters), поддержка кеширования записи (write-back) для не-RAID режимов, включение и выключение кеша диска для не-RAID режимов, включение и выключение SED (самошифрование) для не-RAID режимов, включение и выключение эмуляции 512-байтных блоков, создание RAID00, поддержка HA (Synchro), объединение групп дисков нечётного размера в RAID0 (span), вывод данных SMART для SATA устройств (шестнадцатеричный дамп ;), установка интервалов опроса температуры SSD и НЖМД, возможность обновления прошивки без перезагрузки (resetnow), возможность автоматического объявления диска неисправным при ошибках SMART, CacheCade 2.5 (максимальный размер увеличен до 2TiB), сохранение конфигурации в двоичный файл (get) и восстановление (set), поддержка Large IO (1МБ), поддержка очереди большой глубины.

Изменения от 1.18.05 до 1.21.06: новые команды (?) для новых свойств (?) контроллера, HDDThermalPollInterval, SSDThermalPollInterval.

MegaCLI

Утилита MegaCLI (/opt/MegaRAID/MegaCli/MegaCli64) предназначена для управления RAID контроллерами фирмы LSI Logic, например, MegaRAID SAS 9266-8i

Установка выполнена в виде 2 пакетов Lib_Utils-1.00-09.noarch.rpm (/opt/lsi/3rdpartylibs/) и MegaCli-8.07.10-1.noarch.rpm (/opt/MegaRAID/MegaCli/).

Чудовищно неудобный интерфейс, но storcli имеет не все функции (а те что имеет не все работают правильно. Примеры:

/opt/MegaRAID/MegaCli/MegaCli64 -pdInfo -PhysDrv[25:0] -a0 # информация о диске в слоте 0 корзины 25
/opt/MegaRAID/MegaCli/MegaCli64 -PDMakeGood -PhysDrv[25:0] -a0 # объявить плохой (BAD) диск хорошим, на диск в состоянии Failed не действует
/opt/MegaRAID/MegaCli/MegaCli64 -AdpSetProp ReconRate -100 -a1 # увеличить приоритет реконструкции до максимума
/opt/MegaRAID/MegaCli/MegaCli64 -ldrecon -start -r6 -add -physdrv[16:16] -l0 -a1 # добавление 17-го диска в RAID6
/opt/MegaRAID/MegaCli/MegaCli64 -ldrecon -showprog -l0 -a1 # следить
/opt/MegaRAID/MegaCli/MegaCli64 -ldinfo -l0 -a1 # узнать состояние

Автономный дисковый массив Sun StorEdge 3310 (SCSI)

Фирма Sun Microsistems (в девичестве Dot Hill Systems) выпускала семейство автономных дисковых массивов Sun StorEdge 3000 (Sun StorageTek), монтируемых в стойку и подключаемых к серверам с помощью интерфейса SCSI или Fibre-Channel. Например, модель Sun StorEdge3310 SCSI Array представляет собой

Изменения в версии прошивки 4:

Для обновления с версии 3 до версии 4 (версия 4.21E, 113722-17.zip) необходимо использовать специальную инструкцию (58 страниц) и скрипт s3kdlres

Настройка извещений SNMP и e-mail производится путём засылки файла agent.ini через FTP (режим binary) в /cfg, после чего необходимо сбросить контроллер (уровни: 1 - все сообщения, 2 - предупреждения, 3 - аварийные сообщения):

[SNMP_TRAP]
ENABLED=1
SEVERITY=1
COMMUNITY=имя-сообщества
RECEIVER1=IP-адрес
[EMAIL]
ENABLED=1
SEVERITY=1
SUBJECT=тема письма
SENDER_MAIL_BOX=обратный адрес
SMTP_SERVER=IP-адрес
RECEIVER1=адрес получателя

Автономный дисковый массив HP StorageWorks MSA 2012i (iSCSI)

Фирма HP выпускает MSA2000 - младшее семейство автономных дисковых массивов, монтируемых в стойку и подключаемых к серверам с помощью интерфейса iSCSI или Fibre-Channel (в девичестве Dot Hill). Например, модель MSA 2012i (Dot Hill 2330) представляет собой

Обещания по производительности (использовалась MSA2012i с 2 контроллерами и 48 SAS дисками (15K RPM, 300GB, по 12 штук на виртуальный диск)

RAID 10

Random Reads IOPs 8,200
Random Writes IOPs 4,500
Sequential Reads MB 300
Sequential Writes MBs 260

RAID 5

Random Reads IOPs 7,800
Random Writes IOPs 1,600
Sequential Reads MBs 300
Sequential Writes MBs 270

RAID 6

Random Reads IOPs 7,800
Random Writes IOPs 1,200
Sequential Reads MBs 300
Sequential Writes MBs 270

Равномерное распределение виртуальных дисков по контроллерам настолько агрессивно, что распределяет вновь созданный виртуальный диск на несуществующий контроллер. При смене привязки сбрасываются все отображения LUN (а потом тихонько возвращаются?).

Тестирование скорости (dd ibs=256k of=/dev/null; dd obs=256k if=/dev/zero; в МБ/сек), скорость ограничивается скоростью интерфейса и особенностями работы и настройками стека TCP и multipath round-robin в частности, скорость чтения через 2 порта значительно меньше суммы скоростей, а параметры необходимо подбирать исходя из характера загрузки):

Для справки: netperf в пределах сети - 941.07*10^6 Mbps, 10160.36 Tps

None-RAID 1 диск SATA-2 750GB

чтение через 1 порт  - 65369.60
запись через 1 порт  - 56459.20
чтение через 2 порта - 31961.60 и 32256.00
запись через 2 порта - 28173.60 и 28238.40

RAID-5 из 11 дисков SATA-2 750GB
чтение через 1 порт  - 68023.22
чтение через 2 порта - 60736.00 и 60608.00

2 MSA по RAID-5 из 11 дисков SATA-2 750GB
одновременное чтение через порты в одной сети   - 33775.11 и 31785.71
одновременное чтение через порты в разных сетях - 64742.77 и 64397.00

RAID-6 из 12 дисков SATA-2 750GB, multipath через порты в разных сетях

bonnie++
        ------Sequential Output------ --Sequential Input- --Random-
        -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
   Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
 33000M           55690  11 30400   7           67892   6 321.4   0 # память 16GB
 65000M          105654  26 20665   3           60103   6 420.3   4 # ext4 через полгода bacula в 2 потока, память 32 GB
 65000M           98104  23 17668   3           50772   4 474.3   1 # --//--, суперпоследовательная оптимизация кеша
 65000M           30368   6 13508   1           65082   3 415.0   0 # после 2 лет работы bacula на ext3/4 в 8 потоков 
                                                                      (некоторое время был заполнен на 97%) 
130000M           90122  22 23518   4           72975   5 391.2   1 # --//--

суперпоследовательная оптимизация кеша, jumbo=on
pvcreate -M2 --dataalignment 640
vgcreate
lvcreate --extents 100%FREE
mkfs.xfs -f -L bacula -d su=64k,sw=10 -i attr=2,maxpct=5 -l su=64k,lazy-count=1

xfs_check # потребовал 15GB (2GB по-настоящему) и 10 секунд для 7.5TB
xfs_db -c frag -r # 6.5% после заполнения 50ГБ в 2 потока
xfs_fsr -v [-t 600] /dev/backup/bacula

        ------Sequential Output------ --Sequential Input- --Random-
        -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
   Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
 65000M           96573  18 30252   3           73352   4 304.9   0 # allocsize=512m, кеш чтения - Default
 65000M           98545  18 43868   4           90004   5 264.3   0 # кеш чтения - максимум
 65000M           92294  16 44052   4           86076   4 263.3   0 # кеш чтения - максимум, biosize=64k,logbufs=8,allocsize=512m

Однако:
  пересылка по сети и раз-tar-ивание (3 потока параллельно) - 115 MB/s (видимо, ограничивается сетью)
  дефрагментатор xfs - 50 MB/s
  "tar -cvf - | dd bs=1024k of=/dev/null" - 100 MB/s

Автономный дисковый массив HP StorageWorks MSA 2012fc G2 (FC)

Фирма HP выпускает MSA2000 - младшее семейство автономных дисковых массивов, монтируемых в стойку и подключаемых к серверам с помощью интерфейса iSCSI или Fibre-Channel (в девичестве Dot Hill). Например, модель MSA 2012fc G2 (контроллер MSA 2312fc G2, Dot Hill 5730) представляет собой

Тестирование скорости с помощью bonnie++

RAID-0 из N дисков 1TB Seagate ST31000340NS SATA-2 7200rpm
Chunk Size : 64KB, оптимизация упреждающего чтения автоматическая, по умолчанию

Version  1.03       ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
число дисков   Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
  2           70000M           102553  12  55371   5           184087   6 430.3   0
  3           70000M           131077  15  75538   7           292132  13 532.7   0
  4           70000M           149183  17  79300   8           258126  14 574.8   0
  5           70000M           194501  23  98743  10           346520  17 634.5   0
  6           70000M           214002  25 107817  12           379969  19 649.4   0
  8           70000M           242218  29 116467  13           373382  21 699.8   1
 12           70000M           265360  31 125728  15           341852  19 731.8   1

RAID-10 из N дисков 1TB Seagate ST31000340NS SATA-2 7200rpm

  4           70000M           100837  12  56266   6           184465  10 602.6   0
  8           70000M           178517  21  92754  10           349848  20 735.3   1
 12           70000M           212653  25 106621  12           366181  21 747.9   1

RAID-50 из N дисков 1TB Seagate ST31000340NS SATA-2 7200rpm

2 группы по 6 70000M           174710  21  96354  11           373342  22 728.7   0
3 группы по 4 70000M           186787  22 100600  11           384155  21 735.0   1 stride=48
4 группы по 3 70000M           167989  20  91020  11           377848  22 723.0   1

программный RAID-0 из аппаратных RAID-5 на 12 дисках
pvcreate --metadatasize 250k /dev/sdX
vgcreate test /dev/sdX ...
lvcreate --name test --size 1000G --stripes N --stripesize 256 test
mke2fs -j -v -m 0 -L raid5lvm -F -E stride=64,resize=4026531840 /dev/test/test

2 RAID-5 по 6 70000M           206390  25 111458  10           374298  13 736.2   1
3 RAID-5 по 4 70000M           227099  28 117402  11           383920  15 731.2   1 --stripesize 256, stride=64
3 RAID-5 по 4 70000M           227976  28 114904  11           337288  13 688.2   1 --stripesize 128, stride=32
3 RAID-5 по 4 70000M           229970  28 123886  13           390505  19 713.7   1 --stripesize 512, stride=128

RAID-6  из N дисков 1TB Seagate ST31000340NS SATA-2 7200rpm

  4           70000M            36873   4 17997   1            53444   2 349.5   0 в процессе инициализации
  4           70000M            63670   7 38334   4           174501   9 403.4   0
  5           70000M            39123   4 21356   2            70664   3 315.9   0 в процессе инициализации
  5           70000M            79752   9 50187   5           272188  14 469.0   0
  6           70000M            41005   4 31172   3           119483   6 348.9   0 в процессе инициализации
  6           70000M            96113  11 69414   7           309956  17 419.9   0 в процессе инициализации других массивов
  7           70000M            94743  11 60511   6           319309  17 464.7   0
  8           70000M           102035  12 64456   7           358320  21 560.5   1
 10           70000M           108381  13 68288   8           358073  21 639.1   0
 11           70000M           111613  13 75990   9           358021  20 678.0   0
 12           70000M           105093  12 65210   7           358328  21 667.4   0
 12           70000M            32013   3 18330   2           108484   6 257.2   0 stride=192, в процессе инициализации
 12           70000M           104753  12 66509   7           353305  19 623.6   0 stride=192
 12           70000M            60431   7 42133   5           348516  19 548.5   0 write-through
 12           70000M           105530  12 66456   7           345446  17 587.3   0 Super Seq
 12           70000M           105564  12 59943   7           252558  14 742.5   0 disable read ahead
 12           70000M           103455  12 54955   6           147436   8 490.4   0 verify vdisk
 12           70000M           102950  12 55329   6           165259   9 476.8   0 Media Scrub 
 12           70000M            92934  11 60056   6           324321  18 631.1   1 без одного диска
 12           70000M            69466   8 29889   3            66511   3 434.5   0 без двух дисков
 12           70000M            30106   3  8400   0            15417   0 319.0   0 во время восстановления 2 дисков

RAID-5  из N дисков 1TB Seagate ST31000340NS SATA-2 7200rpm

  3           70000M            42334   5 21988   2            74152   3 297.3   0 в процессе инициализации
  3           70000M            74033   8 44589   4           184143  10 423.4   0 в процессе инициализации других массивов
  3           70000M            74337   8 44193   4           185166  10 429.6   0
  4           70000M            84052  10 52809   5           252145  14 432.7   0 в процессе инициализации других массивов
  5           70000M           106571  12 64520   7           315761  16 513.9   0
  6           70000M            37603   4 29330   3           112317   6 500.6   0 в процессе инициализации
  6           70000M           113185  13 66457   7           335388  18 479.1   0 в процессе инициализации других массивов
 10           70000M           133464  21 79293  12           355243  25 600.8   3
 11           70000M           140085  16 81787   9           379964  22 711.3   1
 12           70000M           141929  18 83381  10           376638  22 716.9   1


RAID-6 из 12 дисков 2TB Seagate ST200NM0011 SATA-2 7200rpm QLE2562 через FC коммутатор в 2 порта MSA 2xXeon X5570 с HT, CentOS 6.2 multipath policy=queue-length mkfs.xfs -L raid6of12 -d su=64k,sw=10 -l su=64k /dev/mapper/raid6of12_v001 mount -o nodiratime,attr2,logbufs=8,logbsize=65536 /dev/mapper/raid6of12_v001 /mnt bonnie++ 1.96 100000M 410861 25 170206 17 550223 30 576.5 42 Latency 62767us 130ms 75183us 43089us восстановление данных с 2 серверов хранения в 2 потока - 185 MB/s (4.4 TB, 5.2 млн файлов) - 160 MB/s (15 TB, 22 млн файлов) чтение восстановленного (1.2TB) find share3h|cpio -oa|dd bs=1024k of=/dev/null - 184 MB/s tar -cf - share3h|dd ibs=1024k of=/dev/null - 218 MB/s в 2 потока одновременно (разные куски) - 173 MB/s копирование (1.2TB) tar -C copy1 -cf - share3h|dd bs=1024k|tar -C copy2 -xf - - 92.3 MB/s в 2 потока одновременно - 77.7 MB/s mkfs.ext4 -L raid6of12 -E stride=16,stripe_width=160,lazy_itable_init=1,lazy_journal_init=1 \ -m 0 -N 100000000 -v -G 64 -J size=512 /dev/mapper/raid6of12_v001 mount -o nodiratime,data=writeback,nobh,nobarrier,journal_checksum,journal_async_commit,stripe=160,\ delalloc,commit=60,max_batch_time=30000,min_batch_time=1000,init_itable=0 подождать завершения инициализации перед тестированием восстановление данных с 2 серверов хранения по 2 потока - 315 MB/s (1.6 TB, 2.2 млн файлов) восстановление данных с 2 серверов хранения по 2 потока - 280 MB/s (3.6 TB, 4 млн файлов) восстановление данных с 2 серверов хранения по 2 потока - 240 MB/s (15 TB, 22 млн файлов) чтение восстановленного: "tar -cf - share3h|dd ibs=1024k of=/dev/null" - 227 MB/s (1.2TB) чтение восстановленного в 2 потока одновременно (разные куски) - 160 MB/s (300GB) копирование: "tar -C copy1 -cf - share3h|dd bs=1024k|tar -C copy2 -xf -" - 123 MB/s (1.2TB) fsck.ext4 потребовала 10 минут и 1GB ОЗУ (15 TB, 22 млн файлов) mkfs.btrfs --data single --metadata single mount -o nobarrier,compress=lzo-force,space_cache восстановление данных с 2 серверов хранения по 2 потока - 311 MB/s (1.1 TB) отключил HT mkfs.btrfs --data single --metadata single mount -o nobarrier,compress=lzo,space_cache восстановление данных с 2 серверов хранения, 3 потока - 311 MB/s (1.1 TB)

Низкоуровневые тесты (multipath по FC - 2 порта сервера и 2 порта полки) показывают ограничение в 640000 КБ/сек, что не удивительно т.к. в качестве SAS контроллера стоит LSI 1068 (плюс экспандер), а это PCI-X 64bit @ 133 MHz (возможно - по крайней мере при старте - @ 100 MHz), а это 8.5 Gbps (6.4 Gbps); кстати, это объясняет медленную инициализацию RAID6 (12 чтений и 2 записи для каждого блока): 640000/14 = 45 KB/s):

перезапись: badblocks -svw -p 999 -b $[1024*1024] /dev/sda 100

367948.80 KB/s туда и столько же обратно (6028473139.20 bps)

sda               0.00     0.00  181.80  177.60 93081.60 90931.20  1024.00    47.83 134.34   2.37  85.02
sdb               0.00     0.00  178.10  181.80 91187.20 93081.60  1024.00    46.61 130.60   2.37  85.12
sdg               0.00     0.00  180.40  179.65 92364.80 91980.80  1024.00    51.00 142.23   2.36  85.14
sdh               0.00     0.00  178.35  181.80 91315.20 93081.60  1024.00    47.76 132.47   2.37  85.36

чтение из буфера: badblocks -sv -p 9999 -b $[1024*1024] /dev/sdc 100

sda               0.00     0.00  628.50    0.00 321792.00     0.00  1024.00    52.39 82.94   1.58  99.41
sdh               0.00     0.00  628.75    0.00 321920.00     0.00  1024.00    51.87 82.21   1.58  99.37

или

sda               0.00     0.00  314.65    0.00 161100.80     0.00  1024.00    53.47 170.87   3.17  99.69
sdb               0.00     0.00  315.35    0.00 161459.20     0.00  1024.00    60.49 193.51   3.16  99.67
sdh               0.00     0.00  314.65    0.00 161100.80     0.00  1024.00    55.37 176.96   3.17  99.64
sdi               0.00     0.00  315.40    0.00 161484.80     0.00  1024.00    58.72 186.41   3.16  99.68

Попытка обхода аппаратного RAID-контроллера - все 12 дисков подключаются как отдельные диски, 6 штук к HBA port 0 и MSA port 1, вторая шестёрка к HBA port 1 и MSA port 2, никаких multipath

mdadm --create /dev/md/raid6of12 --verbose --raid-devices=12 --level=raid6 --name=raid6of12  --chunk=64 /dev/sd{a,b,c,d,e,f,g,h,i,j,k,l} 
mdadm: layout defaults to left-symmetric
mdadm: size set to 1951543424K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md/raid6of12 started.

echo 2048 > /sys/block/md127/md/stripe_cache_size # измеряется в кол-ве страниц * на кол-во устройств 

mkfs.ext4 -L raid6of12ext4 -E
stride=16,stripe_width=160,lazy_itable_init=1,lazy_journal_init=1 -m 0 -N 100000000 -v -G
64 -J size=512 /dev/md/raid6of12
mke2fs 1.42 (29-Nov-2011)
fs_types for mke2fs.conf resolution: 'ext4', 'huge'
Filesystem label=raid6of12ext4
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=16 blocks, Stripe width=160 blocks
100054752 inodes, 4878858560 blocks
0 blocks (0.00%) reserved for the super user
First data block=0
148891 block groups
32768 blocks per group, 32768 fragments per group
672 inodes per group
Superblock backups stored on blocks:
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
    4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
    102400000, 214990848, 512000000, 550731776, 644972544, 1934917632,
    2560000000, 3855122432

Allocating group tables: done
Writing inode tables: done
Creating journal (131072 blocks): done
Writing superblocks and filesystem accounting information: done 

mount -o nodiratime,relatime,data=writeback,nobh,nobarrier,journal_checksum,journal_async_commit,stripe=160,delalloc,commit=60,max_batch_time=30000,min_batch_time=1000,init_itable=0 /dev/md/raid6of12 /mnt 

перед тестами подождать завершения инициализации (lazy_itable_init) 

очень медленно

for disk in sda sdb sdc sdd sde sdf sdg sdh sdi sdj sdk sdl ; do echo deadline > /sys/block/$disk/queue/scheduler; done
не помогло 

for disk in sda sdb sdc sdd sde sdf sdg sdh sdi sdj sdk sdl ; do echo 1 > /sys/block/$disk/queue/iosched/fifo_batch; done
не помогло 

set cache-parameters read-ahead-size disable vd12_v001
стало хуже 

or disk in sda sdb sdc sdd sde sdf sdg sdh sdi sdj sdk sdl ; do echo 0 > /sys/block/$disk
# 128/bdi/read_ahead_kb; done
без изменений

echo 640 > /sys/block/md127/bdi/read_ahead_kb # 1280
без изменений

bonnie++ -d /mnt/temp -s 100000 -n 10:1200000:2000:1000 -u ... -f

Version  1.96       ------Sequential Output------ --Sequential Input- --Random-
Concurrency   1     -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
s87.cs.niis 100000M           233291  18 217217  18           676717  24 514.7  49
Latency                        1126ms     372ms             73757us   51673us
Version  1.96       ------Sequential Create------ --------Random Create--------
s87.cs.niisi.ras.ru -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
files:max:min        /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
10:1200000:2000/1000   477  17 10953 100  8742  81   441  15 10883  99  8298  79
Latency              1868us     324us     214us    2465us     216us     261us 

bonnie++ -d /mnt/temp -s 200000 -n 100:1200000:2000:1000 -u ... -f

Version  1.96       ------Sequential Output------ --Sequential Input- --Random-
Concurrency   1     -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
s87.cs.niis 200000M           254317  20 224694  19           604162  24 362.4  48
Latency                        1494ms     479ms               104ms   50660us
Version  1.96       ------Sequential Create------ --------Random Create--------
s87.cs.niisi.ras.ru -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
files:max:min        /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
100:1200000:2000/1000   593  21   222   7 14449  87   598  22    69   2 12838  94
Latency               527ms     390ms   29019us     328ms     270ms     559us 

2 * bonnie++ -d /mnt/temp -s 200000 -n 100:1200000:2000:1000 -u ... -f
каждый по
Version  1.96       ------Sequential Output------ --Sequential Input- --Random-
Concurrency   1     -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
s87.cs.niis 200000M           142320  12 100272   8           206452   8 304.3  31
Latency                        1626ms     407ms               189ms   98392us
Version  1.96       ------Sequential Create------ --------Random Create--------
s87.cs.niisi.ras.ru -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
files:max:min        /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
100:1200000:2000/1000   290  11    79   3 15541  73   277  11    31   1 11283  64
Latency               827ms     206ms     255ms     527ms     884ms    1344ms 

3 * bonnie++ -y s -d /mnt/temp -s 200000 -n 100:1200000:2000:1000 -u ... -f

Version  1.96       ------Sequential Output------ --Sequential Input- --Random-
Concurrency   1     -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
s87.cs.niis 200000M           91630   8 67441   5           133159   5 242.0  20
Latency                        3426ms     497ms               452ms     543ms
Version  1.96       ------Sequential Create------ --------Random Create--------
s87.cs.niisi.ras.ru -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
files:max:min        /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
100:1200000:2000/1000   179   7    56   2 14904  67   188   8    26   1 14470  69
Latency              2646ms     232ms     793ms    1428ms    1954ms    5871us 

для сравнения
bonnie++ -d /dev/shm -s 40000 -n 50:1200000:2000:1000 -u ... -f  -r 20000

Version  1.96       ------Sequential Output------ --Sequential Input- --Random-
Concurrency   1     -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
s87.cs.niisi 40000M           2458481  99 2894431  99           6046942  99 +++++ +++
Latency                          70us      59us                61us      56us
Version  1.96       ------Sequential Create------ --------Random Create--------
s87.cs.niisi.ras.ru -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
files:max:min        /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
50:1200000:2000/1000  4281  99  7910  99 19562  98  4326  99  8665  99 20529  99
Latency               595us     880us     437us     597us     369us     572us


cat /sys/block/sd?/bdi/read_ahead_kb 128 echo 16384 > /sys/block/md127/md/stripe_cache_size echo 0 > /proc/sys/vm/vfs_cache_pressure cat /sys/block/md127/bdi/read_ahead_kb 1280 восстановление в 1 поток (share3h_s192 от 2012-02-19, 2356043 файлов, 1.301 TB разжимается в 3,859,036,704,975 ) - 175826.3 KB/s восстановление в 2 потока (share3h_s192 и share3h_s196 от 2012-02-19) - 7.3TB, 9.5 млн файлов nodiratime,relatime,data=ordered,journal_checksum,stripe=160 - 166 MB/s nodiratime,relatime,data=writeback,journal_checksum,stripe=160 - 170 MB/s, фрагментация - 1.009 nodiratime,relatime,data=ordered,commit=60,journal_checksum,stripe=160,init_itable=0 - 181MB/s nodiratime,relatime,data=writeback,commit=60,journal_checksum,stripe=160,init_itable=0,nobh,nobarrier,max_batch_time=30000,min_batch_time=1000 - 185MB/s
без журнала mkfs.ext4 -L raid6of12ext4 -E stride=16,stripe_width=160,lazy_itable_init=1 -m 0 -N 100000000 -v -G 64 -O '^has_journal' /dev/md/raid6of12 mount -o nodiratime,relatime,data=ordered,commit=60,stripe=160,init_itable=0, nobh,nobarrier,max_batch_time=30000,min_batch_time=1000 179 MB/s
mkfs.ext4 -L raid6of12ext4 -E stride=16,stripe_width=160,lazy_itable_init=1 -m 0 -N 100000000 -v -G 64 -J size=512 /dev/md/raid6of12 mount -o nodiratime,relatime,data=writeback,commit=60, journal_checksum,journal_async_commit, \ stripe=160,init_itable=0,nobh,nobarrier,max_batch_time=30000,min_batch_time=1000 echo 32768 > /sys/block/md127/md/stripe_cache_size tar -C /mnt -cf - share3h|dd ibs=1024k of=/dev/null 3861358141440 bytes (3.9 TB) copied, 16860 s, 229 MB/s, скорость падает до нуля на длительные (более часа) периоды после дефрагментации - 226 MB/s set cache-parameters read-ahead-size disable vd??_v001 и прочее - 224 MB/s tar -C /mnt -cf - share3h|dd bs=1024k|tar -C /mnt/copy2 -xf - 3861358141440 bytes (3.9 TB) copied, 35323.3 s, 109 MB/s, скорость копирования падает до нуля на длительные (более часа) периоды чтение этой копии после дефрагментации - 295 MB/s
mdadm --create /dev/md/raid6of12 --verbose --raid-devices=12 --level=raid6 --name=raid6of12 --chunk=512 /dev/sd{a,b,c,d,e,f,g,h,i,j,k,l} mkfs.ext4 -L raid6of12ext4 -E stride=128,stripe_width=1280,lazy_itable_init=1 -m 0 -N 100000000 -v -G 64 -J size=512 /dev/md/raid6of12 mount -o nodiratime,relatime,data=ordered,journal_checksum,stripe=1280,commit=60,init_itable=0 /dev/md/raid6of12 /mnt echo 16384 > /sys/block/md127/md/stripe_cache_size echo 0 > /proc/sys/vm/vfs_cache_pressure echo 1024 > /sys/block/md127/bdi/read_ahead_kb восстановление в 2 потока (share3h_s192 и share3h_s196 от 2012-02-19) - 7.3TB, 9.5 млн файлов система перезагружается
mount -o nodiratime,relatime,data=ordered,journal_checksum,stripe=1280,init_itable=0 /dev/md/raid6of12 /mnt echo 4096 > /sys/block/md127/md/stripe_cache_size echo 100 > /proc/sys/vm/vfs_cache_pressure echo 10240 > /sys/block/md127/bdi/read_ahead_kb восстановление в 2 потока (share3h_s192 и share3h_s196 от 2012-02-19) - 7.3TB, 9.5 млн файлов - 182 MB/s восстановление в 4 потока - 188 MB/s чтение в 1 поток tar -C /mnt/share3h --numeric-owner --delay-directory-restore -cf - eboris swa kochnov | dd bs=65536k of=/dev/null 218 MB/s, скорость падает до нуля на длительные (более часа) периоды копирование восстановленного tar -C /mnt/share3h --numeric-owner --delay-directory-restore -cf - eboris swa kochnov | dd bs=65536k|tar -C /mnt/copy2 -xf - 107 MB/s, скорость падает до нуля на длительные (более часа) периоды чтение скопированного - 309 MB/s, скорость до нуля не падает чтение скопированного в 2 потока - 134 MB/s и 176 MB/s

Кто-то тут захлёбывается при записи. Как позднее выяснилось (при исследовании XFS) достаточно было достаточно было не накапливать для записи более половины кеша RAID контроллера, а начинать запись на ранних стадиях.

Single Point of Connectivity Knowledge (SPOCK)

Автономный дисковый массив HP StorageWorks MSA P2000 G3 (FC)

Фирма HP выпускает MSA2000 - младшее семейство автономных дисковых массивов, монтируемых в стойку и подключаемых к серверам с помощью интерфейса iSCSI, SAS или Fibre-Channel. Например, модель MSA P2000 G3 (контроллер HP P2000 G3 8G FC Array Controller) представляет собой (есть также модели контроллеров с подключением к хосту с использованием интерфейсов: GbE iSCSI (4 порта), 10GbE iSCSI (2 порта), комбинированный на 2 порта 8G FC и 2 порта GbE iSCSI, 6Gb SAS-2 (4 порта))

Различия версий (TS100 требуется обновлять до TS240/TS250 через TS230; прошивки дополнительных полок обновляются по ходу дела; с первого раза обновились только SC и FPGA; на второй раз обновился MC со сбросом паролей и чего-то ещё; CPLD не обновился совсем)

Тестирование скорости с помощью bonnie++ (сервер - 2 Xeon X5570 @ 2.93GHz, 32GB, HBA QLE2460 4Gb, нагружен средне, CentOS 5.4)

RAID-5  из 12 дисков 2TB SATA-2 7200rpm (ST32000644NS и Hitachi HUA72202)

mkfs.xfs -L raid5big -d sunit=128,swidth=1408 -i attr=2 -l sunit=128,lazy-count=1 /dev/sdc

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
s87.cs.niis 100000M           445521  38 96895   8           218010  10 271.7   1
s87.cs.niis 200000M           246986  47 60964  13           221932  30 209.6   2
   на пристежной полке во время восстановления 2 дисков на основной

...................

RAID-6  из 12 дисков 2TB SATA-2 7200rpm (ST32000644NS)

mkfs.xfs -L raid6big -d sunit=128,swidth=1280 -i attr=2 -l sunit=128,lazy-count=1 /dev/sdc

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
s87.cs.niis 200000M           403834  35  94620   7           273076  13 235.0   0
s87.cs.niis 200000M           410771  56  75923  10           282271  22 225.3   1 LVM (в фоне счётные задачи)
s87.cs.niis 200000M           410386  56  74963  10           292353  23 222.9   1 выровненный LVM (в фоне счётные задачи)
s87.cs.niis 200000M           229486  22  52521   5           301293  18 215.3   1 одновременно с пристяжной
s87.cs.niis 200000M           392023  41  65142   7           296032  20 209.5   1 на пристяжной полке
s87.cs.niis 200000M           186969  17  79849   8           258048  18 199.6   1 на пристяжной одновременно с основной
s87.cs.niis 200000M           404755  36  47188   3           121812   5 214.7   0 во время verify vdisk
s87.cs.niis 200000M           405970  35 100979   8           270521  12 200.7   0 без одного диска
s87.cs.niis 200000M           408703  35  60981   4           188220   9 193.5   0 во время восстановления 1 диска 
s87.cs.niis 200000M           415483  41  65207   7           111853   6 178.3   0 без двух дисков
s87.cs.niis 200000M           315359  28  17613   1            22529   1 135.6   0 во время восстановления 2 дисков 
s87.cs.niis 200000M            45914   4  20441   2            68359   4 191.4   1 во время расширения
s87.cs.niis 200000M           425988  36 107832  10           272421  17 254.8   0 из 16 дисков

................

RAID-50 (2 группы по 4 диска)

mkfs.xfs -L raid50 -d sunit=128,swidth=768 -i attr=2 -l sunit=128,lazy-count=1 /dev/sdd

s87.cs.niis 200000M           202880  20 76383   9           349293  23 210.2   1 во время расширения другого массива

................

RAID-50 (2 группы по 12 дисков)

s87.cs.niis 200000M           59542   4 49486   4           254665  15 333.9   0 том на часть пространства
s87.cs.niis 200000M           29588   2 23242   2           150873   9 329.7   0 одновременно 2 тома

...........................

2 RAID-6 из 12 дисков, объединённые в LVM (stripe)

pvcreate --metadatasize 250k /dev/sdc
pvcreate --metadatasize 250k /dev/sdd
vgcreate test /dev/sdc /dev/sdd
lvcreate --name test --extents 9529026 --stripes 2 --stripesize 64 test

mkfs.xfs -L raid6x2 -d sunit=128,swidth=256 -i attr=2 -l sunit=128,lazy-count=1 /dev/test/test

s87.cs.niis 200000M           338832  40 111083  13           298993  23 219.5   1

mkfs.xfs -L raid6x2 -d sunit=128,swidth=2560 -i attr=2 -l sunit=128,lazy-count=1 /dev/test/test

s87.cs.niis 200000M           409243  52 117945  11           297577  17 222.6   1

......................

кусочки от 3 RAID-6 из 8 дисков по 2ТБ, объединённые в LVM (stripe)

pvcreate -M2 --dataalignment 393216 ... # ошибочка вышла
lvcreate --extents 100%FREE --stripes 3 --stripesize 64

mkfs.xfs -f -L raid603x8 -d sunit=128,swidth=2304 -i attr=2 -l sunit=128,lazy-count=1

s87.cs.niisi 65000M           469612  50 114022  10           227135  11 404.5   1

mkfs.ext4 -t ext4 -v -j -m 0 -N 50000000 -b 4096 -E stride=16,stripe-width=96,resize=4294967295

mount -o stripe={96|16}[,nodiratime,data=writeback,nobh,nobarrier,journal_checksum,journal_async_commit,\
    delalloc[,commit=60,max_batch_time=30000,min_batch_time=1000]]

s87.cs.niisi 65000M  450800  73 68420   8  198869  13 572.5   3 # запись давит чтение

mount -o nodiratime,data=journal,stripe=96,delalloc /dev/shareh/shareh /mnt

s87.cs.niisi 65000M  150459  28 105857  17  308509  18 606.5   3 # чтение быстрее, чем с блочного устройства

...............................................
кусочки от 3 RAID-6 из 8 дисков по 2ТБ, объединённые в LVM (stripe), jumbo

pvcreate -M2 --dataalignment 384
vgcreate /dev/sdc
lvcreate --extents 100%FREE --stripes 3 --stripesize 4096

mkfs.ext4 -t ext4 -v -j -m 0 -N 50000000 -b 4096 -E stride=16,stripe-width=1024,resize=4294967295

mount -o nodiratime,data=writeback,nobh,nobarrier,journal_checksum,journal_async_commit,stripe=1024,\
    delalloc,commit=60,max_batch_time=30000,min_batch_time=1000

s87.cs.niisi 65000M           473415  69 180215  21           316363  19 574.2   3
s87.cs.niis 200000M           423135  65 213959  26           364651  22 416.9   3
s87.cs.niis 200000M           298759  39 100980   8           243675  10 272.8   1 \ доступ к 2 массивам
s88.cs.niis 200000M           303136  41 101154   8           240795  10 298.3   1 / с двух серверов

mkfs.xfs -f -L raid603x8 -d sunit=128,swidth=2304 -i attr=2 -l sunit=128,lazy-count=1

s87.cs.niisi 65000M           477041  52 270923  28           302693  17 345.7   1
s87.cs.niis 200000M           423966  52 282959  31           336305  20 291.6   2

mkfs.xfs -L имя -d su=64k,sw=6,unwritten=0 -i attr=2 -l su=64k,lazy-count=1 
# 32 группы
mount -o nodiratime,attr2,logbufs=8,logbsize=65536

s87.cs.niisi 65000M           448391  54 281009  30           296841  18 358.7   2
s87.cs.niis 200000M           416060  53 286569  31           332648  19 276.2   2
s87.cs.niis 200000M           228723  30 140457  15           254638  17 255.1   1 \ доступ к 2 массивам
s88.cs.niis 200000M           229845  27 141177  12           256869  13 207.3   1 / с двух серверов
...................................................................................
кусочки от 2 RAID-6 из 8 дисков по 2ТБ, объединённые в LVM (stripe), 

lvcreate  --stripes 2 --stripesize 4096

mkfs.ext4 -t ext4 -v -j -m 0 -N 50000000 -b 4096 -E stride=16,stripe-width=96,resize=4294967295
(метаданные пишутся только на первый том)
mount -o nodiratime,data=writeback,nobh,nobarrier,journal_checksum,journal_async_commit,stripe=96,\
   delalloc,commit=60,max_batch_time=30000,min_batch_time=1000

s87.cs.niisi 65000M           495005  61 164577  14           358421  14 653.3   1

mkfs.ext4 -t ext4 -v -j -m 0 -N 50000000 -b 4096 -E stride=16,stripe-width=1024,resize=4294967295
(метаданные пишутся только на первый том)
mount -o nodiratime,data=writeback,nobh,nobarrier,journal_checksum,journal_async_commit,stripe=1024,\
   delalloc,commit=60,max_batch_time=30000,min_batch_time=1000

s87.cs.niisi 65000M           443255  59 162881  14           368351  15 734.7   1

.....

добавить потом третий: lvresize -l +100%FREE --alloc anywhere -i 1 /dev/shareh/shareh /dev/sde

s87.cs.niisi 60000M           409946  49 119859  12           165101   7 613.9   1

.....

lvcreate --name shareh -l 2384184 --stripes 2 --stripesize 512
mkfs.ext4 -t ext4 -v -j -m 0 -N 50000000 -b 4096 -E stride=16,stripe-width=128,resize=4294967295
метаданные пишутся на оба тома

mount -o nodiratime,data=writeback,nobh,nobarrier,journal_checksum,journal_async_commit,stripe=128,\
   delalloc,commit=60,max_batch_time=30000,min_batch_time=1000

s87.cs.niisi 65000M           494875  67 82333   8           272691  16 800.7   3

.....

lvcreate --name shareh -l 2384184 --stripes 2 --stripesize 1024
mkfs.ext4 -t ext4 -v -j -m 0 -L shareh3 -N 50000000 -b 4096 -E stride=16,stripe-width=256,resize=4294967295
на первый том пришется вдвое больше метаданных

s87.cs.niisi 65000M           495058  63 101828   8           312680  12 814.4   1

Удаление 9.2 ТБ (12.2 миллионов файлов) в один поток: ext4 на RAID-6 из 12 дисков по 2ТБ - 69 минут.

Восстановление большого объёма данных в один поток (ext4 на 3 с большим stripe, 2.6TB, 850 тысяч файлов) - 161 MB/s.

Восстановление большого объёма данных (2 сервера хранения bacula по 2 потока, ферма загружена расчётами, HBA 4Gb, 6.9TB, 9.1 миллиона файлов):

Размножение каталога размером 40ГБ (60000 файлов) в 10 раз:

Сбор архива (find|cpio|dd в /dev/null, 400GB, 600000 файлов):

Опять столкнулся с проблемой "перенасыщения" канала записи: если долгое время (полчаса) записывать со скоростью, превосходящей возможности устройства, то оно устраивает итальянскую забастовку - начинает работать очень медленно (пробовал ext4 и xfs). Методы борьбы:

Ощущения:

Single Point of Connectivity Knowledge (SPOCK)

Автономный дисковый массив Xyratex RS-1220-F4-5412E-DL-2 (FC)

Фирма Xyratex является OEM изготовителем автономных дисковых массивов для крупных фирм (например, DotHill кое-что покупал у них и перепродавал Sun Microsystems), но и под своим именем продаёт кое-что (продавала, куплена фирмой Seagate в 2014 году). В частности, массив RS-1220-F4-5412E-DL-2 представляет собой

Тестирование производительности с помощью bonnie++

RAID-0 из N дисков 1TB Hitachi Ultrastar SATA-2 7200rpm
Chunk Size : 256KB, оптимизация упреждающего чтения автоматическая, кеш записи на максимум, пленных не брать

Version  1.03       ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
число дисков   Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
 2           70000M           154034  18 52089   5           105465   5 339.8   0
 3           70000M           199079  23 66847   8           134836   7 412.3   0
 4           70000M           198228  23 72659   9           152535   8 453.1   0
 8           70000M           355126  43 97116  12           173164   9 555.8   0
12           70000M           366382  45 97940  12           171738   9 588.7   0

RAID-10 из N дисков 1TB Hitachi Ultrastar SATA-2 7200rpm
Chunk Size : 256KB, оптимизация упреждающего чтения автоматическая, кеш записи на максимум, stride=64

 4           70000M           130748  15 45017   4           92608   5 379.6   0
 8           70000M           189578  23 65095   7           139989   8 500.4   0
10           70000M           194612  22 70603   8           145007   8 552.0   0
10           70000M           194612  22 70603   8           145007   8 552.0   0 stride=32
10           70000M           194612  22 70311   8           146595   8 508.6   0 stride=64
10           70000M           202690  24 69621   8           144356   7 511.4   0 stride=64, отключение sync
10           70000M           194545  23 67260   8           138141   7 454.8   0 stride=64, оптимизация записи High
10           70000M           172109  20 44177   4           105450   4 540.8   1 read ahead - 256KB, write cache - 16MB
                                                                                  blockdev --setra 512
RAID-50 из 12 дисков 1TB Hitachi Ultrastar SATA-2 7200rpm
Chunk Size : 256KB, оптимизация упреждающего чтения автоматическая, кеш записи на максимум, stride=64

2 по 6       97000M           187672  22 68720   6           135397   5 608.6   0
3 по 4       97000M           194267  23 71579   7           135391   5 607.7   0
4 по 3       97000M           145088  17 65661   6           127827   4 618.8   0

программный RAID-0 из аппаратных RAID-5 на 12 дисках
pvcreate --metadatasize 250k /dev/sdX
vgcreate test /dev/sda ...
lvcreate --name test --size 1000G --stripes N --stripesize 256 test
mke2fs -j -v -m 0 -L raid5lvm -F -E stride=64,resize=4026531840 /dev/test/test

2 RAID-5 по 6 97000M           199205  25 88243   7           225708   7 638.3   0
3 RAID-5 по 4 97000M           208597  25 97573   8           240688   8 641.6   0
4 RAID-5 по 3 97000M           187081  23 89140   7           236289   7 626.5   0

RAID-6  из N дисков 1TB Hitachi Ultrastar SATA-2 7200rpm
Chunk Size : 256KB, оптимизация упреждающего чтения автоматическая, кеш записи на максимум, stride=64

Version  1.03       ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
число дисков   Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
 4           70000M           48907   5 27848   3           114471   6 345.0   0
 4           70000M           25808   3 12185   1           30171   1 211.2   0 в процессе расширения массива
 5           70000M           78305   9 39589   4           112156   6 396.4   0
 6           70000M           86364  10 42772   4           126988   6 430.0   0
 8           70000M           113673  13 51845   6           156686   8 474.7   0
 9           70000M           128714  15 57132   7           147807   8 514.5   0
10           70000M           128102  15 57878   7           140892   7 556.0   0
11           70000M           143667  16 62470   7           152459   8 551.7   0
12           70000M           147563  17 64106   7           154492   8 565.8   0
12           70000M           143845  17 64253   8           153855   8 547.4   0 write cache - 256MB
12           70000M           147071  17 44473   4           133638   5 568.7   0 read ahead - 256KB, blockdev --setra 512
                                                                                  write cache - 256MB
12           70000M           122178  14 56704   6           195442  11 564.4   0 Chunk Size : 64KB, stride=16
12           70000M           141995  16 59529   7           177273   9 566.3   0 Chunk Size : 128KB, stride=32
12           70000M            56035   6 37342   4           138382   7 467.0   0 Chunk Size : 128KB, stride=32, вынул диск
12           70000M            32879   4 17748   1            52531   2 198.6   0 Chunk Size : 128KB, stride=32, rebuild 90%
12           70000M            29835   3 16093   1            36037   2 217.2   0 Chunk Size : 128KB, stride=32, 2 rebuild 90%

RAID-5  из N дисков 1TB Hitachi Ultrastar SATA-2 7200rpm
Chunk Size : 256KB, оптимизация упреждающего чтения автоматическая, кеш записи на максимум, stride=64

Version  1.03       ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
число дисков   Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
 3           70000M           56985   6 31489   3           108444   6 340.9   0
 4           70000M           82293   9 41021   4           141218   7 399.7   0
 5           70000M           90372  10 44551   5           152603   8 441.8   0
 6           70000M           106993  12 52880   6           156807   8 462.7   0
 8           70000M           127602  14 57122   6           162605   8 507.1   0
 9           70000M           128950  15 59892   7           145479   8 495.7   0
10           70000M           145503  18 62516   7           154679   8 565.7   0
11           70000M           151682  17 66264   8           158711   8 444.5   0
11           70000M           122347  14 57301   7           191635  10 578.2   0 Chunk Size : 64KB, stride=16
11           70000M           123191  14 59004   5           238416   8 582.3   0 Chunk Size : 64KB, stride=16
                                                                                  blockdev --setra 1024

Автономный дисковый массив Axus Yotta YB-16SAEF4PR4 (FC)

Фирма Axus выпускает семейство автономных дисковых массивов, монтируемых в стойку и подключаемых к серверу с помощью интерфейса SCSI SPI или Fibre-Channel. Например, модель Yotta YB-16SAEF4PR4 представляет собой

Интерфейсы управления и настройки: панель управления с 2 строками текста и 4 кнопками, терминал (RS-232, VT100, текстовое меню), telnet (текстовое меню, VT100, 80x24), WWW, SNMP (только чтение). Только один сеанс управления доступен в каждый момент времени. Меню панели управления, терминала, telnet похожи.

Нет возможности аккуратного выключения - ни кнопки, ни через меню, ни через telnet/HTTP.

Нет возможности завершить сеанс HTTP или telnet. Более того, если сеанс прервать, то любой человек может зайти с любого IP адреса в нечении некоторого времени без аутентификации.

Аутентификация только открытым текстом - telnet и HTTP/Basic.

Восстановление массивов идёт по очереди - сначала один диск, потом второй (восстановление одного диска 750G занимает 15 часов).

Как сбросить забытый пароль? Написать в службу поддержки, получить программу vm (под DOS) и файл с начальными параметрами conf.ini, подключиться к терминальному входу и запустить её (все параметры, включая пароль, будут сброшены).

При выдёргивании кабеля Ethernet теряется адрес, полученный по DHCP, при дальнейшем появлении Ethernet, устройство начинает требовать себе адрес 0.0.0.0, в чём сервер DHCP ему отказывает, и переключается на IP адрес из локальных настроек. В результате, требуется выключение питания.

Тестирование производительности на потоковой операции (bonnie++, всё возможное кеширование включено):

RAID-0 of N ST3750330NS
Version  1.03       ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
               Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
3             6000M           173555  50 89097  20           259319  20 363.5   0
4             6000M           220602  64 101328 22           293002  23 393.9   0
5             6000M           270277  76 105348 23           306952  24 416.6   0
6             6000M           278196  79 117769 26           313490  24 430.3   0
7             6000M           275877  79 126692 28           316171  25 437.1   1
8             6000M           277159  78 119052 27           317854  26 450.3   0

RAID-1 of N ST3750330NS
Version  1.03       ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
N              Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
2             6000M 39321  70 68552  20 34338   7 58647  93 103914   8 348.6   0
3             6000M           92042  27 55674  12           142539  11 359.9   0
4             6000M          138135  40 67912  15           190412  15 404.6   0

RAID-10 of 4 ST3750330NS
Version  1.03       ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
N              Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
4             6000M           106097  29 70521  16           183222  14 405.5   0

RAID-5 of N ST3750330NS
Version  1.03       ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
N              Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
3             6000M 42525  76 72995  21 45319  10 58902  91 206924  16 344.9   0
4             6000M           82129  23 57135  13           237482  19 389.6   0
5             6000M           89913  26 62805  14           258380  20 412.7   0
6             6000M          102240  30 70719  16           277214  22 429.8   0
7             6000M          110708  32 71952  16           280487  21 437.5   1
8             6000M          107539  32 73482  16           280100  22 439.5   1
9             6000M          132069  39 80662  18           283864  22 459.0   1
15            6000M          172463  46 105782 21           248563  19 585.0   1

RAID-6 of N ST3750330NS
Version  1.03       ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
N              Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
4             6000M           70336  20 49095  11           154773  12 390.2   0
5             6000M           84675  25 57985  13           235946  18 403.7   0
6             6000M           88725  26 64081  14           256832  20 418.6   0
7             6000M          105024  30 70119  16           276273  21 438.2   1
8             6000M          109307  31 69979  16           259965  20 471.4   0
9             6000M          110556  32 75198  17           283948  22 480.5   0
10            6000M          130276  37 82174  18           284371  22 478.2   1
11            6000M          140261  40 80693  18           276098  21 494.2   0
12            6000M          135555  39 82743  19           308627  24 508.5   1
13            6000M          168146  49 93225  21           277336  21 513.9   1
14            6000M          170925  49 91337  21           283634  22 520.8   1
15            6000M 53128 94 170712  46 99981  20 59003  91 353813  29 537.1   1
16            6000M          144650  42 87374  20           296136  23 532.1   1
16           60000M          127740  37 89675  21           372879  30 231.9   0

Программный RAID в ядре 2.4 (raidtools)

RAID массив создаётся из разделов, а не из дисков. При создании разделов необходимо указывать тип "fd" (Linux RAID auto). Далее надо описать массив в файле /etc/raidtab и создать его командой mkraid (пакет raidtools). Информация о конфигурации заносится на диск, что позволяет ядру при загрузке распознавать элементы RAID массивов и собирать массивы автоматически. Формат файла /etc/raidtab (raidtab(5), значение каждого параметра на отдельной строке вслед за именем параметра):

Ключи программы инициализации массива mkraid (первый параметр - имя массива):

Созданный массив можно форматировать и монтировать как обычный раздел. Состояние массива можно посмотреть в файле /proc/mdstat, который для каждого массива показывает его имя (md0), состояние (active), тип (raid1), составляющие массив разделы и их порядок в массиве, объём массива и состояние разделов ("U" - нормально, "_" - сбой).

Утилита lsraid позволяет получить информацию о RAID массиве, в т.ч. о вышедших из строя дисках (получает информацию с "оставшихся в живых", но хоть какая-то часть устройств должна быть доступна):

Утилита raidstop удаляет raid-устройство, не трогая исходные блочные устройства. Утилита raidstart собирает массив вновь без инициализации (запускает перестроение массива при добавлении вручную отформатированного раздела в массив взамен неисправного). Ключи:

Утилита raidreconf пытается (предварительное резервирование данных обязательно!) преобразовать массив из одного формата в другой или одиночный диск в массив (RAID-0 и RAID-5) или массив в одиночный диск, может также увеличить или уменьшить массив (RAID-0 и RAID-5). Ключи:

Для манипуляции дисками в массиве имеются утилиты raidhotadd, raidhotremove, raidsetfaulty.

Ещё более старый комплект mdtools делал RAID массив без сигнатур, для совместимости с этими старымим массивами имеется утилита raid0run.

device-mapper

Пакет device-mapper создаёт и обеспечивает работу нового логического блочного устройства на основе списка интервалов секторов блочных устройств (каждый сектор логического устройства отображается с помощью одного из методов - target - на существующие блочные устройства). Поддерживает методы отображения интервала (target, методы могут смешиваться при описании одного нового блочного устройства):

Используется в

Состоит из модулей ядра (CONFIG_BLK_DEV_DM), библиотеки libdevmapper (libdevmapper-event-lvm2mirror, libdevmapper-event-lvm2raid, libdevmapper-event-lvm2snapshot, libdevmapper-event-lvm2thin), устройства для управления модулем ядра из библиотеки /dev/mapper/control (c:10,63; создаётся с помощью "dmsetup mknodes"), утилиты dmsetup(8), демона dmeventd. В каталоге /dev/mapper также хранятся логические устройства. Наличие определяется по содержимому /proc/misc, /sys/class/misc/device-mapper (/sys/devices/virtual/misc/device-mapper).

Модули ядра

Первый параметр утилиты dmsetup задаёт команду, второй - логическое устройство. Опции:

Команды:

Формат таблицы (каждая строка описывает один интервал, параметры разделяются пробелом):

dm-crypt - шифрование блочного устройства с использованием device-mapper

Текст перенесён в статью о LUKS.

Псевдо-RAID в ядре 2.6

Физический доступ к дискам на псевдо-RAID контроллерах поддерживается специальными модулями ядра (подсистема libata):

Пакет dmraid обеспечивает поддержку псевдоаппаратного RAID (S, 0, 1, 10) с помощью device-mapper. Читает множество форматов метаданных описания RAID различных изготовителей (но не умеет делать изменения - например, в случае сбоя): Adaptec HostRAID ASR, JMicron JMB36x, VIA Software RAID, Highpoint 37x/45x, Intel Software RAID, LSI Logic MegaRaid, Promise FastTrak, Silicon Image Medley. Создаёт описание таблицы для device-mapper из прочитанных метаданных и создаёт логические блочные устройства. Читает таблицу разделов (MSDOS) с получившегося логического блочного устройства и активирует их.

Получившиеся логические блочные устройства могут быть использованы непосредственно или с построением программного RAID. Загрузчик (lilo, grub) скорее всего об этих массивах ничего не знает.

Ключи dmraid:

Команды dmraid:

Пример борьбы в FC6 с dmraid, посчитавшим подключённый к i845 обычный диск (/dev/hdb (3:64)), частью псевдораида типа pdc (Promise FastTrak), который он передал в ведение device-mapper, но без разбиения на разделы, при этом монтирование файловой системы на /dev/hdb1 невозможно:

# dmsetup table
pdc_jeibbadfd: 0 156250000 linear 3:64 0

удаляю таблицу device-mapper'а (/dev/hdb остаётся занятым)

# dmsetup remove pdc_jeibbadfd

активирую все псевдораид массивы типа pdc

# dmraid -ay -f pdc
ERROR: creating degraded mirror mapping for "pdc_jeibbadfd"
ERROR: dos: partition address past end of RAID device

# ls -1 /dev/mapper/
control
pdc_jeibbadfd
pdc_jeibbadfd1
pdc_jeibbadfd2

# mount /dev/mapper/pdc_jeibbadfd1 точка-монтирования
# df
  ...
/dev/mapper/pdc_jeibbadfd1
                      15116744  11583248   2765596  81% точка-монтирования

Device Mapper Multipath (DM-MP)

Device Mapper Multipath (DM-MP) - пакеты device-mapper-multipath и device-mapper-multipath-libs - создаёт новое блочное устройство с помощью device-mapper поверх 2 или более блочных устройств, представляющих собой разные пути к одному блочному устройству. Умеет работать с различными аппаратными хранилищами (EMC, Compaq/HP, GNBD, HITACHI, SUN; см. multipath.conf.defaults). Устройства, отсутствующие в списке, необходимо описать в /etc/multipath.conf (в RHEL6 выключен по умолчанию). В нормальных условиях device-mapper-multipath может обеспечивать распределение нагрузки между путями, а при падении пути (появлении нового пути) изменять маршрут передачи данных.

Путь есть соединение от порта HBA к порту хранилища данных за одним LUN. Каждый путь выглядит как отдельное блочное устройство. Путь имеет приоритет, который может использоваться для группировки путей или распределения нагрузки (чем больше, тем лучше; например: 50 - оптимальный, 10 - неоптимальный, 1 - резервный, 0 - нерабочий). Путь может быть в одном из следующих состояний (у device-mapper может быть своё мнение: active или failed):

Пути объединяются в группы путей (группа может состоять из одного пути). В каждый момент времени только одна группа может находиться в активном состоянии, т.е. обслуживать ввод/вывод. Заявки внутри активной группы путей обрабатываются по очереди работающими (ready) путями в соответствии с приоритетами путей. Приоритет группы равен сумме приоритетов работоспособных путей из группы. Предполагается, что активной группой должна быть группа с наивысшим приоритетом. Группа путей может быть в одном из следующих состояний:

Многопутёвое устройство создаётся device-mapper (target multipath) и содержит одну или более групп путей. Идентифицируется по WWID или имени (обычно или совпадает с WWID или имеет вид mpathX).

device-mapper-multipath состоит из

Конфигурационный файл /etc/multipath.conf имеет вложенную блочную структуру (блоки выделяются фигурными скобками за именем блока; комментарии начинаются с '#'; значения по умолчанию можно посмотреть в файле multipath.conf.defaults):

Ключи утилиты multipath (в качестве параметра указывается устройство major:minor):

Утилита mpathconf позволяет создать или изменить /etc/multipath.conf.

Демон multipathd имеет ключи:

Сервис multipathd (/etc/sysconfig/multipathd - ключи отсюда не берутся): start, stop, restart, reload (SIGHUP), status.

Рассмотрим решение следующей проблемы - имеются два двухпортовых iSCSI хранилища и несколько серверов, в каждом из которых выделено по два порта для работы SAN, организовано 2 выделенных сети, каждая из которых обслуживает свой набор портов. Необходимо развести их так, чтобы в нормальных условиях трафик к первому хранилищу проходил внутри первой сети, трафик ко второму - внутри второй сети. И только при сбое одной из сетей весь трафик перемещался во вторую. При этом остальные хранилища продолжали работать как раньше.

При использовании LVM рекомендуется включить подлежащие блочные устройства в фильтр в /etc/lvm/lvm.conf.

Программный RAID в ядре 2.6

Позволяет создавать массив из блочных устройств, как физических (в т.ч. разделов и NBD - Network Block Device), так и созданных с помощью device-mapper логических. В том числе, поддерживаются логические блочные устройства созданные подсистемой поддержки псевдоаппаратных RAID контроллеров dmraid. Массив представляется в виде виртуального устройства /dev/mdN или /dev/md/N (N - номер массива).

Поддерживаются RAID уровней: LINEAR (JBOD, позволяет позднее добавить диск), 0 (исходные блочные устройства могут быть разных размеров), 1, 4, 5, 6, 10 (RAID1+0, только ядро 2.6, вариации "near" и "far" (более быстрое чтение и более медленная запись); число требуемых устройств должно быть не менее числа копий - это не просто RAID0 над RAID1!), MULTIPATH (несколько путей доступа к одному устройству), FAULTY (для тестирования; на основе ровно одного блочного устройства без метаданных; возвращает временные или постоянные ошибки при чтении или записи с определённой регулярностью; ошибки чтения могут "исправляться" запись в тот же блок). Реализовано параллельное чтение с нескольких дисков для RAID-1. Каждый тип требует своего модуля ядра (personality): raid0, raid10, raid1, raid4, raid5, raid6, xor. При самостоятельной сборке ядра требуется указать:

Multiple devices driver support (RAID and LVM) (CONFIG_MD) [Y/n/?] y
  RAID support (CONFIG_BLK_DEV_MD) [M/n/y/?] y
    Linear (append) mode (CONFIG_MD_LINEAR) [M/n/y/?] y
    RAID-0 (striping) mode (CONFIG_MD_RAID0) [M/n/y/?] y
    RAID-1 (mirroring) mode (CONFIG_MD_RAID1) [M/n/y/?] y
    RAID-4/RAID-5 mode (CONFIG_MD_RAID5) [M/n/y/?] y
...

Наличие поддержки RAID в ядре можно проверить командой "dmesg | grep ^md":

md: md driver 0.90.2 MAX_MD_DEVS=256, MD_SB_DISKS=27
md: bitmap version 3.38
md: raid1 personality registered as nr 3
md: Autodetecting RAID arrays.
md: autorun ...
md: considering sdb1 ...
md:  adding sdb1 ...
md:  adding sda1 ...
md: created md0
md: bind
md: bind
md: running: 
md: ... autorun DONE.
md: Autodetecting RAID arrays.
md: autorun ...
md: ... autorun DONE.

Для работы в режиме multipath требуется работа демона mdmpd, отслеживающего восстановление работы интерфейса (сбой интерфейса отслеживается ядром). Разработка спонсируется SUSE, со всеми вытекающими последствиями для пользователей RedHat.

Поддерживает 2 формата метаданных (ещё есть более старый вариант без хранения метаданных на диске для linear и raid0 - mdtools): версия 0.90.0 (совместима с raidtools; 4KB где-то в конце раздела - в последних 128 КБ) и версия 1 (начиная с mdadm 1.8.1 и ядра 2.6.10; 1KB в последних 12 KB для версии 1.0, в начале устройства для версии 1.1, со смещением 4KB от начала устройства для версии 1.2). Начиная с версии mdadm 1.7/1.11 (есть в FC4, нет в CentOS 4.3) позволяет добавлять диск в линейный массив, поддержка raid0 и линейных массивов размером более 2 ТБ. Версия метаданных 1 позволяет иметь более 28 дисков на массив, RAID1 более 2 ТБ (до 7 ТБ в версии 2.3). Автоопределение наличия массива по метаданным бывает довольно навязчивым - иногда приходится затирать их после разборки массива. Среди метаданных хранятся: тип массива, UUID (Universally Unique Identifier, 128 бит) массива. Создание массива есть запись метаданных (superblock) на все элементы массива утилитой mdadm. Сборка (assemble) есть привязка всех элементов к виртуальному устройству, в начале массив инициализируется (SET_ARRAY_INFO, указывается версия и подверсия метаданных), затем к нему добавляются все устройства (ADD_NEW_DISK), после этого массив запускается (RUN_ARRAY) и его можно использовать. Новые устройства можно добавлять к массиву (HOT_ADD_DISK), а старые удалять из массива (HOT_REMOVE_DISK) и после запуска. Возможные состояния массива:

Описание устройства в /sys/block/mdN. В версии ядра 2.6.18 имеется подкаталог md с описанием параметров массива:

Для каждого компонента массива имеется подкаталог /sys/block/mdN/md/dev-XXX (например, /sys/block/md0/md/dev-hdb1), содержащий файлы block (ссылка на запись в /sys/block/...), super (метаданные), state (состояние устройства: faulty - устройств выведено из активного использования, in_sync - всё хорошо, writemostly - это устройство будет использоваться для чтения в самом крайнем случае (WRITE-BEHIND, только для RAID-1 и ядра 2.6.14), spare; сюда можно писать для перевода устройства в другое состояние: faulty, remove, writemostly, -writemostly), errors (число ошибок чтения, которые не вызвали отключение устройства: были скорректированы или массив был в режиме "только чтение"), slot (номер диски в массиве; "none" для резервного или сбойного устройства), offset (номер первого сектора с данными на устройстве), size (размер области данных). Для каждого активного компонента массива имеется подкаталог /sys/block/mdN/md/rdNN (где NN - позиция в массиве, slot). которые являются ссылками на соответствующие каталоги /sys/block/mdN/md/dev-XXX.

При аварийном отключении питания массив может оказаться в состоянии несовместимости: например, запись на один диск в RAID-1 успела завершиться, а на второй - нет. Для отслеживания этой ситуации драйвер помечает диск массива как "грязный" (dirty) перед записью и как "чистый" (clean) при нормальном завершении работы или после некоторого периода бездействия. Если при загрузке массив "грязный", то он восстанавливается в фоновом режиме (первый диск RAID-1 копируется на все остальные; сравниваются и пересчитываются все контрольные суммы в RAID-4, -5 и -6). Скорость восстановления ограничивается системными переменными /proc/sys/dev/raid/speed_limit_min (в КБ/сек на устройство) и /proc/sys/dev/raid/speed_limit_max. Если при этом RAID-5 деградировал (не работает один диск) и сравнение контрольных сумм невозможно, то начиная с версии ядра 2.5 требуется ручное вмешательство (оператор должен подтвердить готовность рисковать ключом --force или параметром загрузки). Начиная с ядра 2.6.13 (только RAID-1) модуль md позволяет вести битовую карту секторов (рядом с метаданными или в отдельном файле на другом устройстве), которые могут потребовать синхронизации, что очень сильно ускоряет как синхронизацию, так и восстановление массива при использовании того же физического диска. Рекомендуется использовать файловую систему ext2 или ext3.

При обнаружении любой (!) ошибки устройства при работе с RAID-1, RAID-4, RAID-5, RAID-6 и RAID-10 драйвер отключает устройство (помечает его как сбойное - faulty) и продолжает работу на оставшихся. Если есть запасное (spare) устройство, то оно вводится в эксплуатацию.

Параметры ядра:

Созданный массив можно форматировать и монтировать как обычный раздел. Состояние массива можно посмотреть в файле /proc/mdstat, который для каждого массива показывает его имя (md0), состояние (active), тип (raid1), составляющие массив разделы и их порядок в массиве, объём массива и состояние разделов ("U" - нормально, "_" - сбой). Пример вывода /proc/mdstat (номер в скобках после имени диска - номер в массиве; первое число в скобках после числа блоков - общее число дисков, второе - чмсло активных дисков):

Personalities : [raid1]
md1 : active raid1 sdb2[1] sda2[0]
      4739072 blocks [2/2] [UU]

md0 : active raid1 sdb1[1] sda1[0]
      151549056 blocks [2/2] [UU]

unused devices: 

Все действия с массивами производятся утилитой mdadm, имеющей следующий синтаксис:

mdadm [режим] устройство-массива [опции] компонент-массива ...

Общие опции:

Режимы:

Простейшие задачи:

Имена событий мониторинга:

Формат конфигурационного файла (по умолчанию: /etc/mdadm.conf):

Утилита mdassemble предназначена для включения в initrd для замены автоматического построения массивов при загрузке ядра. Действует как "mdadm --assemble --scan". Список устройств для проверки берётся из /etc/mdadm.conf.

Чтобы создать программное RAID устройство при установке RHEL (Fedora Core, CentOS) необходимо предварительно создать требуемое число разделов типа "software RAID" (Linux RAID auto), затем объединить их в RAID. При этом необходимо задать уровень RAID, имя устройства, тип файловой системы и точку монтирования. При использовании kickstart создание RAID устройства записывается так:

part raid.01 --size=113000 --ondisk=sda
part raid.02 --size=113000 --ondisk=sdb
raid / --fstype=ext3 --level=RAID1 --device=md0 raid.01 raid.02

Каталог /boot может находиться только на RAID-1 или обычном разделе. Если корневая система находится на RAID, то при загрузке необходимо иметь initrd, загружающий необходимые модули, и обеспечить возможность автоматической сборки массива. При использовании grub необходимо вручную (CentOS 4) записать загрузчик на второй диск:

/sbin/grub --no-floppy --batch << EOF
device (hd0) /dev/sdb
root (hd0,0)
setup (hd0)
quit
EOF

При первой загрузке необходимо обеспечить мониторинг массивов:

Оставшийся в живых раздел из состава RAID-1 с метаданными 0.90 превращается в одиночный раздел сменой типа раздела и перезагрузкой. После этого необходимо поправить /etc/fstab и /boot/grub/grub.conf.

Пример RAID6 из 12 дисков ST31000340NS через FC 4Gb (SL-61, Intel SR2625URLX)

битовая карта ускоряет синхронизацию, но тормозит запись, поэтому выносим её в файл

mdadm --create /dev/md/raid6of12 --verbose --raid-devices=12 --level=raid6 \
      --layout=left-symmetric --bitmap=/root/raid6of12.bitmap --bitmap-chunk=64M \
      --name=raid6of12 /dev/sd{a,b,c,d,e,f,g,h,i,j,k,l}

mdadm: chunk size defaults to 512K
mdadm: size set to 975768064K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md/raid6of12 started.

mdadm --detail /dev/md/raid6of12 --verbose

/dev/md/raid6of12:
        Version : 1.2
  Creation Time : Sun Aug 21 17:07:49 2011
     Raid Level : raid6
     Array Size : 9757680640 (9305.65 GiB 9991.86 GB)
  Used Dev Size : 975768064 (930.56 GiB 999.19 GB)
   Raid Devices : 12
  Total Devices : 12
    Persistence : Superblock is persistent

  Intent Bitmap : /root/raid6of12.bitmap

    Update Time : Sun Aug 21 17:10:37 2011
          State : clean, resyncing
 Active Devices : 12
Working Devices : 12
 Failed Devices : 0
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 512K

 Rebuild Status : 0% complete

           Name : имя-хоста:raid6of12  (local to host имя-хоста)
           UUID : 6292d2da:7c630816:2775a81d:1cdcc4e4
         Events : 33

    Number   Major   Minor   RaidDevice State
       0       8        0        0      active sync   /dev/sda
       1       8       16        1      active sync   /dev/sdb
       2       8       32        2      active sync   /dev/sdc
       3       8       48        3      active sync   /dev/sdd
       4       8       64        4      active sync   /dev/sde
       5       8       80        5      active sync   /dev/sdf
       6       8       96        6      active sync   /dev/sdg
       7       8      112        7      active sync   /dev/sdh
       8       8      128        8      active sync   /dev/sdi
       9       8      144        9      active sync   /dev/sdj
      10       8      160       10      active sync   /dev/sdk
      11       8      176       11      active sync   /dev/sdl

echo 8192 > /sys/block/md127/md/stripe_cache_size # значительное ускорение записи
echo 512 > /sys/block/sd{a,b,c,d,e,f,g,h,i,j,k,l}/bdi/read_ahead_kb

mkfs.ext4 -t ext4 -v -j -m 0 -N 50000000 -b 4096 -E stride=128,stripe-width=1280,resize=4294967295 /dev/md/raid6of12

mount -o acl,nodiratime,data=writeback,journal_checksum,journal_async_commit,stripe=1280,delalloc /dev/md/raid6of12 /mnt

bonnie++ 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
            100000M           334975  22 170494  14           380976  12 511.4   1 # при инициализации
            100000M           347474  22 185827  15           405044  13 545.7   1

восстановление файлов (share3h/s196: 4TB, 6.7 миллиона файлов, 10GB buffers) - 115 МБ/сек
чтение восстановленных файлов ("tar -C /mnt -cf - .|dd ibs=1024k of=/dev/null") - 107 МБ/сек
   монтирование с relatime даёт выигрыш в 3-5%
   уменьшение read_ahead_kb не помогает
   для сравнения - на MSA P2000 (3x8 2TB) "tar -cf -|dd" выдаёт 118 MB/s (при нагрузке и более фрагментированной системе)
чтение восстановленных файлов ("tar -C /mnt -cf - .|gzip -1" - не поднимается выше 35 МБ/сек
чтение восстановленных файлов ("tar -C /mnt -cf - .|lzop" - до 84МБ/сек на выходе, среднее на входе до 135 МБ/сек
чтение восстановленных файлов ("tar -C /mnt -cf - .|lzop -1" - не ускоряется
копирование восстановленных файлов (tar -c|dd|tar -x) - 57.9 MB/s
чтение восстановленных и скопированных файлов в 2 потока - около 200 МБ/сек (скопированная часть быстрее)

восстановление файлов в 2 потока во время инициализации (первый ТБ) - 138 МБ/сек
восстановление файлов в 3 потока (первый ТБ) - 273 МБ/сек
чтение файлов (tar) во время инициализации (первые 600GB) - 250 МБ/сек
чтение файлов (tar) в 2 потока - 347 МБ/сек

mkfs.xfs -L raid6of12xfs -d su=512k,sw=10 -l su=512k,lazy-count=1 -i attr=2 /dev/md/raid6of12
!log stripe unit (524288 bytes) is too large (maximum is 256KiB)
!log stripe unit adjusted to 32KiB
meta-data=/dev/md/raid6of12      isize=256    agcount=32, agsize=76231936 blks
         =                       sectsz=512   attr=2
data     =                       bsize=4096   blocks=2439420160, imaxpct=5
         =                       sunit=128    swidth=1280 blks
naming   =version 2              bsize=4096   ascii-ci=0
log      =internal log           bsize=4096   blocks=521728, version=2
         =                       sectsz=512   sunit=8 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
mount -o nodiratime,attr2,logbufs=8,logbsize=65536 /dev/md/raid6of12 /mnt

восстановление в 3 потока (первый ТБ) - 105 МБ/сек во время синхронизации

==============================================================================
mdadm --create /dev/md/raid6of12 --verbose --raid-devices=12 --level=raid6 \
      --layout=left-symmetric --name=raid6of12 /dev/sd{a,b,c,d,e,f,g,h,i,j,k,l}

echo 8192 > /sys/block/md127/md/stripe_cache_size # значительное ускорение записи
echo 512 > /sys/block/sd{a,b,c,d,e,f,g,h,i,j,k,l}/bdi/read_ahead_kb
echo 0 > /proc/sys/vm/vfs_cache_pressure

mkfs.ext4 -t ext4 -v -j -m 0 -N 50000000 -b 4096 -E stride=128,stripe-width=1280,resize=4294967295 /dev/md/raid6of12

mount -o acl,nodiratime,relatime,data=writeback,journal_checksum,journal_async_commit,stripe=1280,delalloc \
         /dev/md/raid6of12 /mnt

восстановление файлов в 2 потока (9.4 миллиона файлов, 6.5TB) - 166 МБ/сек 

mkfs.btrfs --data single --metadata single --label raid6of12btrfs /dev/md/raid6of12
mount -o compress-force=lzo,space_cache /dev/md127 /mnt

восстановление файлов в 4 потока (17 миллионов файлов, 12 ТБ, сжатие 2.26) - 1ТБ/час
================ уменьшим размер chunk ===============================
mdadm --create /dev/md/raid6of12 --verbose --raid-devices=12 --level=raid6 \
      --chunk 64 --layout=left-symmetric --bitmap=/root/raid6of12.bitmap --bitmap-chunk=64M \
      --name=raid6of12 /dev/sd{a,b,c,d,e,f,g,h,i,j,k,l}

# можно и больше
echo 8192 > /sys/block/md127/md/stripe_cache_size # значительное ускорение записи
echo 128 > /sys/block/sd{a,b,c,d,e,f,g,h,i,j,k,l}/bdi/read_ahead_kb

mkfs.ext4 -t ext4 -v -j -m 0 -N 50000000 -b 4096 -E stride=16,stripe-width=160,resize=4294967295 /dev/md/raid6of12

mount -o acl,nodiratime,data=writeback,journal_checksum,journal_async_commit,stripe=160,delalloc /dev/md/raid6of12 /mnt

# blockdev --getra  /dev/md/raid6of12 
# 2560
# для ускорения последовательного чтения
# blockdev --setra 65536 /dev/md/raid6of12

bonnie++ 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
            100000M           333621  21 153453  14           380315  16 376.3   1 # при инициализации
            100000M           348146  22 164416  15           403097  17 532.4   1
            100000M           228221  14 104535  10           226738  11 465.8   1 # без одного диска
            100000M           327255  21 149824  14           374160  15 563.9   1 # ошибки чтения
            100000M           329783  21 165805  15           403849  16 537.9   1
   
восстановление файлов в 3 потока во время инициализации (1.2TB) - 226MB/s
копирование на себя в 1 поток (tar) во время инициализации - 155MB/s
чтение (tar) в 2 потока (без одного диска) - 198 МБ/сек (с дисков читается в 1.8 раз больше, 
    что временами заполняет канал 4Gb)

восстановление файлов (share3h/s196: 4TB, 6.7 миллиона файлов) во время синхронизации - 107 МБ/сек
чтение восстановленных файлов ("tar -C /mnt -cf - .|dd ibs=1024k of=/dev/null") - 78 МБ/сек
чтение восстановленных файлов (nodiratime,relatime и 0 в /proc/sys/vm/vfs_cache_pressure) - 126 МБ/сек
копирование восстановленных файлов (tar -c|dd|tar -x) - 50 MB/s
чтение восстановленных и скопированных файлов в 2 потока - около 200 МБ/сек (копия быстрее)

mkfs.xfs -L raid6of12xfs -d su=64k,sw=10 -l su=64k,lazy-count=1 -i attr=2 /dev/md127
meta-data=/dev/md127             isize=256    agcount=32, agsize=76231904 blks
         =                       sectsz=512   attr=2
data     =                       bsize=4096   blocks=2439420480, imaxpct=5
         =                       sunit=16     swidth=160 blks
naming   =version 2              bsize=4096   ascii-ci=0
log      =internal log           bsize=4096   blocks=521728, version=2
         =                       sectsz=512   sunit=16 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

mount -o nodiratime,attr2,logbufs=8,logbsize=65536 /dev/md127 /mnt

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
            100000M           153932  10 138125  12           405227  17 307.7   0


восстановление в 3 потока (первый ТБ) - 105 МБ/сек во время синхронизации

mkfs.xfs -L raid6of12xfs -d su=64k,sw=10 -l logdev=/dev/system/log,size=521728b,lazy-count=1 -i attr=2 /dev/md127 
mount -o nodiratime,attr2,logbufs=8,logbsize=65536,largeio,swalloc,logdev=/dev/system/log /dev/md127 /mnt

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
            100000M           150237   8 134958  12           390698  16 307.0   0

восстановление не ускорилось

mkfs.btrfs --data single --metadata single --label raid6of12btrfs /dev/md127
mount -o compress=lzo,space_cache /dev/md127 /mnt

восстановление файлов в 3 потока во время инициализации (1.2TB) - 238 MB/s
восстановление файлов в 3 потока (1.8TB) - 245 MB/s

LVM 2 (Logical Volume Management) в ядре 2.6

LVM (Logical Volume Management) позволяет рассматривать разделы дисков как элементарные строительные блоки, которые можно объединять в общий пул пространства хранения, из которого можно нарезать логические диски требуемого размера. LVM позволяет образовать логический диск большого размера, динамически изменить размер логического диска (требуется поддержка драйвера используемой файловой системы), "плавно" переместить данные с физического диска на другое место. Доступны такие функции как мгновенное снятие "фотографии" текущего состояния (snapshot, снимок) логического диска и откат на одно из сделанных ранее состояний (требуется поддержка драйвера файловой системы и достаточно свободного места, снимки можно даже изменять и увеличивать в размере).

Пакет lvm2 (ядро 2.6) обеспечивает поддержку LVM (Logical Volume Management) с использованием других механизмов (device-mapper) и форматов данных в сравнении с пакетом lvm (ядро 2.4). Формат метаданных также отличается. В статье описывается только lvm2.

При самостоятельной сборке ядра требуется указать:

Multiple devices driver support (RAID and LVM) (CONFIG_MD) [Y/n/?] y
Logical volume manager (LVM) support (CONFIG_BLK_DEV_LVM) y

Вводится следующая иерархия понятий:

Стратегии отображения логических экстентов на физические:

FC и RHEL по умолчанию ставятся на LVM (одна группа с именем VolGroup00, простирающаяся на всё доступное пространство, кроме раздела /boot; из неё делается 2 логических тома LogVol00 для корневой файловой системы и LogVol01 для раздела подкачки), однако старые загрузчики и утилиты восстановления не умеют с ним работать! То есть, если вас угораздило поставить корневую систему (/) на LVM, то придётся поставить систему на новый диск и уже загрузившись с неё разбираться с проблемами на "упавшей" системе (в CentOS 4.4 rescue научился монтировать файловые системы на LVM). При размещении корневого раздела на LVM необходимо позаботиться о "правильном" initrd (комплектные initrd в RHEL и FC включают необходимые компоненты - см. mkinitrd и rc.sysinit:

lvm.static:   2 logical volume(s) in volume group VolGroup00 now active
rc.sysinit: Setting up Logical Volume Management: succeeded

Если вы всё же хотите использовать LVM, но вас не устраивает стандартное разбиение, то можно создать необходимые группы и тома при установке с помощью DiskDruid:

Утилита /sbin/lvm (/sbin/lvm.static) может выполнить любую из нижеупомянутых функций. Имя функции указывается в качестве первого параметра (дополнительные функции - dumpconfig, formats, segtypes). Без параметров утилита переходит в интерактивный режим (используются возможности readline). Возможно чтение команд из файла. Общие ключи:

Переменные окружения:

Работа с физическими томами:

Работа с группами логических томов:

Работа с логическими томами:

Перед началом работы lvm или любая другая утилита читает настроечный файл (/etc/lvm/lvm.conf). Строки, начинающиеся с '#' являются комментариями. Файл состоит из секций и присвоений значения переменной. Секция состоит из имени секции, за которой идёт символ '{', затем последовательность секций и присвоений, затем символ '}'. Присвоение записывается как (значения могут быть строками в кавычках, целыми числами и числами с плавающей точкой, последовательностями значений через запятую в квадратных скобках):

имя-переменной = значение

Секции:

clvmd - начало работ над кластерной версией LVM.

При добавлении нового диска в аппаратный RAID необходимо (вместо добавления нового раздела можно изменить размер старого и использовать pvresize):

Увеличение размеров файловой системы, собранной на LVM поверх 3 логических томов MSA P2000 (без multipath), без остановки работы:

Вывод физического тома из эксплуатации:

Уменьшение размера аппаратного RAID массива:

Создание логического тома с параллельным доступом на 2 диска:

Замена дефективного неиспользуемого физического тома:

Увеличение файловой системы (HP StorageWorks MSA 2012i, Linux-ISCSI, multipath):

Преобразование корневой файловой системы "на ходу" (пример написан для LVM1 и LILO - надо переделать).

Оценка потерь скорости работы файловой системы при использовании снимков (при двух снимках дождаться создания файла 20 ГБ нелегко, а прервать невозможно):

RAID-5 5x73G  Write Back, Adaptive Read Ahead, Cached I/O, hd cache - off

до создания снимка:
bonnie++ 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
              3000M 40353  93 51799  22 22260   5 34104  69 43591   4 604.1   1

после в первый раз:
bonnie++ 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
              5000M  3989   9 57410  24 19673   5 31566  66 39586   5 591.0   1

после во второй раз:
bonnie++ 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
              5000M 39256  92 10802   4 19742   5 31542  66 37922   5 564.1   1

сам snapshot первый раз:
bonnie++ 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
              5000M  5634  12 56405  24 19562   5 31377  66 38057   5 619.5   1

сам snapshot второй раз:
bonnie++ 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
              5000M 40869  95 60142  26 19196   5 31161  65 38130   5 634.4   1

flashcache

flashcache (1.0-139) - прозрачное кеширование медленных блочных устройств на быстрых блочных устройствах (не рекомендуется использовать loopback). Разработчики - Facebook. Образует из медленного и быстрого устройств виртуальное устройство (управляется dmsetup). Режимы кеширования:

Политика вытеснения - FIFO или LRU (настраивается динамически). Имеется защита от вымывания потоками последовательных запросов (настраивается динамически). На каждый блок расходуется 24 байта ОП и 16 байт метаданных на быстром устройстве. При разработке эффективность была принесена в жертву отсутствию ошибок и скорости реализации.

Для сборки потребуются исходные тексты ядра. Имеется возможность использования dkms (в CentOS 6.2 не получилось). Сборка модуля ядра: "make -f Makefile". Установка модуля ядра (extra/flashcache/flashcache.ko) и утилит (в /sbin) и /usr/lib/ocf/resource.d/flashcache/flashcache (что это?): "make install".

Статистику можно посмотреть в /proc/flashcache/имя/flashcache_stats и /proc/flashcache/имя/flashcache_errors. Утилиты:

Имеются ручки управления в /proc/sys/dev/flashcache/краткое-имя-быстрого-устройства+краткое-имя-медленного-устройства/:

LVM Cache

Метод отображения device-mapper cache в сочетании с надстройкой LVM Cache позволяет обеспечить прозрачное кеширование медленных блочных устройств (HDD) на быстрых блочных устройствах (SSD). Red Hat считает LVM Cache зрелым с RHEL 7.1 (на ней и проверял). В процессе сборки участвуют кешируемое (основное, медленное, большое) устройство, кеширующее (быстрое, маленькое) устройство, устройство для метаданных (очень быстрое, очень маленькое), резервное устройство для метаданных. Устройство для метаданных содержит информацию какие части (chunk) находятся в кеше, какие части необходимо синхронизовать, подсказку (статистику) для политики выбора частей для помещения в кеш. Сборку и разборку кеша можно производить не останавливая работы. Размер части задаётся (в секторах, 512?) от 32KB (разбазариваем место в памяти и метаданных) до 1GB (разбазариваем место на кеширующем устройстве), кратно 32KB, по умолчанию - 64КБ. Исходное и результирующее устройства принадлежат одной группе томов. Результирующее устройство нельзя использовать в качестве блоков для построения дальнейшей иерархии, исходное устройство может быть только типа linear, sripe и raid. При описании работы кеша используются термины:

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

Имеется возможность ограничить объём миграции с помощью сообщения "migration_threshold число-секторов", по умолчанию заявлено 204800 (100 МиБ), в реальности 2048 (1 МиБ) и при установке 204800 миграция мешает работе.

Метаданные обновляются на устройстве ежесекундно или по команде FLUSH или FUA. При аварийном завершении содержимое кеширующего устройства и подсказки политики предполагаются устаревшими.

До RHEL 7.2 реализована только одна политика миграции - mq (multiqueue). В качестве подсказки хранится количество попаданий для каждого блока. Используется 16 очередей на вхождение в кеш, 16 очередей для "чистых" (кеш и фоновое устройство содержат одинаковые данные) элементов в кеше, 16 очередей для "грязных" (данные в кеше новее данных в фоновом устройстве), элементы в очереди "стареют" в логическом времени (?), выбор очереди при вставке производится на основе счётчика попаданий. Смена политики и настройка параметров производится командой:

lvchange --cachepolicy mq --cachesettings 'migration_threshold=2048 random_threshold=4' имя-группы/имя-тома
 или напрямую
dmsetup message имя_группы-имя_тома 0 sequential_threshold 1024
  или при создании пула
lvconvert --type cache-pool --cachemode writeback --poolmetadataspare n --cachesettings migration_threshold=204800 --poolmetadata x145data/metacache x145data/datacache

В RHEL 7.2 добавлена политика smq (включена по умолчанию при создании новых устройств), обеспечивающая меньшее потребление памяти и в большинстве случаев большую производительность.

Текущую политику, значение параметров и общую статистику можно узнать с помощью команды "dmsetup -v status имя_группы-имя_тома" (все размеры в секторах (512?)):

0 250014056448 # смещение и количество секторов
cache # метод (target) device mapper
8 # размер блока метаданных
72462/264192 # использованных блоков метаданных / всего блоков метаданных
128 # размер блока данных кеша
24386048/24386048 # использованных блоков данных / всего блоков данных
3187063490 # попаданий чтения
376069303 # промахов чтения
433132943 # попаданий записи
2277521799 # промахов записи
0 # миграций на медленное устройство
0 # миграций на быстрое устройство
0 # "грязных" блоков в кеше
1 # количество опций
writethrough
2 # количество базовых параметров
migration_threshold 2048 # перемещение логического блока с одного устройства на другое, в секторах
mq 10 # политика и число аргументов
random_threshold 4 # при получении указанного количества непоследовательных запросов поток воспринимается как непоследовательный
sequential_threshold 512 # при достижении указанного количества посл.запросов поток воспринимается как последовательный (идёт в обход кеша)
discard_promote_adjustment 1 # перемещение с медленного устройства на быстрое
read_promote_adjustment 4 # если при чтении счётчик блока превышает порог, то блок заносится в кеш
write_promote_adjustment 8 # если при записи счётчик блока превышает порог, то блок заносится в кеш

Политика cleaner используется для синхронизации кешируемого и кеширующего устройств. попытка использования завершилась аварийно - Segmentation fault (core dumped).

Объявление интервала блоков в кеше "неправильными" (только в режиме passthrough):

dmsetup message имя_группы-имя_тома 0 invalidate_cblocks начало-конец

Часть общей статистики в "культурном" виде можно посмотреть командой "lvs -o имя-колонки":

Утилиты:

Пример создания:

  1. регистрация физических томов
    pvcreate /dev/sda # 24 диска SATA 2TB в RAID-6
    pvcreate /dev/sdb # 4 SSD SATA 800GB в RAID-0 (762559 PE)
    
  2. создание группы томов
    vgcreate x136all36 /dev/sda /dev/sdb
    
  3. создание кешируемого тома данных
    lvcreate -n data -l +100%FREE x136all36 /dev/sda
    
  4. создание тома метаданных, при расчёте размера предлагают использовать формулу 4MB+16*число-блоков-данных-кеша, однако получаем сообщение "WARNING: Minimum required pool metadata size is 2.00 GiB", хотя уровень использования не превышает 18.29%
    lvcreate -n metacache -l 513 x136all36 /dev/sdb # уровень использования не превышает 18.29%
    #lvcreate -n metacache -l 258 --stripes 2 x136all36 /dev/sdb /dev/sde # 2 отдельных SSD
    
  5. создание кеширующего тома данных, размер кеша данных не должен превышать 100%-2*размер_metacache
    lvcreate -n datacache -l 761533 x136all36 /dev/sdb
    #lvcreate -n datacache -l 381032 --stripes 2 x136all36 /dev/sdb /dev/sde # 2x800GB
    
  6. создание пула из томов кеширующих данных и метаданных
    # увеличить в /etc/lvm/lvm.conf в секции allocation переменную cache_pool_max_chunks до 25000000
    
    lvconvert --type cache-pool [--cachemetadataformat 1] [--cachemode writeback] [-poolmetadataspare n] \
      [--cachesettings migration_threshold=204800] [--chunksize размер-куска] \
      --poolmetadata x136all36/metacache x136all36/datacache
    
  7. сборка кеша из исходного тома данных и пула (исходный том данных переименовывается)
    lvconvert --type cache [--cachemetadataformat 1] --cachepool x136all36/datacache x136all36/data
    
    device-mapper: cache: You have created a cache device with a lot of individual cache blocks (48706240)
    All these mappings can consume a lot of kernel memory, and take some time to read/write.
    Please consider increasing the cache block size to reduce the overall cache block count.
    
  8. проверяем
    lvs -a
    
      data              x136all36 Cwi aoC    40.01t [datacache] [data_corig] 2.22   18.52           0.00            
      [data_corig]      x136all36 owi aoC    40.01t                                                                 
      [datacache]       x136all36 Cwi   C     2.90t                          2.22   18.52           0.00            
      [datacache_cdata] x136all36 Cwi ao      2.90t                                                                 
      [datacache_cmeta] x136all36 ewi ao      2.98g                                                                 
      [lvol0_pmspare]   x136all36 ewi         2.98g 
    

Разборка:

  1. отделение тома данных от пула кеширования
    lvconvert --splitcache x136all36/data
    
    lvs -a
      data              x136all36  wi a      40.01t                                                    
      datacache         x136all36 Cwi   C     2.90t                                                    
      [datacache_cdata] x136all36 Cwi         2.90t                                                    
      [datacache_cmeta] x136all36 ewi         2.98g                                                    
      [lvol0_pmspare]   x136all36 ewi         2.98g
    
  2. разборка пула
    lvremove x136all36/datacache
    
    lvs -a
      data x136all36 -wi-a      40.01t
    

Пример 1: ext4, 120 ТБ, 335 миллионов файлов, 2xRAID-6 из 18 дисков 4ТБ на LSI RAID, кеш из 2 SATA SSD дисков Intel DC 3500 SSDSC2BB800G4, AHCI или mpt2sas:

Пример 2: btrfs 40 TB с 400 GB метаданных

Пример 3: xfs, 40 ТБ, 110 миллионов файлов

Проблема в RHEL 7.1 (в RHEL 7.2 починили) с ext4 на ahci и mpt2sas (xfs и btrfs без проблем) при параллельном (40 потоков) find (без последствий), всё замирает и

kernel:BUG: soft lockup - CPU#7 stuck for 22s!
   _raw_spin_lock+0x37/0x50
May  6 18:51:35 x132 kernel: Call Trace:
May  6 18:51:35 x132 kernel: [] ext4_es_lru_add+0x57/0x90 [ext4]
May  6 18:51:35 x132 kernel: [] ext4_ext_map_blocks+0x248/0x1220 [ext4]
May  6 18:51:35 x132 kernel: [] ? ext4_xattr_get+0x7d/0x290 [ext4]
May  6 18:51:35 x132 kernel: [] ? unlock_new_inode+0x50/0x70
May  6 18:51:35 x132 kernel: [] ext4_map_blocks+0x215/0x560 [ext4]
May  6 18:51:35 x132 kernel: [] ? in_group_p+0x31/0x40
May  6 18:51:35 x132 kernel: [] ? generic_permission+0x15e/0x240
May  6 18:51:35 x132 kernel: [] ext4_getblk+0x65/0x200 [ext4]
May  6 18:51:35 x132 kernel: [] ext4_bread+0x27/0xc0 [ext4]
May  6 18:51:35 x132 kernel: [] ? lookup_fast+0x53/0x2e0
May  6 18:51:35 x132 kernel: [] __ext4_read_dirblock+0x4a/0x400 [ext4]
May  6 18:51:35 x132 kernel: [] ? complete_walk+0x60/0xe0
May  6 18:51:35 x132 kernel: [] htree_dirblock_to_tree+0x40/0x190 [ext4]
May  6 18:51:35 x132 kernel: [] ? kmem_cache_alloc+0x35/0x1d0
May  6 18:51:35 x132 kernel: [] ext4_htree_fill_tree+0xa9/0x2a0 [ext4]
May  6 18:51:35 x132 kernel: [] ? user_path_at_empty+0x72/0xc0
May  6 18:51:35 x132 kernel: [] ? kmem_cache_alloc_trace+0x1ce/0x1f0
May  6 18:51:35 x132 kernel: [] ext4_readdir+0x5df/0x7f0 [ext4]
May  6 18:51:35 x132 kernel: [] ? fillonedir+0xe0/0xe0
May  6 18:51:35 x132 kernel: [] ? fillonedir+0xe0/0xe0
May  6 18:51:35 x132 kernel: [] ? fillonedir+0xe0/0xe0
May  6 18:51:35 x132 kernel: [] vfs_readdir+0xb0/0xe0
May  6 18:51:35 x132 kernel: [] SyS_getdents+0x95/0x120
May  6 18:51:35 x132 kernel: [] system_call_fastpath+0x16/0x1b

Подвешивает LSI MegaRAID 9266-8i (MR 5.13, 23.33.0-0018) при смешивании HDD и SDD на одном контроллере и активной работе в XFS, контроллер перезапускается через 5 минут по watchdog. Без последствий. Первый раз очень испугался и нажал Reset - запустилась синхронизация от SSD к HDD!.

btrfs включает адаптацию к SSD (надо монтировать с nossd).

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

ls /time_machine/old/20141026/share4x
ls: cannot access /time_machine/old/20141026/share4x: Stale file handle

lsblk
NAME                   MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sdc                      8:32   0    40T  0 disk
└─x136all36-data_corig 253:4    0    40T  0 lvm
  └─x136all36-data     253:5    0    40T  0 lvm   /time_machine

lvs -a
  WARNING: Device for PV SJhzBV-RkXR-SqoL-YPsl-7Rit-I9A8-3D38st not found or rejected by a filter.
  WARNING: Device for PV psgtnr-DXbi-IAKL-QMAY-FmKO-pug8-CKD0ag not found or rejected by a filter.
  WARNING: Device for PV SJhzBV-RkXR-SqoL-YPsl-7Rit-I9A8-3D38st not found or rejected by a filter.
  WARNING: Device for PV psgtnr-DXbi-IAKL-QMAY-FmKO-pug8-CKD0ag not found or rejected by a filter.
  LV                VG        Attr       LSize  Pool        Origin       Data%  Meta%  Move Log Cpy%Sync Convert
  data              x136all36 Cwi-aoC-p- 40.01t [datacache] [data_corig] 36.62  18.29           0.00
  [data_corig]      x136all36 owi-aoC--- 40.01t
  [datacache]       x136all36 Cwi---C-p-  1.45t                          36.62  18.29           0.00
  [datacache_cdata] x136all36 Cwi-ao--p-  1.45t
  [datacache_cmeta] x136all36 ewi-ao--p-  1.01g
  [lvol0_pmspare]   x136all36 ewi-----p-  1.01g

lvconvert --splitcache x136all36/data
  WARNING: Device for PV SJhzBV-RkXR-SqoL-YPsl-7Rit-I9A8-3D38st not found or rejected by a filter.
  WARNING: Device for PV psgtnr-DXbi-IAKL-QMAY-FmKO-pug8-CKD0ag not found or rejected by a filter.
  Cannot change VG x136all36 while PVs are missing.
  Consider vgreduce --removemissing.

umount /time_machine 

vgreduce --removemissing --force x136all36
  WARNING: Device for PV SJhzBV-RkXR-SqoL-YPsl-7Rit-I9A8-3D38st not found or rejected by a filter.
  WARNING: Device for PV psgtnr-DXbi-IAKL-QMAY-FmKO-pug8-CKD0ag not found or rejected by a filter.
  WARNING: Device for PV SJhzBV-RkXR-SqoL-YPsl-7Rit-I9A8-3D38st not found or rejected by a filter.
  WARNING: Device for PV psgtnr-DXbi-IAKL-QMAY-FmKO-pug8-CKD0ag not found or rejected by a filter.
  Removing partial LV data.
  Logical volume "datacache" successfully removed
  Logical volume "data" successfully removed
  Wrote out consistent volume group x136all36

lvcreate -n data -l +100%FREE x136all36
WARNING: btrfs signature detected on /dev/x136all36/data at offset 65600. Wipe it? [y/n]: n
  Aborted wiping of btrfs.
  1 existing signature left on the device.
  Logical volume "data" created.

mount /time_machine

btrfs scrub start /time_machine

Попытка изменить параметры на ходу в CentOS 7.2 ("lvchange --cachesettings migration_threshold=204800 x145data/share") привела к перезагрузке ("Kernel panic - not syncing: Watchdog detected hard LOCKUP on cpu 6; CPU: 6 PID: 3438 Comm: lvchange").

Samsung SSD 840 PRO в нашей обстановке не подходит категорически под кеш - при попытке восстановления на составное устройство из 2x18 SATA дисков и 2 SSD запись тормозит при 100% загрузке обоих SSD.

При замене на ходу SSD Samsung 840 PRO на Intel DC S3500 появились дефекты в файловой системе (стандартная ext4 + lvmcache), возможно, что дефект появился ещё до замены, fsck исправил, но осадок остался:

kernel: EXT4-fs error (device dm-2): __ext4_read_dirblock:902: inode #679504401: block 14: comm ls: Directory hole found

fsck.ext4 -v -C 0 /dev/x136all36/share
...
Pass 2: Checking directory structure
Problem in HTREE directory inode 679504401 (/share4s/temp/file_system_stress_test): bad block number 14.

Free blocks count wrong for group #191448 (0, counted=32768).
... около 5 тысяч

При создании ext4 с немедленной инициализацией ("-E lazy_itable_init=0") таблицы inode не попадают в кеш (а может так и надо?), отложенную инициализацию невозможно прервать (и расмонтировать), но все таблицы попадают в кеш (много времени и места).

Статистика

Для выбора правильной архитектуры системы хранения данных необходимо обладать статистической информацией о характеристиках данных и шаблонах их использования.

Общий объём данных и количество файлов в основном хранилище - 34.5 ТБ, 72 миллиона файлов.

19% файлов являются каталогами.

Распределение количества файлов в каталоге (максимальное число файлов в каталоге - 30000; 300 тысяч в редких временных каталогах):

Распределение размеров файлов в штуках и объёме (56 миллионов файлов, полезная ёмкость 34.3TB; средний размер - 600 КБ, раньше было - 477 КБ):

Объём записи (в прошлом!) - 100 TB в год, чтения - 1 PB в год (подавляющая часть - резервное копирование).

Распределение холодных и горячих файлов (статистика по 1/3 хранилища, после переезда одного из отделов, было давно):

Доля дублированных файлов - 26.5%. Сравнивал по совпадению md5 (128 бит). Проверка коллизий (более 2 миллионов совпадений) проблем не обнаружила, проверка требует почти столько же времени, что и само вычисление md5. Парадокс дней рождения в общем смысле применим к хеш-функциям: если хеш-функция генерирует N-битное значение, то число случайных входных данных, для которых хеш-коды с большой вероятностью дадут коллизию (то есть найдутся равные хеш-коды, полученные на разных входных данных), равно не 2^N, а только около 2^(N/2). Это наблюдение используется в атаке "дней рождения" на криптографические хеш-функции. Количество входных данных, при котором коллизия будет с заданной вероятностью:

     10^−18     10^−15    10^−12	10^−9	   10^−6      0,1%       1%         25%       50% 	75%

128  2.6×10^10 	8.2×10^11 2.6×10^13 	8.2×10^14  2.6×10^16  8.3×10^17  2.6×10^18  1.4×10^19 2.2×10^19  3.1×10^19
256  4.8×10^29 	1.5×10^31 4.8×10^32 	1.5×10^34  4.8×10^35  1.5×10^37  4.8×10^37  2.6×10^38 4.0×10^38  5.7×10^38

Тестирование поблочной дедупликации duperemove показало выигрыш в 15% по объёму (размер блока - 128КиБ, корпус данных - 10 ТБ и 20 миллионов файлов, потребовалось 8 часов и 30 ГБ ОП на "холостом" ходу), скрипт:

./duperemove -A  -r  /time_machine/old/20140801/share4h|fgrep -v 'csum:' | awk -f ~/bin/dedupsum.awk

BEGIN {sum=0}

{
  if (NR>5) {
    if($1=="Start") {
      skip=1;
    } else {
      if(skip==0) {
        sum=sum+$2;
      } else {
        skip=0;
      }
    }
  }
}

END {print sum} 

Уровень сжатия на всём корпусе данных местного производства (16.2 TB)

Дедупликация

Дедупликация - поиск повторяющихся данных и экономия места при их хранении. Может быть поблочной или пофайловой или побайтовой (внутрифайловая побайтовая дедупликация называется сжатием), на стороне клиента (source-based, меньше передаётся) или файлового сервера (target-based, межклиентское сжатие), непосредственной или отложенной. Для ускорения поиска дублей сравниваются не сами данные, а их хеши (MD5, SHA-1). Плюсы: требуется меньше места на диске и меньшая пропускная способность сети. Минусы: данные теряются легче и в больших количествах, нагрузка на ЦП, проблемы при реорганизации.

lessfs 1.6 - FUSE файловая система с поддержкой сжатия (LZO, QuickLZ, bzip, LZ4, gzip, deflate, snappy), шифрования, репликации и блочной дедупликации. Транзакции при работе с метаданными позволяют избежать необходимости запуска fsck после аварийного останова (где-то я подобное уже слышал). Лицензия GNU GPLv3. Документация отсутствует, если не считать журнальных статей. Предполагалось включить в Fedora 15 - не включён и забыт. Используется mhash и tokyocabinet (NoSQL СУБД). Метаданные и данные хранятся в отдельных подлежащих файловых системах (каталогах).

SDFS - FUSE файловая система на Java. GPLv2. Для хранения данных используется подлежащая файловая система.

ZFS.

Файловая система Hammer DragonFly BSD.

rsync (rsnapshot) и BackupPC (использует жёсткие ссылки) можно приспособить для файловой дедупликации (для архивной файловой системы без записи).

К закупкам большого ящика

Пособие по самостоятельной сборке дисковой полки на 45 дисков LFF в 4U без горячей замены (себестоимость - $50000 за петабайт). Компания Промобит готова сделать это за вас (я не пробовал).

BITBLAZE.ru - Системы Хранения Данных (Омск): BITBLAZE SATA 4U (60 SATA3 LFF с горячей заменой, 4 SFF с горячей заменой, Xeon E5 v3, БП 2N+1, IPMI), BITBLAZE SAS 4U (60 SAS LFF с горячей заменой, 8 SFF с горячей заменой, HBA LSI SAS 3008, Xeon E5 v3, БП 2N+1, IPMI).

HPE D6020 w/70 8TB 12G SAS 7.2K LFF (3.5in) Dual Port Midline HDD 560TB Bundle (P8Y57A), 5U, $160k.

OneStor™ AP-2584 Ultra Dense Storage Server - Application Platform (84 LFF SAS/SATA, 5U, 2 встроенных сервера).

Ссылки

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

Bog BOS: hardware:  Использование RAID контроллеров в Linux

TopList

Copyright © 1996-2017 Sergey E. Bogomolov; www.bog.pp.ru (КГБ знает все, даже то что у Вас на диске ;)