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

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

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

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

Intel VROC

VROC (Virtual RAID on CPU) - очередная инкарнация программного RAID (RAID 0, 1, 5 и 10) для NVMe SSD (PCIe). Обеспечивает также конфигурацию массивов без использования ОС, возможность горячей замены и индикацию состояния. Для работы программного RAID используется встроенный в ЦП (Intel Xeon Scalable) контроллер VMD (Volume Management Device), который обслуживает "свои" устройства NVMe (PCIe). Отдельный VMD обслуживает до 12 NVMe устройств и до 6 массивов (3 домена PCIe на ЦП, 4 устройства на домен), до 2 томов на массив, RAID1 - 2 устройства, RAID10 - 4 устройства, возможно использование коммутаторов PCIe (2 уровня, до 24 устройств на VMD). Возможно создание виртуального массива с использованием устройств от нескольких VMD (spanning), но будет медленно. Виртуальный массив может быть загрузочным. Управление созданными массивами в Linux осуществляется через mdadm ("mdadm --detail-platform"), mdmon, ledmon, ledctl; формат метаданных imsm (Intel Matrix Storage Manager). Горячая замена осуществляется преобразованием сигналов удаления и создания шины PCIe в события mdadm (меняйте по очереди!). Также VMD осуществляет управление индикацией состояния. Конфигурация массивов работает только в UEFI и без Secure Boot (?). Требуется аппаратный ключ.

Активация в SETUP UEFI: Advanced - Chipset - North Bridge - IIO - VMD.

Аппаратные ключи:

RAID5 при записи чудес не показывает.

Кеширование производится в ОП без батареечной поддержки - здравствуй, "write hole" для RAID5 и борьба с ней (Intel предлагает несколько алгоритмов борьбы, что намекает).

Ссылки:

HP Smart Array P400 (SAS/SATA)

HP Smart Array P400 (P400/512MB с батареей - 411064-B21)- серия 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 батарейкадля P400 и P400i (BBWC, Battery-Backed Write Cache, 390936-001 батарея с кабелем, кабель 399034-001, только батарея 398648-001/381573-001 (на заряднике 012695-001 REV 0F); для P410, P410i и P411 - 462976-001 (на заряднике 013277-001 REV 0B) без кабеля или 462969-001/B21 с кабелем) хранит данные 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 или hpssacli-2.40-13.0.x86_64.rpm) предоставляет командный интерфейс для настройки и мониторинга. В начале указывается объект, затем действие, затем параметры (параметр "forced" заранее подверждает потенциально опасное действие). В качестве объекта можно указать

Действия:

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

# добавление отдельного диска под видом 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 /dev/sdX. Вместо утилиты hpacucli используется hpssacli (пакет hpssacli-2.40-13.0.x86_64 с сайта HPE, интерфейс аналогичен. smartctl работает как через sg (использовать sg контроллера, а не логического диска): "smartctl -x /dev/sg1 -d cciss,0", так и через блочные устройства: "smartctl -i /dev/sda -d cciss,0" или "smartctl -i /dev/disk/by-id/scsi-3600508b1001030363943334445300800" или "smartctl -i /dev/disk/by-id/wwn-0x600508b1001030363943334445300800" или даже "smartctl -i /dev/disk/by-label/boot".

Утилита "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

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/AVAGO/Broadcom MegaRAID SAS 9xxx

LSI Logic регулярно выпускает серии HBA и RAID контроллеров линеек MegaRAID 92xx/93xx/94xx/95xx/96xx архитектуры Fusion-MPT (Message Passing Technology, модуль ядра megaraid_sas). Данный бизнес был куплен как часть LSI Corporation компанией Avago, затем Avago купила Emulex и Broadcom Corporation и переименовалась в Broadcom Limited. Контроллеры каждой серии делятся (personality) на HBA (JBOD, последние серии поддерживаются не только JBOD, но и RAID-0, RAID-1) и RAID (MR), которые в свою очередь делятся на дешёвые устройства Entry Line (RAID-1), средние Value Line и дорогие Feature Line (внешние порты, большое количество портов). Различные модели в серии непосредственно поддерживают от 8 до 24 внутренних и внешних устройств хранения SAS 6/12/24 Gb (SAS, SSP), SATA 6 Gb (SATA SSD должны поддерживать набор команд ATA-8 ACS) и NVMe (начиная с 94xx) через одни и теже порты (Tri-Mode). С использованием экспандеров (туннелирование SATA - STP до 12 Gb/s; multipath; протокол управления SMP) и коммутаторов PCIe возможно подключение большого количества (64, 128, 240, 255) устройств хранения. Подключение производится с помощью широких портов (4 устройства SAS на кабель mini-SAS SFF-8087, HD Mini-SAS SFF-8643, 8 SAS на SFF-8654 Slim SAS и т.п.). Количество портов более 8 на старших моделях 92xx/93xx обеспечивается встроенными экспандерами (кроме 9361-16i и 9361-24i).

Некоторые модели:

Поддержка UEFI 2.0: драйвер UEFI, сервис загрузки, конфигурация и диагностика встраиваются в BIOS/UEFI Setup. В реальности, в старых прошивках невозможно пользоваться загрузкой UEFI (нет HII), а в новых невозможно пользоваться Legacy (нет обработки ошибок).

Управление корзиной возможно с помощью встроенного в SAS SES или внешними протоколами SFF-8485 SGPIO (линии имеются в mini-SAS, mini-SAS HD, Slim SAS) или с помощью I2C. Поддерживает (поддерживала?) протокол SAF-TE (интерфейс I2C с процессором SEP корзины). Корзины нумеруются не с нуля, например, с 12 или 250 ("Zero Based Enclosure Enumeration = No", в некоторых серверах (Dell, Lenovo) установлено в Yes). Устройства хранения нумеруются не с нуля и не обязательно подряд.

При настройке до 32 физических устройств хранения объединяются в группу устройств (DG, до 128 групп). Из группы или нескольких групп (до 8, span, упряжка) нарезаются виртуальные диски (VD), не более 16 на группу, не более 64 (до 240 в новых прошивках) виртуальных дисков на контроллер. "Прежде чем размежеваться мы должны объединиться"! Виртуальные диски являются устройствами хранения с точки зрения ОС. Допускается не более 128 (240) устройств хранения на контроллер, не более 64 на корзину (увеличили?), не более 16 корзин на порт. Размер виртуального диска был до 64 ТБ, увеличен до ?.

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

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

В линейке 93xx контроллер можно перевести (storcli, требуется перезагрузка) в режим JBOD (аналог IT HBA) - только RAID-0, RAID-1, RAID-10, зато Passthrough, метаданные (DDF) не пишутся на диск (кроме поддерживаемых RAID). При этом вновь вставленный диск без DDF отображается как JBOD вместо Unconfigured Good.

В линейке 95xx можно задать профиль, например отключить возможность работы с NVMe ("show profile; set profile номер").

/opt/MegaRAID/storcli/storcli64 /c0 show profile

Controller Properties :
=====================

--------------------------------------------------------------------------------
Mode ProfID MaxPhyDrv MaxLD MaxPCIeDev MaxAHCIDev Dflt Curr Optm Pend WBSup Cmp 
--------------------------------------------------------------------------------
RAID 30           240   240         32          0 Yes  Yes  No   No   Yes   Yes 
RAID 32           240   240          0          0 No   No   No   No   Yes   Yes 
--------------------------------------------------------------------------------

ProfID=Profile ID|MaxPhyDrv=Maximum Physical Drives|MaxLD=Maximum Logical Drives
MaxPCIeDev=Maximum PCIe Devices|MaxAHCIDev=Maximum AHCI Devices
Dflt=Default Profile|WBSup=Write Back Support|Curr=Current Profile
Optm=Optimal Profile|Pend=Pending Profile|Cmp=Compatible Profile

Данные нарезаются на полоски, которые распределяются по дискам (strip size - размер полоски на одном диске, stripe width - число дисков в группе, stripe size - сумма размеров полосок данных "на одном обороте"). Размер полоски (strip) - от 8 КиБ (от 64 КиБ в новых версиях) до 1 МиБ.

Логический диск после создания должен быть проинициализирован. По умолчанию, при создании массива запускается фоновая инициализация логических дисков (через 5 минут после создания для RAID-5 из 5 дисков и RAID-6 из 7 дисков), повторная инициализация с теми же параметрами не портит данные пользователей. Фоновые операции (инициализация, восстановление, проверка) могут быть приостановлены и продолжены в любое время. Доля (приоритет) пропускной способности контроллера на фоновые операции задаётся в настройках отдельно для каждого типа. Чтобы изменить скорость необходимо остановить операцию, изменить её долю от возможностей дисков и запустить её заново. по непонятным причинам начиная с версии ? фоновая инициализация (RAID6 из 24 диска SAS 10000rpm 900GB) длится от 2 часов до суток; инициализация RAID-6 из 18 дисков SATA 2TB 7200rpm - более 5 суток при 100% доле; приходится останавливать и запускать "init full").

Контроллер обеспечивает 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 не является заменой резервного копирования.

Независимые диски конфигурируются как RAID-0 или RAID-00 (в новых версиях как JBOD без метаданных).

Можно делать смешанные логические устройства из SAS и SATA дисков, но не из SSD (диски и SSD тоже нельзя смешивать). Описание вариантов смешивания - мутное. Начиная с версии ? можно смешивать всё, но изготовитель сильно не советует. Можно смешивать устройства с секторами 512n и 512e, но нельзя смешивать устройства с секторами 4Kn и 512n/e.

Можно запретить запись на логическое устройство (Read Only).

Тип предваряющего чтения логического устройства: включено, выключено, раньше был адаптивный режим - удалили.

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

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

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

Содержимое кеша записи в аварийных ситуациях (отключение питания) может быть сохранено опциональным модулем сброса кеша записи из памяти DDR на ONFI (флешку) LSI CVM01 (CacheVault, LSI00297) или LSI CVM02 для 93cxx. или батарейным модулем LSIiBBU09 питания DRAM (LiON, достаточно для 48 часов удержания данных в DRAM, может работать при температуре до 45 градусов, в комплекте должны идти TMM - Transportable Memory Modules, чтобы содержимое кеша можно было перенести на новый контроллер). А ведь ради этого мы и покупаем аппаратные RAID6 контроллеры! Модуль CVM02 для 9266 или CVM04 для 93xx включает флеш (CVFM02 для 9266 (USB флеш), CVFM04 для 93xx (ONFI), можно перенести на новый контроллер) со средствами мониторинга и заряда, суперконденсатор (очень быстрая зарядка, хранение данных много лет, необязательно мониторить и регулярно менять как LiON iBBU, нельзя нагревать выше 55, потребляет 6 Вт при зарядке) CVPM02 (LSI 49571-01, 283 J, 9.4V) с датчиком температуры и заряда и переходной кабель (большой 6-pin со стороны конденсатора, малый 6-pin со стороны CVFM02). Имеется интерфейс для подключения индикатора наличия незаписанных данных в кеше (нет в 9361-16i). CVPM нельзя подключать на ходу. В 9361-16i модуль с флешкой (избыточного объёма, для борьбы с плохими блоками?) встроен в контроллер, докупать надо только CVPM02 (с другим переходным кабелем: 6-pin со стороны конденсатора, 9-pin со стороны контроллера?), в результате содержимое кеша пропадает вместе с умершим контроллером. Для 9365-28i и для всех 94xx/95xx вместо CVPM02 требуется CVPM05 (104 J) и переходной кабель 9-pin. Можно докупить держатель BBU-BRACKET-05 для CVPM02/05 (занимает слот PCIe), самодельное крепление не должно давить сверху. CVFM0x можно перемещать на аналогичный контроллер с очищенными настройками. Интересно, что происходит с кешем при зависании контроллера и сбросе без выключения питания?

Средства управления и настройки в HII и storcli позволяют мониторить состояние CVFM и CVPM, запускать проверку работоспособности и управлять периодическим запуском проверки в автоматическом режиме.

storcli64 /c0/cv show all

Cachevault_Info :
===============

--------------------
Property    Value   
--------------------
Type        CVPM05  
Temperature 19 C    
State       Optimal 
--------------------

Firmware_Status :
===============

---------------------------------------
Property                         Value 
---------------------------------------
NVCache State                    OK    
Replacement required             No    
No space to cache offload        No    
Module microcode update required No    
---------------------------------------

GasGaugeStatus :
==============

------------------------------
Property                Value 
------------------------------
Pack Energy             75 J  
Capacitance             100 % 
Remaining Reserve Space 0     
------------------------------

Design_Info :
===========

------------------------------------
Property                 Value      
------------------------------------
Date of Manufacture      08/05/2019 
Serial Number            22515      
Manufacture Name         LSI        
Design Capacity          104 J      
Device Name              CVPM05     
tmmFru                   N/A        
CacheVault Flash Size    17.320 GB  
scapBatversionNo         0x00       
scapSerialNo             22515      
scap Date of Manufacture 08/05/2019 
scapPcbAssmNo            50046-01   
scapPCBversionNo          B         
scapBatPackAssmNo        49571-222  
Module Version           -241-4GB   
------------------------------------

Design_Info :
===========

------------------------------------
Property                 Value      
------------------------------------
Date of Manufacture      04/05/2012 
Serial Number            6108       
Manufacture Name         LSI        
Design Capacity          283 J      
Device Name              CVPM02     
tmmFru                   N/A        
CacheVault Flash Size    N/A        
tmmBatversionNo          0x0        
tmmSerialNo              13059      
tmm Date of Manufacture  16/05/2012 
tmmPcbAssmNo             L22541903A 
tmmPCBversionNo          0x03       
tmmBatPackAssmNo         49571-01A  
scapBatversionNo         0x0        
scapSerialNo             06108      
scap Date of Manufacture 04/05/2012 
scapPcbAssmNo            1700054483 
scapPCBversionNo          G         
scapBatPackAssmNo        49571-01A  
Module Version           25849-04   
------------------------------------

Properties :
==========

------------------------------------------------------------------------
Property                   Value                                        
------------------------------------------------------------------------
Auto Learn Period          27d (2412000 seconds)                        
Next Learn time            2024/03/05  14:01:01 (762962461 seconds)     
Learn Delay Interval       0 hour(s)                                    
Auto-Learn Mode            Transparent                                  
Last Successful Learn Time Completed, TUE, February 6, 2024 at 16:01:01 
------------------------------------------------------------------------

Если при восстановлении питания в копии кеша записи (CV) или в самом кеше (iBBU) обнаруживаются несброшенные данные, то контроллер немедленно пытается записать содержимое кеша записи на устройства хранения. Если обнаруживается, что кеш (или его часть) восстановить неуда (например, отсутствуют устройства хранения от нужных логических томов или они были попорчены), то при загрузке модуль инициализации устройства предлагает сделать что-нибудь. В модуле настройки BIOS или HII появляется строка меню для очистки кеша. При заполненном кеше некоторые функции контроллера недоступны, например, импорт конфигурации с вновь вставленных дисков (foreign), зато предлагается очистить постороннюю конфигурацию. Надо отказаться, очистить кеш, затем импортировать конфигурацию.

До 1008 (в другом месте 255, 5101 для 9560-8i) команд параллельно, scatter/gathers до 60 (80 для 93xx), максимальный размер передачи - 8192 (2048 для 95xx) сектора (до 42 полосок - 2688 KiB; 6.4MiB для 93xx при размере полоски 64KB).

Возможность расширения находящегося в оптимальном состоянии логического диска и миграции между уровнями RAID без остановки работы. Реконфигурацию массива (добавление диска, смена типа RAID - level migration) нельзя прерывать и перезагружаться, после вынимания диска на ходу массив остался в состоянии миграции, сделать с ним ничего не смог. Добавление 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 часов. при реконструкции на всех логических дисках контроллера отключается кеширование записи.

Возможность задержки раскручивания дисков (интервал между парами дисков).

Запасные диски горячей замены (hot spare) позволяют автоматически и без остановки работы заменять неисправные диски с помощью перестроения (восстановления избыточности, rebuild) группы дисков (автоматическое продолжение восстановления после перезагрузки. Горячая замена должна поддерживаться в самих дисках и корзине. Имеется возможность заранее задать долю (в реальности приоритет) - по умолчанию 30% - доступа к дискам для операций восстановления). Восстановление после сбоя 2 дисков RAID-6 происходит по очереди. Диски горячей замены можно привязывать к дисковой полке и/или к группе дисков. При отсутствии подходящего диска горячей замены необходимо извлечь сбойнувший диск и вставить новый. Возможно автоматическое назначение неиспользуемого диска в качестве диска горячей замены (то-то будет сюрприз при случайной вставке диска с ценными данными!). При вставке нового чистого диска в корзину он автоматически становится запасным (и форматируется при необходимости), настраивается. Если при восстановлении происходят ошибки чтения, то блокируется соответствующая область на восстанавливаемых устройствах (Punctured Block Entries), последующие чтения всегда будут возвращать ошибку до очистки (полной инициализации). Если запасной диск имеет больший размер, то свободное место использовать не получится. Восстановление как первого, так и второго диска RAID-6 без нагрузки произсходит очень быстро (2 часа для SAS диска 900GB 10000rpm), под полной нагрузкой - очень медленно (более 2 суток для SAS диска 900GB 10000rpm). Возможно автоматическое продолжение создания или восстановления массива после перезагрузки (настраивается).

Рекомендуется настроить периодическую (раз в месяц) проверку массива (CC) на соответствие данных и чётности, т.к. если "плохой" блок "проявится" при восстановлении, то данные будут потеряны. Можно настраить остановку проверки при обнаружении ошибки или автоматическое лечение. Необходимо установить время на контроллере. Для RAID6 при расхождении данных будет использована правильная копия. Без нагрузки на массив: RAID6 - 240 минут, RAID1- 200 минут (24 диска SAS 10000rpm 900GB); при полной нагрузке на массив: RAID6 - 300 часов, влияние на нагрузку минимальное - 10%; RAID6 из 18 дисков SAS 4TB 7200rpm - 20 часов независимо от ccrate.

Возможна настройка проверки записи (описание мутное).

Можно задавать скорость SAS и NVMe, ширину NVMe.

Поддержка Large IO (включена по умолчанию) - что это?

Возможна предупреждающая замена "подозрительных" дисков (replace) с копированием данных (вручную или по SMART). Отдельно (?) возможно автоматическое копирование данных с SSD с плохими данными SMART на запасное устройство (SSD Guard). Интервал опроса SMART настраивается (300 секунд).

Патрульное чтение дисков, в т.ч. неиспользуемых (без нагрузки на массив, все диски одновременно - 2 часа; при полной нагрузке время патрульного чтения стремится в бесконечность, влияние на нагрузку минимальное - 20%). Запуск регулярный или вручную. Можно задать долю используемых ресурсов для патрульного чтения.

Поддержка нескольких путей доступа к устройствам (multipath) в пределах контроллера, в т.ч. и к SATA, Обещана балансировка загрузки путей для SAS устройств (2 пути вижу, а скорость не прибавилась), автоматическое распознавание экспандеров (ESM, enclosure modules) в одной корзине, обнаружение путей, использование запасных путей, замена одного из ESM без остановки работы. Утилита storcli (и MSM, и LSA) показывает только 1 ESM из пары, но демонстрирует наличие запасных путей. В режиме JBOD каждый путь к устройству (только SAS) представляется как устройство, сервер должен обрабатывать multipath (MPIO) и балансировать нагрузку самостоятельно.

Возможна экономия электричества за счёт автоматической остановки несконфигурированных дисков, дисков горячей замены и неиспользуемых логических дисков (Dimmer Switch), настраивается интервал ожидания. Не советую.

Округление размера дисков вниз (coercion) - требуется для последующей беспроблемной замены диска.

Отключение восстановления данных при проверке; задержка раскрутки; отключение автовосстановления.

Настройки хранятся на диске (COD - Configuration on Disk) в формате DDF и в контроллере на NVRAM/EEPROM (при настройке контроллера можно задать поведение при их несовпадении). Возможна перестановка местами дисков (drive roaming), подключённых к одному контроллеру (требуется отключать питание, перестроение массива начнётся с начала). Возможна перестановка группы дисков на другой контроллер - drive migration (требуется сохранять порядок дисков (?!), необходимо предварительно очистить конфигурацию нового контролера). Импортирование не работает при заполненном кеше контроллера, экспортирования или деактивания группы дисков нет, поэтому требуется выключить сервер перед выемкой дисков (перед этим деактивировать LV и экспортировать VG!)). При очистке конфигурации (предлагалось во время импортирования конфигурации с неосвобождённым кешем) и последующем созданием точно такой же данные сохранились. Если в кеше записи старого контроллера остались данные, а батарейный модуль не перемещаемый типа TBBU/CVFM, то они будут потеряны. Возможен импорт группы дисков с контроллеров типа IR (Integrated RAID), если использовался формат метаданных LDF (LSI Data Format) размером 512 MB (группа дисков с метаданными LDF 64MB будет испорчена).

Обнаружив на вставленном диске остатки чужой DDF контроллер предлагает посмотреть и импортировать чужие (Foreign) настройки или стереть их. С импортом могут быть проблемы: чужой логический диск был в состоянии активности, был сбойным или имел отсутствующие устройства хранения. Можно включить автоматический импорт чужих конфигураций (не рекомендуется).

Имеется управление аварийной сиреной (сообщает об отсутствии в конкретной модели): отключить разово, отключить навсегда.

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

В 92xx не поддерживается команда 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") и scterc (SCT (Get) Error Recovery Control, TLER).

Дополнительно можно закупить возможность ускорения работы с SSD FastPath (программная лицензия LSI00266 или аппаратный ключ LSI00289). FastPath доступен бесплатно с какого-то момента: для виртуального диска включить набор Write Thru, Direct IO, No Read Ahead, Disk Cache Policy Disabled, Strip Size 64K.

За отдельную плату доступно ПО кеширования доступа к массивам на SSD CacheCade Pro 2.0 / 3.0 (программная лицензия LSI00293 или аппаратный ключ LSI00290). Максимальный поддерживаемый объём SSD - 512 ГБ (2 ТБ) на контроллер. Для использования в комплекте с 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 Disk Encyption - локальное управление ключами шифрования виртуальных дисков, необходимо использовать устройства с самошифрованием (SED), при загрузке может запрашиваться пароль хранилища ключей (Authenticated Mode). Утрата ключей обеспечивает очень быстрый способ стирания данных, так что необходимо озаботиться резервным хранением ключей.

Не всегда дружелюбен. Например,

/opt/MegaRAID/storcli/storcli64 /c0 set directpdmapping=on
Status = Success
Directpdmapping ON (Requires reboot for effect)

после загрузки контроллер пропал
в UEFI появилось сообщение, что настройки MegaRAID несовместимы со свойствами корзин, 
BOOT_MSG_ENCL_VIOLATION_MODE (MR_EVT_CTRL_CRASH)
поэтому контроллер остановлен и настройки его недоступны

Интерфейс настройки и управления:

Прошивки для 9266-8i (mr2208fw.rom):

Прошивки для 9361-8i (Invader, mr3108fw.rom; при обновлении с MegaRAID 6.6 к 6.7 в VPD поменяли LSI на Broadcom, так что вернуться обратно будет непросто):

Прошивки для 9361-16i (mr3316fw.rom, MR_FW_3324_4MB.rom):

Прошивки для 9460-8i (9460-16i, 9365-28i) - 5.220.00-3691 (пакет 51.22.0-4545 - MR 7.22), путаница на сайте (пакет 51.23.0-4637).

Прошивки для Aero 9560-8i (9560-8i-4G_NOPAD.rom; обстарение от MR 7.20 и MR 7.22 не разрешается; рекомендуется обновление PSoC Catalog Firmware (управление сбросом и питанием) - сначала поставьте пакет MR 7.20)

Прошивки для Avenger 9660-16i

Установка новой прошивки с помощью storcli на 9560-8i

/opt/MegaRAID/storcli/storcli64 /c0 download file=9560-8i-4G_NOPAD.rom ResetNow
/opt/MegaRAID/storcli/storcli64 /c0 download psoc file=pblp_catalog.signed.rom # "This command supports only IT"

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

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

Установка новой прошивки CacheVault (Gas Gauge) до обновления прошивки контроллера с помощью storcli (TFM для 9266-8i, модуль CVPM02 версии 25849-01 требует обновления до 70-25849-04; 25849-03 и -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
/opt/MegaRAID/storcli/storcli64 /c0/cv show all # Module Version 25849-04

Модуль megaraid_sas.ko, параметры:

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


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

Сообщения ядра для 9560

megasas: 07.714.04.00-rh1
megaraid_sas 0000:31:00.0: BAR:0x0  BAR's base_addr(phys):0x000020bfffe00000  mapped virt_addr:0xffffb5c5713fc000
megaraid_sas 0000:31:00.0: FW now in Ready state
megaraid_sas 0000:31:00.0: 63 bit DMA mask and 63 bit consistent mask
megaraid_sas 0000:31:00.0: firmware supports msix        : (128)
megaraid_sas 0000:31:00.0: irq 142 for MSI/MSI-X
 ...
megaraid_sas 0000:31:00.0: irq 185 for MSI/MSI-X
megaraid_sas 0000:31:00.0: requested/available msix 44/44
megaraid_sas 0000:31:00.0: current msix/online cpus      : (44/36)
megaraid_sas 0000:31:00.0: RDPQ mode     : (enabled)
megaraid_sas 0000:31:00.0: Current firmware supports maximum commands: 5101       LDIO threshold: 0
megaraid_sas 0000:31:00.0: Configured max firmware commands: 5100
megaraid_sas 0000:31:00.0: Performance mode :Balanced
megaraid_sas 0000:31:00.0: FW supports sync cache        : Yes
megaraid_sas 0000:31:00.0: megasas_disable_intr_fusion is called outbound_intr_mask:0x40000009
megaraid_sas 0000:31:00.0: FW supports atomic descriptor : Yes
megaraid_sas 0000:31:00.0: FW provided supportMaxExtLDs: 1       max_lds: 240
megaraid_sas 0000:31:00.0: controller type       : MR(4096MB)
megaraid_sas 0000:31:00.0: Online Controller Reset(OCR)  : Enabled
megaraid_sas 0000:31:00.0: Secure JBOD support   : Yes
megaraid_sas 0000:31:00.0: NVMe passthru support : Yes
megaraid_sas 0000:31:00.0: FW provided TM TaskAbort/Reset timeout        : 6 secs/60 secs
megaraid_sas 0000:31:00.0: JBOD sequence map support     : Yes
megaraid_sas 0000:31:00.0: PCI Lane Margining support    : Yes
megaraid_sas 0000:31:00.0: NVME page size        : (4096)
megaraid_sas 0000:31:00.0: megasas_enable_intr_fusion is called outbound_intr_mask:0x40000000
megaraid_sas 0000:31:00.0: INIT adapter done
megaraid_sas 0000:31:00.0: Snap dump wait time   : 15
megaraid_sas 0000:31:00.0: pci id                : (0x1000)/(0x10e2)/(0x1000)/(0x4010)
megaraid_sas 0000:31:00.0: unevenspan support    : no
megaraid_sas 0000:31:00.0: firmware crash dump   : no
megaraid_sas 0000:31:00.0: JBOD sequence map     : enabled
scsi host0: Avago SAS based MegaRAID driver
scsi 0:1:122:0: Enclosure         SMC      SC846N8          1003 PQ: 0 ANSI: 5
scsi 0:1:123:0: Enclosure         SMC      SC826N4          100d PQ: 0 ANSI: 5
scsi 0:3:110:0: Direct-Access     BROADCOM MR9560-8i        5.12 PQ: 0 ANSI: 5
scsi 0:3:111:0: Direct-Access     BROADCOM MR9560-8i        5.12 PQ: 0 ANSI: 5
sd 0:3:110:0: [sda] 468760657920 512-byte logical blocks: (240 TB/218 TiB)
sd 0:3:110:0: [sda] 4096-byte physical blocks
sd 0:3:110:0: [sda] Write Protect is off
sd 0:3:110:0: [sda] Mode Sense: 1f 00 00 08
sd 0:3:110:0: [sda] Write cache: disabled, read cache: disabled, doesn't support DPO or FUA
sd 0:3:110:0: [sda] Optimal transfer size 983040 bytes
sd 0:3:110:0: [sda] Attached SCSI disk
scsi 0:1:122:0: Attached scsi generic sg0 type 13
scsi 0:1:123:0: Attached scsi generic sg1 type 13
sd 0:3:110:0: Attached scsi generic sg2 type 0
sd 0:3:111:0: Attached scsi generic sg3 type 0
ses 0:1:122:0: Attached Enclosure device
ses 0:1:123:0: Attached Enclosure device

/proc/scsi/scsi

Host: scsi0 Channel: 01 Id: 122 Lun: 00
  Vendor: SMC      Model: SC846N8          Rev: 1003
  Type:   Enclosure                        ANSI  SCSI revision: 05
Host: scsi0 Channel: 01 Id: 123 Lun: 00
  Vendor: SMC      Model: SC826N4          Rev: 100d
  Type:   Enclosure                        ANSI  SCSI revision: 05
Host: scsi0 Channel: 03 Id: 110 Lun: 00
  Vendor: BROADCOM Model: MR9560-8i        Rev: 5.12
  Type:   Direct-Access                    ANSI  SCSI revision: 05
Host: scsi0 Channel: 03 Id: 111 Lun: 00
  Vendor: BROADCOM Model: MR9560-8i        Rev: 5.12
  Type:   Direct-Access                    ANSI  SCSI revision: 05

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

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

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

sg_ses --page=1 /dev/sg0

  SMC       SC846N8           1003
Configuration diagnostic page:
  number of secondary subenclosures: 0
  generation code: 0x0
  enclosure descriptor list
    Subenclosure identifier: 0 (primary)
      relative ES process id: 1, number of ES processes: 1
      number of type descriptor headers: 6
      enclosure logical identifier (hex): 50030480215340bf
      enclosure vendor: SMC       product: SC846N8           rev: 1003
      vendor-specific data:
        11 22 33 44 55 00 00 00 
  type descriptor header/text list
    Element type: Array device slot, subenclosure id: 0
      number of possible elements: 24
      text: ArrayDevicesInSubEnclsr0
    Element type: SAS expander, subenclosure id: 0
      number of possible elements: 1
      text: SAS Expander
    Element type: SAS connector, subenclosure id: 0
      number of possible elements: 28
      text: SAS Connectors
    Element type: Enclosure, subenclosure id: 0
      number of possible elements: 1
      text: EnclosureElementInSubEnclsr0
    Element type: Temperature sensor, subenclosure id: 0
      number of possible elements: 2
      text: TempSensorsInSubEnclsr0
    Element type: Voltage sensor, subenclosure id: 0
      number of possible elements: 2
      text: VoltageSensorsInSubEnclsr0

  SMC       SC826N4           100d
Configuration diagnostic page:
  number of secondary subenclosures: 0
  generation code: 0x0
  enclosure descriptor list
    Subenclosure identifier: 0 (primary)
      relative ES process id: 1, number of ES processes: 1
      number of type descriptor headers: 6
      enclosure logical identifier (hex): 500304802157223f
      enclosure vendor: SMC       product: SC826N4           rev: 100d
      vendor-specific data:
        00 00 00 00 00 00 00 00 
  type descriptor header/text list
    Element type: Array device slot, subenclosure id: 0
      number of possible elements: 12
      text: Array Devices
    Element type: SAS connector, subenclosure id: 0
      number of possible elements: 16
      text: SAS Connectors
    Element type: Enclosure, subenclosure id: 0
      number of possible elements: 1
      text: Enclosure Devices
    Element type: SAS expander, subenclosure id: 0
      number of possible elements: 1
      text: SAS Expander
    Element type: Temperature sensor, subenclosure id: 0
      number of possible elements: 2
      text: Temperature Sensors
    Element type: Voltage sensor, subenclosure id: 0
      number of possible elements: 2
      text: Voltage Sensors

Состояние (9266-8i):

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 штуки

Состояние (9560-8i):

sg_ses --page=2 /dev/sg0

  SMC       SC846N8           1003
  Primary enclosure logical identifier (hex): 50030480215340bf
Enclosure Status diagnostic page:
  INVOP=0, INFO=0, NON-CRIT=0, CRIT=0, UNRECOV=0
  generation code: 0x0
  status descriptor list
    Element type: Array device slot, subenclosure id: 0 [ti=0]
      Overall descriptor:
        Predicted failure=0, Disabled=0, Swap=0, status: Unsupported
        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, Do not 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
      Element 0 descriptor:
        Predicted failure=0, Disabled=0, Swap=0, status: OK
        OK=1, 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, Do not remove=1, 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
...
      Element 23 descriptor:
        Predicted failure=0, Disabled=0, Swap=0, status: OK
        OK=1, 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, Do not remove=1, 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
    Element type: SAS expander, subenclosure id: 0 [ti=1]
      Overall descriptor:
        Predicted failure=0, Disabled=0, Swap=0, status: Unsupported
        Ident=0, Fail=0
      Element 0 descriptor:
        Predicted failure=0, Disabled=0, Swap=0, status: OK
        Ident=0, Fail=0
    Element type: SAS connector, subenclosure id: 0 [ti=2]
      Overall descriptor:
        Predicted failure=0, Disabled=0, Swap=0, status: Unsupported
        Ident=0, No information
        Connector physical link=0x0, Fail=0
      Element 0 descriptor:
        Predicted failure=0, Disabled=0, Swap=0, status: OK
        Ident=0, Mini SAS HD 4i receptacle (SFF-8643) [max 4 phys]
        Connector physical link=0x0, Fail=0
      Element 1 descriptor:
        Predicted failure=0, Disabled=0, Swap=0, status: OK
        Ident=0, Mini SAS HD 4i receptacle (SFF-8643) [max 4 phys]
        Connector physical link=0x0, Fail=0
      Element 2 descriptor:
        Predicted failure=0, Disabled=0, Swap=0, status: OK
        Ident=0, Mini SAS HD 4i receptacle (SFF-8643) [max 4 phys]
        Connector physical link=0x0, Fail=0
      Element 3 descriptor:
        Predicted failure=0, Disabled=0, Swap=0, status: OK
        Ident=0, Mini SAS HD 4i receptacle (SFF-8643) [max 4 phys]
        Connector physical link=0x0, Fail=0
      Element 4 descriptor:
        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
...
      Element 27 descriptor:
        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
    Element type: Enclosure, subenclosure id: 0 [ti=3]
      Overall descriptor:
        Predicted failure=0, Disabled=0, Swap=0, status: Unsupported
        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 0 descriptor:
        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: Temperature sensor, subenclosure id: 0 [ti=4]
      Overall descriptor:
        Predicted failure=0, Disabled=0, Swap=0, status: Unsupported
        Ident=0, Fail=0, OT failure=0, OT warning=0, UT failure=0
        UT warning=0
        Temperature: 
      Element 0 descriptor:
        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=25 C
      Element 1 descriptor:
        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=50 C
    Element type: Voltage sensor, subenclosure id: 0 [ti=5]
      Overall descriptor:
        Predicted failure=0, Disabled=0, Swap=0, status: Unsupported
        Ident=0, Fail=0,  Warn Over=0, Warn Under=0, Crit Over=0
        Crit Under=0
        Voltage: 0.00 volts
      Element 0 descriptor:
        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: 5.07 volts
      Element 1 descriptor:
        Predicted failure=0, Disabled=0, Swap=0, status: OK
        Ident=0, Fail=0,  Warn Over=0, Warn Under=0, Crit Over=0
        Crit Under=0
        Voltage: 12.05 volts


sg_ses --page=2 /dev/sg1
  SMC       SC826N4           100d
  Primary enclosure logical identifier (hex): 500304802157223f
Enclosure Status diagnostic page:
  INVOP=0, INFO=0, NON-CRIT=0, CRIT=0, UNRECOV=0
  generation code: 0x0
  status descriptor list
    Element type: Array device slot, subenclosure id: 0 [ti=0]
      Overall descriptor:
        Predicted failure=0, Disabled=0, Swap=0, status: Unsupported
        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, Do not 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
      Element 0 descriptor:
        Predicted failure=0, Disabled=0, Swap=0, status: OK
        OK=1, 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, Do not remove=1, 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
...
      Element 11 descriptor:
        Predicted failure=0, Disabled=0, Swap=0, status: OK
        OK=1, 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, Do not remove=1, 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
    Element type: SAS connector, subenclosure id: 0 [ti=1]
      Overall descriptor:
        Predicted failure=0, Disabled=0, Swap=0, status: Unsupported
        Ident=0, No information
        Connector physical link=0x0, Fail=0
      Element 0 descriptor:
        Predicted failure=0, Disabled=0, Swap=0, status: OK
        Ident=0, Mini SAS HD 4i receptacle (SFF-8643) [max 4 phys]
        Connector physical link=0x0, Fail=0
      Element 1 descriptor:
        Predicted failure=0, Disabled=0, Swap=0, status: OK
        Ident=0, Mini SAS HD 4i receptacle (SFF-8643) [max 4 phys]
        Connector physical link=0x0, Fail=0
      Element 2 descriptor:
        Predicted failure=0, Disabled=0, Swap=0, status: OK
        Ident=0, Mini SAS HD 4i receptacle (SFF-8643) [max 4 phys]
        Connector physical link=0x0, Fail=0
      Element 3 descriptor:
        Predicted failure=0, Disabled=0, Swap=0, status: OK
        Ident=0, Mini SAS HD 4i receptacle (SFF-8643) [max 4 phys]
        Connector physical link=0x0, Fail=0
      Element 4 descriptor:
        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
...
      Element 15 descriptor:
        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
    Element type: Enclosure, subenclosure id: 0 [ti=2]
      Overall descriptor:
        Predicted failure=0, Disabled=0, Swap=0, status: Unsupported
        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 0 descriptor:
        Predicted failure=0, Disabled=0, Swap=0, status: Unsupported
        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 [ti=3]
      Overall descriptor:
        Predicted failure=0, Disabled=0, Swap=0, status: Unsupported
        Ident=0, Fail=0
      Element 0 descriptor:
        Predicted failure=0, Disabled=0, Swap=0, status: OK
        Ident=0, Fail=0
    Element type: Temperature sensor, subenclosure id: 0 [ti=4]
      Overall descriptor:
        Predicted failure=0, Disabled=0, Swap=0, status: Unsupported
        Ident=0, Fail=0, OT failure=0, OT warning=0, UT failure=0
        UT warning=0
        Temperature: 
      Element 0 descriptor:
        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=47 C
      Element 1 descriptor:
        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=21 C
    Element type: Voltage sensor, subenclosure id: 0 [ti=5]
      Overall descriptor:
        Predicted failure=0, Disabled=0, Swap=0, status: Unsupported
        Ident=0, Fail=0,  Warn Over=0, Warn Under=0, Crit Over=0
        Crit Under=0
        Voltage: 0.00 volts
      Element 0 descriptor:
        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.94 volts
      Element 1 descriptor:
        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: 5.06 volts

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

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 # active, fault, power_status, slot
OK 

cat /sys/class/enclosure/0\:1\:122\:0/Slot23/locate
0

Тестирование скорости записи (на примере параллельного восстановления домашних каталогов, 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)

Настройка для 9266:

/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

Настройка для 9560:

/opt/MegaRAID/storcli/storcli64 /c0 set bios Mode=SOE # стоять, если что не так
/opt/MegaRAID/storcli/storcli64 /c0 set coercion=0 # были проблемы с вычислениями
/opt/MegaRAID/storcli/storcli64 /c0 set copyback=off type=all # без неожиданностей
/opt/MegaRAID/storcli/storcli64 /c0 set dimmerswitch=off type=4 # не спать!
/opt/MegaRAID/storcli/storcli64 /c0 start dpm # сбор статистики
/opt/MegaRAID/storcli/storcli64 /c0 set foreignautoimport=off # без неожиданностей
/opt/MegaRAID/storcli/storcli64 /c0 set loadbalancemode=on # хотя тут 1 порт
/opt/MegaRAID/storcli/storcli64 /c0 set patrolread=off # везде CC
/opt/MegaRAID/storcli/storcli64 /c0 set perfmode=1 # не поддерживается, но Support Perf Tuning = Yes

# для сервера резервного копирования bacula "ra cached" вместо "nora direct"
/opt/MegaRAID/storcli/storcli64 /c0 add vd type=raid6 size=all name=first drives=250:0-11,251:0-4 pdcache=off wb nora direct Strip=64
/opt/MegaRAID/storcli/storcli64 /c0 add vd type=raid6 size=all name=second drives=251:5-15,18-23 pdcache=off wb nora direct Strip=64
# и сразу же (bgi обещает закончиться через 17 дней)
/opt/MegaRAID/storcli/storcli64 /c0/vall set autobgi=off
/opt/MegaRAID/storcli/storcli64 /c0/vall start init full

pvcreate /dev/sda /dev/sdb
vgcreate data /dev/sda /dev/sdb
lvcreate -n tm --stripes 2 --stripesize 64K -l +100%FREE data /dev/sda /dev/sdb

Глюк

04/18/15 22:37:07: cmdBlockPrep: Command block started (host IOs blocked)
04/18/15 22:40:41: adapterResetRequestIsr  CCRMiscCfg c003ff0e timeUs: b6274d7e
04/18/15 22:40:41: adapterResetRequestIsr  CCRMiscCfg c003ff0e timeUs: b6274e01
04/18/15 22:40:41: Adptr Res Rqst task timeUs: b6274e41

04/18/15 22:40:43: EVT#44951-04/18/15 22:40:43: 345=Controller encountered a fatal error and was reset 

04/18/15 22:40:55: fusionMUErrorIsr: FMU Error Status 00000400
04/18/15 22:40:55: MU: Disabled FIFO Write error
04/18/15 22:40:55: Fusion register dump: 


в следующий раз подождал подольше (5 минут?)

Apr 20 19:18:01 x136 kernel: megasas: [175]waiting for 234 commands to complete for scsi0
Apr 20 19:18:06 x136 kernel: megaraid_sas: pending commands remain after waiting, will reset adapter scsi0.
Apr 20 19:18:06 x136 kernel: megaraid_sas: resetting fusion adapter scsi0.
Apr 20 19:18:17 x136 kernel: megasas: Waiting for FW to come to ready state
Apr 20 19:18:42 x136 kernel: megasas: FW now in Ready state
Apr 20 19:18:43 x136 kernel: megasas:IOC Init cmd success
Apr 20 19:18:43 x136 kernel: megaraid_sas 0000:02:00.0: Firmware supports 256 VD 256 PD
Apr 20 19:18:43 x136 kernel: megaraid_sas 0000:02:00.0: Driver supports 256 VD  256 PD
Apr 20 19:18:43 x136 kernel: megaraid_sas: Reset successful for scsi0.


04/20/15 19:18:07: adapterResetRequestIsr  CCRMiscCfg c003ff0e timeUs: e94fdd3d
04/20/15 19:18:07: adapterResetRequestIsr  CCRMiscCfg c003ff0e timeUs: e94fddc6
04/20/15 19:18:07: Pmu Msg Fault!!! faultcode 00000d05

04/20/15 19:18:07: In MonTask; Seconds from powerup = 0x00013d42
04/20/15 19:18:07: Max Temperature = 57 on Channel 1
Firmware crash dump feature disabled
    ---Feature is disabled in MFC or
       Online Ctrl Reset is enabled in MFC or
       Security is enabled in Controller
montask   1
_MonTask: Online Controller Reset
[0]: fp=c130b840, lr=c1875698  -  _MonTask+1b8
[1]: fp=c130b970, lr=c19f5f44  -  PmuMsgProcessFault+30
[2]: fp=c130b978, lr=c134054c  -  PmuProcessCommonHdr+28
[3]: fp=c130b980, lr=c1340208  -  PmuProcessQueue+16c
[4]: fp=c130ba10, lr=c13403dc  -  PmuPoll+c0
[5]: fp=c130ba48, lr=c1330e44  -  TaskStartNext+90
[6]: fp=c130ba88, lr=c13188d8  -  set_state+7c
[7]: fp=c130baf8, lr=c131939c  -  raid_task_idle_loop+20
[8]: fp=c130bb08, lr=c18a04e8  -  raid_task+60c
[9]: fp=c130bf88, lr=c197fb40  -  _main+b64
[10]: fp=c130bff8, lr=fc801e60  -  __start+e08
MonTask: line 482 in file ../../gemini/pmuInterface.c
UIC_ER=15e80:8070b07, UIC_MSR=0:0, MSR=21000, sp=c130b840
online reset - no input needed
04/20/15 19:18:07: online reset - wait for Reset to occur 

Стабильное зависание при тестировании 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 контроллерами фирмы Broadcom (LSI Logic, Avago) линеек 924x и выше (до 9600?), IT (HBA) контроллерами и программным RAID ((SWR), например, MegaRAID SAS 9266-8i. Имеет одинаковый командный интерфейс для RHEL 5.8 и выше, UEFI Shell, Solaris (уже нет), FreeBSD 12.3-13.1, VMware ESXi 4.0 - 6.5, MS Windows 7-11, MS Windows Server 2008 R2 - 2022. Не поддерживает работу со снимками. Не рекомендуется параллельное выполнение нескольких storcli.

Установка для Linux выполнена в виде пакета storcli-*.noarch.rpm (фактически надо извлечь 1 файл - /opt/MegaRAID/storcli/storcli64).

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

По умолчанию, журнал пишется (полный debug) в файл storcli.log в текущем каталоге. При превышении размера файла 3 МБ производится ротация на 4 поколения (storcli.log.3). Отключить можно в любой команде параметром "nolog".

Настройки в storcliconf.ini в каталоге /opt/MegaRAID/storcli/.

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

Команды:

Пример замены дисков (после вставки 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

Изменения от 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.23.02: новые команды (?) для новых свойств (?) контроллера, HDDThermalPollInterval, SSDThermalPollInterval, параллельная загрузка прошивки НЖМД, установка параметров multipath.

При передаче дел от LSI к Avago, а затем Broadcom была проведена перенумерация (Unified StorCLI) от 1.23.02 до 007.0166: прощай официальная поддержка старых (до 93xx) устройств. Неофициально работает.

Изменения от 007.0166 до 007.0504: прошивка CPLD для HBA, всегда выводится версия.

Далее пропал информативный список изменений.

Изменения от 007.2408 до 007.2508: исправление ошибок.

Изменения от 007.2508 до 007.2612: исправление ошибок, ещё больше JSON, новые профили, "storcli /cx/px show phyevents".

Изменения от 007.2612 до 007.2705: исправление ошибок.

Изменения от 007.2705 до 007.2707: исправление ошибок.

Для контроллеров SAS4 произошла смена на storcli2 (StorCLI Avenger 008.0007.0000.0012). storcli2 не видит контроллеры 92xx.

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 -CfgDsply -a0 # общее состояние
/opt/MegaRAID/MegaCli/MegaCli64 -EncInfo -a0 # состояние дисковой полки
/opt/MegaRAID/MegaCli/MegaCli64 -pdInfo -PhysDrv[25:0] -a0 # информация о диске в слоте 0 корзины 25
/opt/MegaRAID/MegaCli/MegaCli64 -ldinfo -l0 -a1 # узнать состояние
/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 -AdpEventLog -GetEvents -f имя-файла.log -aALL # сохранить журнал

Автономный дисковый массив 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

Тестирование скорости с помощью bonnie++ (сервер - 2 Opteron 2356 (4 ядра, 2300 MHz), 32GB, HBA QLogic ISP2532 8Gb, подключён 1 канал, нагрузка отсутствует, CentOS 7.2)

пристяжная полка (пустая), ext4, defaults
Version  1.97       ------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
s204.cs.nii 200000M           657797  91 257580  36           468557  37 692.5   7
Latency                         232ms    3895ms               162ms     144ms

badblocks -sv -b 8192 -c 1024 /dev/sdc
435MB/s

пристяжная полка (пустая), read ahead maximum, ext4, defaults
Version  1.97       ------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
s204.cs.nii 200000M           657812  91 257869  36           456816  36 710.3   8
Latency                         198ms    4252ms               134ms   49226us

badblocks -sv -b 8192 -c 1024 /dev/sdc
650MB/s

основная полка (заполнена на 2/3), ext4, defaults
Version  1.97       ------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
s204.cs.nii 200000M           516451  70 257074  36           470066  37 718.9   7
Latency                        2152ms    3505ms               227ms     174ms 

Удаление 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 представляет собой

Выдаёт хосту очень странные параметры логического устройства, например (sdb и sde - multipath к одному логическому диску):

Nov 16 15:55:42 s87 kernel: device-mapper: table: 253:0: adding target device sdd caused an alignment inconsistency: physical_block_size=2097152, logical_block_size=512, alignment_offset=15872, start=0
Nov 16 15:55:42 s87 kernel: device-mapper: table: 253:0: adding target device sdd caused an alignment inconsistency: physical_block_size=2097152, logical_block_size=512, alignment_offset=15872, start=0 

Nov 16 16:16:12 s87 kernel: sd 0:0:1:0: [sdb] physical block alignment offset: 3162112
Nov 16 16:16:12 s87 kernel: sd 1:0:1:0: [sde] physical block alignment offset: 6832128
Nov 16 16:16:12 s87 kernel: sd 0:0:1:0: [sdb] 16384-byte physical blocks
Nov 16 16:16:12 s87 kernel: sd 1:0:1:0: [sde] 2097152-byte physical blocks 

s12_archive2_tm2 (360050cc000205ed4000000000000002b) dm-1 XYRATEX,F5412E
size=18T features='1 queue_if_no_path' hwhandler='0' wp=rw
`-+- policy='queue-length 0' prio=0 status=active
  |- 0:0:1:0 sdb 8:16 active undef running
  `- 1:0:1:0 sde 8:64 active undef running 

Тестирование производительности с помощью 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.

Периодическая проверка задаётся скриптом /etc/cron.d/raid-check (/usr/sbin/raid-check, /etc/sysconfig/raid-check).

Чтобы создать программное 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 (основывается на dm-cache). При разработке эффективность была принесена в жертву отсутствию ошибок и скорости реализации (примитивное хеширование по адресу блока при большом количестве коллизий, линейном поиске в списке коллизий и однопоточная реализация - низкая пропускная способность).

Образует из медленного и быстрого устройств виртуальное устройство (управляется 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/краткое-имя-быстрого-устройства+краткое-имя-медленного-устройства/:

Ассоциативность только степень двойки; при ассоциативности 256 загрузка ЦП достигает 100% при потоке 675 MB/s при ассоциативности 1024 загрузка ЦП достигает 100% при потоке 500 MB/s при ассоциативности 2048 загрузка ЦП достигает 100% при потоке 350 MB/s. И эти 100% одного ядра на все процессы (общая блокировка).

На основе flashcache был сделан EnhanceIO.

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. сборка кеша из исходного тома данных и пула (исходный том данных переименовывается, до RHEL 7.3 можно было указать кешируемое устройство (интервал блоков), а учитывался ли параметр?))
    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
    

Вынесение метаданных на SSD, кешировать том bigfast в группе test целиком и склеивать с остатком SSD

разбил /dev/nvme0n1 на разделы

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048       167774207   80.0 GiB    8E00  Linux LVM
   2       167774208       732585134   269.3 GiB   8E00  Linux LVM

создал кешируемый том test/bigfast

pvcreate /dev/nvme0n1p2
vgextend test /dev/nvme0n1p2
lvcreate -n metacache4x -l 258 test /dev/nvme0n1p2
lvcreate -n datacache4x -l 68430 test /dev/nvme0n1p2
lvconvert --type cache-pool --cachemode writeback --poolmetadata test/metacache4x test/datacache4x
lvconvert --type cache --cachepool test/datacache4x test/bigfast

группа томов super поверх bigfast и остатка nvme

pvcreate /dev/nvme0n1p1
pvcreate /dev/test/bigfast
vgcreate super /dev/nvme0n1p1 /dev/test/bigfast
lvcreate --name super --type linear -l +100%FREE super /dev/nvme0n1p1
lvextend /dev/super/super /dev/test/bigfast

mkfs.ext4 -N 300000000 -E stride=16,stripe_width=240,nodiscard,packed_meta_blocks=1 \
  -I 256 -J size=1024 -L test4x -v \
  -O 64bit,dir_index,dir_nlink,extent,ext_attr,filetype,flex_bg,has_journal,huge_file,\
     inline_data,large_file,meta_bg,sparse_super,uninit_bg,^resize_inode /dev/super/super

/dev/super/super /test ext4 noauto,data=ordered,stripe=240,nobarrier,nodiratime,relatime,journal_checksum,delalloc,nodiscard 1 2

Пример 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 миллионов файлов

В реальной эксплуатации вместо Intel DC 3500 были использованы Intel SSD DC P3600 (с 72 дисками на 10k rpm тяжело конкурировать!).

Проблема в 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 не попадают в кеш (а может так и надо?), отложенную инициализацию невозможно прервать (и расмонтировать), но все таблицы попадают в кеш (много времени и места).

При аварийной перезагрузке все блоки считаются грязными и запускается синхронизация от SSD к HDD, 2TB случайной записи на диск!

Статистика

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

Общий объём данных и количество файлов в основном хранилище - 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)

Сжатие файла трассировки моделирования (40789981568 байт) из памяти на сервере grid0003 (2 x E5-2667 v4 @ 3.20GHz), CentOS7.4:

алгоритм	уровень	байт		секунд

lzop		-1	8013230276	64
lzop		-2..6	7963530047	66
lzop		-7	4944459186	1086
lzop		-8	4679994607	3857
lzop		-9	4679459353	4648

lz4 		-1..2	7044855466	58
lz4		-3	4735264860	218
lz4		-4	4613032575	289
lz4		-5	4562105105	341
lz4		-6	4542079125	414
lz4		-7	4532990782	500
lz4		-8	4528741951	560
lz4		-9	4527466791	625
lz4		-10	4527051214	624
lz4		-11	4526762668	683
lz4		-12	4526583908	666
lz4		-13	4526400701	723
lz4		-14	4526260018	746
lz4		-15	4526188711	792
lz4		-16	4526188711	792

zstd		-1	2382689231	59
zstd		-2	2376729386	66
zstd		-3	2164293737	74
zstd		-4	2157436343	72
zstd		-5	2045570550	184
zstd		-6	1904253400	215
zstd		-7	1877528038	254
zstd		-8	1723220104	290
zstd		-9	1728903712	315
zstd		-10	1703110640	403
zstd		-11	1650411473	433
zstd		-12	1620867453	596
zstd		-13	1611939951	698
zstd		-14	1534456877	1069
zstd		-15	1408103289	5287
zstd		-16	1401540351	5681
zstd		-17	1263121845	4130
zstd		-18	993243039	6733
zstd		-19	963591944	11883
zstd - -ultra	-20	898756923	30899
zstd - -ultra	-21	977373656	43775

zstd -T0	-1	2429065917	17
zstd -T0	-2	2412649200	18
zstd -T0	-3	2200218995	18
zstd -T0	-4	2193278414	18
zstd -T0	-5	2083359346	17
zstd -T0	-6	1928731093	19
zstd -T0	-7	1901433434	24
zstd -T0	-8	1741287862	27
zstd -T0	-9	1747293298	35
zstd -T0	-10	1721214807	41
zstd -T0	-11	1663714240	53
zstd -T0	-12	1633952132	64
zstd -T0	-13	1625470897	98
zstd -T0	-14	1547695012	123
zstd -T0	-15	1420820166	412
zstd -T0	-16	1394475825	482
zstd -T0	-17	1242608096	330
zstd -T0	-18	1002795634	546 # 3 GB
zstd -T0	-19	975564928	1326
zstd -T0 --ultra	-20	904224068	3456 # 10 GB
zstd -T0 --ultra	-21	980817107	4630 # 18 GB
zstd -T0 --ultra	-22	965940845	14993 # 31 GB

zstd -T0 --ultra -22 --zstd=strategy=8,windowLog=27,hashLog=26,chainLog=28,searchLog=26,searchLength=3,tlen=999 964904215 70322 # 43 GB

gzip		-1	5438101048	287
gzip		-2	5091628070	289
gzip		-3	4813043660	333
gzip		-4	4214840203	347
gzip		-5	3922181044	418
gzip		-6	3841306376	560
gzip		-7	3679308108	752
gzip		-8	3543051128	1561
gzip		-9	3540648809	2061

pigz		-1	5355884906	20
pigz		-2	5005696708	20
pigz		-3	4732140213	23
pigz		-4	4203018630	27
pigz		-5	3909900817	31
pigz		-6	3828539021	41
pigz		-7	3669273808	52
pigz		-8	3535618847	106
pigz		-9	3533166885	126
pigz		-11	2968534977	22716

bzip2		-1	3225945810	2134
bzip2		-2	2838263929	2191
bzip2		-3	2635043380	2295
bzip2		-4	2519051682	2378
bzip2		-5	2436146313	2420
bzip2		-6	2384412677	2488
bzip2		-7	2334870886	2549
bzip2		-8	2308540668	2513
bzip2		-9	2304013700	2609

pbzip2		-1	3236886777	139
pbzip2		-2	2849899256	143
pbzip2		-3	2686850621	147
pbzip2		-4	2530792733	157
pbzip2		-5	2510974602	160
pbzip2		-6	2498486446	163
pbzip2		-7	2445517926	170
pbzip2		-8	2319567447	180
pbzip2		-9	2309592351	178

xz		-0	1798217324	574
xz		-1	1511927728	690
xz		-2	1352673532	968
xz		-3	1234859896	1379
xz		-4	1393553940	2728
xz		-5	656466900	5698
xz		-6	631181940	10185
xz		-7	612029744	10915
xz		-8	595228376	11613
xz		-9	586267368	12179

xz -T0		-0	1908117496	39
xz -T0		-1	1580792880	59
xz -T0		-2	1411409928	100
xz -T0		-3	1283389276	175
xz -T0		-4	1440989444	185
xz -T0		-5	690173200	408
xz -T0		-6	665080676	849
xz -T0		-7	633806812	941 # 4 GB
xz -T0		-8	610048888	1030 # 8 GB
xz -T0		-9	596659024	1135 # 13 GB

xz -T0 --block-size=1GiB	-0	1798355172	50 # 16 GB
xz -T0 --block-size=1GiB	-1	1512137720	71 # 16 GB
xz -T0 --block-size=1GiB	-2	1353011416	121 # 16 GB
xz -T0 --block-size=1GiB	-3	1235450880	216 # 17 GB
xz -T0 --block-size=1GiB	-4	1394194192	229 # 17 GB
xz -T0 --block-size=1GiB	-5	657164628	503 # 18 GB
xz -T0 --block-size=1GiB	-6	632333800	1048 # 18 GB
xz -T0 --block-size=1GiB	-7	613118144	1142 # 19 GB
xz -T0 --block-size=1GiB	-8	596340964	1233 # 22 GB
xz -T0 --block-size=1GiB	-9	588556708	1347 # 26 GB

xz -T0 --block-size=1GiB --extreme	-0	1072590992	2042 # 17 GB
xz -T0 --block-size=1GiB --extreme	-1	816923152	4903 # 17 GB
xz -T0 --block-size=1GiB --extreme	-2	725470192	8156
xz -T0 --block-size=1GiB --extreme	-3	665287252	3600
xz -T0 --block-size=1GiB --extreme	-4	667555772	13087
xz -T0 --block-size=1GiB --extreme	-5	635376076	4142
xz -T0 --block-size=1GiB --extreme	-6	636287228	16088 # 18 GB
xz -T0 --block-size=1GiB --extreme	-7	623022844	18214 # 19 GB
xz -T0 --block-size=1GiB --extreme	-8	613114324	20845 # 22 GB
xz -T0 --block-size=1GiB --extreme	-9	609295824	23321 # 25 GB

xz -T0 --block-size=1GiB --lzma2=dict=512MiB,lc=3,lp=0,pb=2,mode=normal,nice=273,mf=bt4,depth=1024 606761864 52183 # 98 GB

freeze			5465927108	1404
freeze -x		5465821521	1424

lrzip -T -l		2522470877	9728 # 38 GB
lrzip -T -g	-L 1	5158887719	509 # 38 GB, распараллеливание - 20%
lrzip -T -g	-L 2	4472387536	578 # 44 GB
lrzip -T -g	-L 3	3271569931	742
lrzip -T -g	-L 4	2149072116	948
lrzip -T -g	-L 5	2002492349	1068
lrzip -T -g	-L 6	1319117201	3185
lrzip -T -g	-L 7	1354973244	10648
lrzip -T -g	-L 8	1918951223	13321
lrzip -T -g	-L 9	3056743511	12846

lrzip -T -b	-L 1	3169320129	623 # 38 GB, распараллеливание - 400%
lrzip -T -b	-L 2	2715639335	693 # распараллеливание - 350%
lrzip -T -b	-L 3	2098468974	820
lrzip -T -b	-L 4	1500537166	997
lrzip -T -b	-L 5	1482267072	1152
lrzip -T -b	-L 6	1053613040	3194
lrzip -T -b	-L 7	1134202195	10563
lrzip -T -b	-L 8	1604933377	13151
lrzip -T -b	-L 9	2327278157	12648

lrzip -T	-L 1	2433375250	468 # 38 GB
lrzip -T	-L 2	2557992887	536 # 38 GB
lrzip -T	-L 3	2041353816	656
lrzip -T	-L 4	1490988606	845
lrzip -T	-L 5	1512380852	942
lrzip -T	-L 6	1056629475	2835
lrzip -T	-L 7	921817343	9930
lrzip -T	-L 8	1326392321	12259
lrzip -T	-L 9	1568362727	11935

lrzip -T -z		866483454	10475

lzip		-0	2437262223	491
lzip		-1	1671987408	1436
lzip		-2	1567372315	1753
lzip		-3	1492264643	2245
lzip		-4	1417845686	3224
lzip		-5	1366316999	5591
lzip		-6	651738973	10247
lzip		-7	608908230	20172
lzip		-8	604313609	42477
lzip		-9	602870375	112881

compress	-b 9	20308125290	200
compress	-b 10	17114734042	219
compress	-b 11	14281016465	258
compress	-b 12	12519790477	284
compress	-b 13	11128666257	331
compress	-b 14	9978822295	411
compress	-b 15	8770765565	543
compress	-b 16	7754822629	775

Сжатие домашнего каталога одного из разработчиков (моделирование netlist), предварительно заархивированного в tar.zst и подкачанного в память:

xzcat -T0 compress_bench/*.xz |dd bs=1024k of=/dev/null # 845 GB, 88.2 MB/s

zstdcat -T0 compress_bench_zstd/*.zst |dd bs=1024k of=/dev/null # 845 GB, 444 MB/s, подкачка в памяти по сети 1Gb

zstdcat -T0 compress_bench_zstd/*.zst |dd bs=1024k of=/dev/null # 845 GB, 782 MB/s, из буфера в памяти

echo compress_bench_zstd/*.zst | xargs --max-args=1 --max-procs=2 zstdcat -T0 | dd bs=10240k of=/dev/null # 845 GB, 1397 (втроем в пике 2352) MB/s, из буфера

lz4 		-2	299260419394	2093 # 1 поток
lz4		-3	257614353153	9417 # 1 поток
не нужен

zstd -T0	-1	223426781886	1250
zstd -T0	-2	221271941333	1243
zstd -T0	-3	215639958252	1270
zstd -T0	-4	215027165331	1283
zstd -T0	-5	211677787659	1289	
zstd -T0	-6	206477817058	1509
zstd -T0	-7	204643261740	1434
zstd -T0	-8	201391141200	1612
zstd -T0	-9	200958563074	1770
zstd -T0	-10	199768721507	1860
zstd -T0	-11	197745126031	2108
zstd -T0	-12	196950159257	2426
zstd -T0	-13	196502524675	2808
zstd -T0	-14	195891978609	3740

zstd -T0	-15	194603792056	7509
zstd -T0	-16	192465519042	8771
zstd -T0	-17	192077339368	9154
zstd -T0	-18	189239214358	12013
zstd -T0	-19	184622016268	15879
zstd -T0	-20	179226494260	22160
zstd -T0	-21	174651332156	32120 # 17 GB
выше -14 не нужны

xz -T0 --block-size=1GiB	-0	197349595536	2856

xz -T0 --block-size=512MiB	-1	191014522620	4962 # 23 GB

xz -T0 --block-size=256Mib	-0	197355341184	2791 # 12 GB
xz -T0 --block-size=256Mib	-1	191022068520	4920
xz -T0 --block-size=256Mib	-2	187711750940	6894
xz -T0 --block-size=256Mib	-3	185588411972	9549
xz -T0 --block-size=256Mib	-4	182598003372	10621
xz -T0 --block-size=256Mib	-5	176417424516	14307
xz -T0 --block-size=256Mib	-6	173351829916	17861
xz -T0 --block-size=256Mib	-7	171529996532	18885
xz -T0 --block-size=256Mib	-8	169891017436	19755 # 17 GB
xz -T0 --block-size=256Mib	-9	168377795680	21081 # 22 GB

gzip		-1	241331331624	10174 # 1 поток
gzip		-2	236298641254	11021
gzip		-3	232535294972	12156
gzip		-4	226498783125	12948
gzip		-5	222046658847	15492
gzip		-6	219397430925	21181
не нужен

pigz 		-1	240923065504	1295
pigz		-2	235815103875	1288
pigz		-3	231965792333	1307
pigz		-4	226256170785	1326
pigz		-5	221851605957	1391
pigz		-6	219222675603	1684
pigz		-7	218080845512	2033
pigz		-8	216314902247	4422
pigz		-9	216029546935	7371
pigz		-11	в 30 раз дольше
не нужен

pigz -b 1024	-1	241077589987	1211 # 8 GB
pigz -b 1024	-2	236050234908	1210
не нужен

pigz -b 524288	-1	241104249029	1312 # 32 GB
pigz -b 524288	-2	236087861419	1329
pigz -b 524288	-3	232355253307	1272
pigz -b 524288	-4	226296635878	1215
pigz -b 524288	-5	221889008961	1278
pigz -b 524288	-6	219258262270	1552
pigz -b 524288	-7	218115030515	1998 # 33 GB
не нужен

pbzip2		-1	207379690831	4722
pbzip2		-2	203522871176	4968
pbzip2		-3	201412866040	5270
pbzip2		-4	200879774384	5481
pbzip2		-5	199801291242	5703
pbzip2		-6	199561112665	5825
pbzip2		-7	199175849931	6062
не нужен

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

Дедупликация - поиск повторяющихся данных и экономия места при их хранении. Может быть поблочной или пофайловой или побайтовой (внутрифайловая побайтовая дедупликация называется сжатием), на стороне клиента (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 (использует жёсткие ссылки) можно приспособить для файловой дедупликации (для архивной файловой системы без записи).

Согласно "D. Meyer and W. Bolosky. A study of practical deduplication" экономия пространства (875 файловых систем, 40TB, 200 млн файлов)

Исследования ошибок в дисковых подсистемах

Are Disks the Dominant Contributor for Storage Failures? A Comprehensive Study of Storage Subsystem Failure Characteristics Weihang Jiang, Chongfeng Hu, Yuanyuan Zhou, and Arkady Kanevsky. Работа основана на статистике работы 1.8 миллиона дисков (интерфейс к полке - FC, интерфейс к диску - SATA или FC) в течении 44 месяцев. Ошибки были сгруппированы по

Из интересного

An Analysis of Latent Sector Errors in Disk Drives Lakshmi N. Bairavasundaram† , Garth R. Goodson, Shankar Pasupathy, Jiri Schindler. Работа основана на статистике работы 1.5 миллиона дисков (интерфейс к полке - FC, интерфейс к диску - SATA или FC) в течении 32 месяцев. Из интересного

An Analysis of Data Corruption in the Storage Stack Lakshmi N. Bairavasundaram , Garth R. Goodson†, Bianca Schroeder Andrea C. Arpaci-Dusseau, Remzi H. Arpaci-Dusseau. Работа основана на статистике работы 1.5 миллиона дисков (интерфейс к полке - FC, интерфейс к диску - SATA или FC) в течении 41 месяцев. Из интересного

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

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

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 встроенных сервера).

Проблемы текущего файлового сервера в том, что в нём в одну кучу свалены холодные и горячие данные, в результате при сборке файлового сервера приходится ориентироваться в объёме на огромный объём холодных данных, а в скорости на требуемую скорость доступа к горячим данным. Предлагается насильно разделить горячие и холодные данные: горячие данные хранить на суперсервере в ОП, холодные данные хранить в архиве, на суперсервере только ссылки. Модули памяти с адекватной ценой имеют ёмкость 64ГБ ($370), 12 каналов по 2 модуля в двухсокетном сервере - 1.5TB. Варианты:

Каких характеристик можно добиться от файловой системы в памяти (стенд - 2 сокета, 8 контроллеров памяти по 3 модуля по 32 ГБ, 20 ядер, 768GB)?

Насколько холодные файлы нужно вытеснять за пределы 3ТБ? relatime не даст собрать правильную статистику. find_recently_used_all.sh (маленькие (32КиБ?) файлы не вытеснять). Экономия из 43.2ТБ при параметрах

Сравнение цен устройств хранения ля больших ящиков на 2020.06.06 (70р)

Ссылки

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

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



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