|
Bog BOS: hardware: Использование RAID контроллеров в Linux |
Последнее изменение файла: 2022.12.28
Скопировано с www.bog.pp.ru: 2023.09.22
В статье описываются технические возможности некоторых 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. Отзывается на кличку 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 (аналог 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 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
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 ;):
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.
Аналог (точнее прародитель) вебконсоли от Intel. Устанавливать не стал.
Мониторинг состояния 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
GAM (Global Array Manager) - "тяжёлый" пакет управления большим количеством контроллеров (агент, SNMP, сервер управления).
Power Console Plus не имеет версии под Linux (позволяет преобразовать RAID0 в RAID1 или RAID5 добавлением диска; позволяет преобразовать деградировавший RAID5 в оптимальный RAID0 с удалением диска; позволяет преобразовать RAID5 в RAID0; позволяет мониторить производительность; позволяет остановить диск; позволяет немедленно записать кеш на диск): клиент (позволяет мониторить зарегистрированные сервера), сервер (обеспечивает интерфейс с контроллером), сервер регистрации, SNMP агент (обеспечивает сетевой интерфейс), монитор.
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 (в девичестве BusLogic, потом IBM, ныне часть LSI Logic) AcceleRAID 170 на базе Intel 960RM (100 MHz) и QLogic ISP 10160A, плата PCI 2.2 (33 MHz, 32 бит, 5V), один канал Ultra 160 SCSI (внешний 68 Pin, внутренний 68 Pin), LVD, 80 MHz, 16 бит, глубина очереди - 16, контроллер имеет идентификатор 7. На дисках необходимо отключить терминаторы (кроме последнего активного терминатора в цепочке) и включить termination power. Контроллер имеет автоматический терминатор с распознаванием SE и LVD. 32 MB ECC DIMM на неиспользуемый из-за отстутствия батарейки кеш (можно увеличить до 128 MB). Индикация LED: Single Ended, LVD и сбой. Разъём под LED индикации несброшенного кеша. Поддерживает RAID 0, 1, 0+1 (Mylex RAID 6), 5, 10, 50 и JBOD (Mylex RAID 7), диски горячего резерва (standby, hot spare, при сбое диска данные перевычисляются и записываются на резервный диск, резервный диск переводится в состояние Online, сбойнувший диск вынимается, вставляется новый и помечается как резервный) и автоматическое восстановление массива (требуется SAF-TE, по умолчанию выключено). Фоновая инициализация. PCI Hot Plug (только замена; требуется поддержка со стороны материнской платы и ОС). Hot Swap: при отказе диска контроллер выдаёт предупреждение оператору, отказавший диск вынимается, вставляется заменяющий диск, оператор выдаёт команду перестроения массива (в EzAssist). Логический диск не более 2 ТБ. Не более 32 логических дисков. Поддержка SAF-TE (по SCSI) и SES. Возможность перемещать диски внутри контроллера. Поддержка SMART. Кеширование записи write-through (без кеширования) и write-back (с кешированием). Конфигурация массивов и настройка контроллера хранится в NVRAM и на дисках (COD), образующую массив группу дисков можно переносить на аналогичный контроллер. При ошибке чтения блока данные считываются с зеркала или перевычисляются с других дисков.
firmware 7.00-03 (имеется 7.02), BIOS 6.01-30, EzAssist 3.00-02 (утилита конфигурации в BIOS). Вызов утилиты настройки BIOS при загрузке - Alt-M (отключение BIOS - BIOS требуется для загрузки с диска или CD-ROM, подключённого к контроллеру; разрешить загрузку с CD-ROM, подключённого к контроллеру; геометрия диска 2 GB (128/32) или 8 GB (255/63) - при изменении требуется форматирование файловой системы, загрузочный раздел должен находиться в первых 2 или 8 GB; для больших дисков необходимо поставить 8 GB, иначе могут быть проблемы). Вызов утилиты конфигурирования массива (RAID EzAssist) при загрузке - Alt-R. Настройка параметров контроллера (TAB, +, -, пробел): автоматическое восстановление массива (отслеживает удаление неисправного диска и вставку нового, требуется SAF-TE); выделяемая на восстановление или расширение (MORE) доля пропускной способности (50); инициализация в фоновом режиме (включено) и доля пропускной способности на него (50); доля пропускной способности на проверку (50); округление (coercion) размера физического диска (запрещено); параметры постепенного запуска дисков; регулярное тестовое чтение данных и интервал (patrol read, выключено); SMART (IEC, PFA; выключено). 3 метода конфигурации массива (Drive Groups, Packs): автоматическая (один логический диск из всех физических), с помощью проводника, ручная. Состояния физического диска: READY (работоспособен, но незадействован), ONLINE, STANDBY (горячий резерв), OFFLINE (добавлен в массив вместо вышедшего из строя, но ещё не синхронизирован), REBUILD (в процессе восстановления). Состояние дисков хранится в NVRAM. Физические диски объединяются в массив. Из массива можно сделать один или несколько логических дисков. К массиву (не JBOD, RAID 10, 30 или 50) можно добавить новый диск, но на нём придётся сделать новый логический диск. Можно добавить диск горячего резерва для конкретного массива или в общий пул или убрать его из пула. Можно делать логический диск из нескольких массивов (spanning, в массивах должно быть одинаковое число дисков; RAID 10, 50; необходимо озаботиться до создания первого массива; к связанным массивам нельзя добавлять диски). Состояния логического (системного) диска: ONLINE, CRITICAL (отказ одного диска), OFFLINE (отказ 2 дисков). EzAssist позволяет обновить с гибкого диска firmware, BIOS и сам EzAssist (FAT-12, без поддиректорий, имя файла запрашивается, при вводе необходимо указывать "A:\", автораспознавание содержимого), сохранить в файл и восстановить конфигурацию контроллера и массива, очистить конфигурацию и вывести её в файл в читаемом виде. Мониторинг и управление: статус массива и информация о нём (свободное место, физические диски); статус логического диска и информация о нём (уровень RAID, объём, физические диски (можно поморгать лампочками), тип кеширования записи (можно изменить), размер страйпа (можно изменить, данные теряются), размер строки кеша); список ошибок логического диска; запустить фоновую задачу для логического диска: проверка состояния (сравнение данных на зеркале или сравнение контрольных сумм, с исправлением или без), пересчёт контрольных сумм, инициализация логического диска; прервать фоновую задачу; посмотреть состояние фоновых задач. Для физического диска можно посмотреть статус и информацию (изготовитель, модель, версия прошивки, объём, канал и идентификатор, кеширование чтения (можно изменить), кеширование записи (можно изменить)), получить список плохих блоков (первичный и дополнительный), посмотреть и обнулить счётчики ошибок (чётности, исправляемых, фатальных; в моём экземпляре вместо кнопки "Reset" оказалась кнопка "Ok", которая не обнуляет счётчики), поморгать лампочками, запустить фоновую задачу восстановления массива (пересчёт данных и запись их на физический диск, находящийся в состоянии Offline; необходимо прервать, чтобы перезагрузиться - почему тогда задача называется фоновой?), запустить фоновую задачу низкоуровневого форматирования (эту задачу прервать нельзя), перевести диск из Online в Offline, перевести диск из Offline в Online (рекомендуется задуматься о последствиях и отказаться от неразумного желания), посмотреть SCSI настройки: скорость, глубина очереди заданий (можно изменить), ширина шины, сканировать SCSI шину в поисках новых устройств. В реальности никаких фоновых задач нет - задачу необходимо остановить перед перезагрузкой.
Модуль ядра 2.4 и 2.6 DAC960 (описание - README.DAC960; DAC - Disk Array Controller). Поддерживает eXtremeRAID 1100/2000/3000, AcceleRAID 352/170/160, AcceleRAID 250/200/150, DAC960PJ, DAC960PG, DAC960PU, DAC960PD, DAC960PL, DAC960P. Имена дисков выглядят как /dev/rd/c0d0p1 (SCSI подсистема не используется, НМЛ и CD-ROM не поддерживаются), имена дисков не меняются при сбое диска с меньшим номером. Блочное устройство имеет major 48 для первого контроллера (55 для восьмого), minor состоит из 5 старших бит для номера логического диска и 3 младших бит для номера раздела (т.е. не более 7 разделов на логический диск, расширенный раздел тоже надо учитывать). Файл /proc/rd/status содержит краткую информацию о состоянии массива (OK, ALERT). Обновляется каждые 10 секунд. Файл /proc/rd/c0/current_status содержит информацию о физических дисках (канал, идентификатор, изготовитель, модель, серийный номер, интерфейс, состояние, объём), настройках контроллера (тип, версия прошивки, количество каналов, объём кеша, размер очереди команд контроллера и драйвера, наличие SAF-TE) и логических дисков (имя устройства, состояние, объём, размер полоски, длина строки кеша, кеширование чтения, кеширование записи), текущих фоновых заданиях. Обновляется каждые 60 секунд. Изменения состояния записываются в syslog (подсистема kern, сообщения начинаются со строки 'DAC960#'). Также в syslog выдаются сообщения о проблемах с дисками (включая "мягкие" ошибки чтения). При загрузке сообщения об обнаруженных физических и логических дисках и их состоянии записывается в /var/log/dmesg. Файл /proc/rd/c0/initial_status содержит аналогичную информацию на момент загрузки. Файл /proc/rd/c0/user_command позволяет передавать команды контроллеру и считывать результат их выполнения (записывается также в syslog):
fdisk, grub и lilo умеют работать с DAC960. RH9 и Centos 4 ставятся на раздел логического диска, подключённого к контроллеру типа DAC960. Рекомендуется создавать файловую систему ext3fs с параметрами "mke2fs -b 4096 -R stride=16" (при стандартном размеры полоски 64 KB).
Имеется gam сервер под Linux (Global Array Manager, 5.00-17 от 2002-11-15, не пробовал, требуется wine?!). nvram.exe - утилита (DOS 16-bit) для доступа к журналу событий в NVRAM.
Материнская плата Intel D865PERL, Pentium 3000 cache: disable, RAM: 512 MB ---Sequential Output (nosync)--- ---Sequential Input-- --Rnd Seek- -Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --04k (03)- Machine MB K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU /sec %CPU t03 1*2000 14435 36.7 13931 6.6 10672 3.7 22210 44.6 42235 6.4 307.0 1.0 cache: disable, RAM: 1 GB ---Sequential Output (nosync)--- ---Sequential Input-- --Rnd Seek- -Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --04k (03)- Machine MB K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU /sec %CPU t03 2*2000 13443 34.3 14106 6.7 10606 3.6 23517 47.1 42803 6.4 239.2 1.0 cache: Write-Back, RAM: 1 GB ---Sequential Output (nosync)--- ---Sequential Input-- --Rnd Seek- -Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --04k (03)- Machine MB K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU /sec %CPU t03 2*2000 18637 48.2 18455 9.3 12742 4.3 22698 45.2 42479 6.3 248.9 1.1
HP Smart Array P400 (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" при использовании последовательного порта, глотаются символы при вводе). Интерфейс в виде меню или командный режим. При работе в командном режиме необычно расположение команды и параметров:
CLI> controller 1 show Controller: HP Smart Array P400i, slot 0 Direct-Attached Storage CLI> controller 2 show Controller: HP Smart Array P400i, slot 0 External Array Controller 1
Logical Drive # 1, RAID 1+0, 136.7 GB, Status OK Physical Drive # 1, Port 1I, Box 1, Bay 1, 146.8GB SAS Drive OK , Data Physical Drive # 2, Port 1I, Box 1, Bay 2, 146.8GB SAS Drive OK , Data
Physical Drive # 1, Port 1I, Box 1, Bay 1, 146.8GB SAS Drive OK , Data
Драйвера и утилиты собраны на диске 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 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 9266-8i C1 (LSI00295, LSI00296) из серии MegaRAID Value Line (есть более дорогая серия Feature Line и боле дешёвая Entry Line). Системный интерфейс: PCI Express 2.0 x8 (32 Gbps), совместим с PCI Express 1.1, вставляется в x16. Низкопрофильная (MD2, 6.6" x 2.536"). Содержит собственный ROC (Raid On Chip) процессор MegaRAID SAS 2208 Dual Core (Thunderbolt, 2 x 800 MHz PowerPC, предположительно 450 Kiops) и память под кеш (1GB, 1333 MHz, ECC DDR3, 10.7 GBps). Совместим с архитектурой Fusion-MPT. Поддерживает 8 портов SAS 2.1 (SSP) или SATA (SATA I, SATA II, SATA III) 6 Gbps (2 внутренних разъёма mini-SAS SFF-8087 x4, монтаж сбоку, 48 Gbps, порт 0 сверху), к которым можно подключить (через экспандеры, протоколы SMP для управления и STP для SATA) до 128 устройств (до 16 корзин, до 2 корзин (SEP) на порт, до 15 устройств на порт, включая SEP и экспандеры). Интерфейс корзиной осуществляется через SFF-8485 (SGPIO), встроенный в mini-SAS и mini-SAS HD. Имеется поддержка широких портов. STP (SATA устройства за экспандером) ограничен скоростью 3 Gbps (в другом месте написано 6 Gbps и это правда). Большее количество портов на старших моделях обеспечивается встроенными экспандерами (кроме 9361-16i и 9361-24i). Устройства SATA SSD должны поддерживать набор команд ATA-8 ACS. Не поддерживается команда TRIM (LSI 3ware and MegaRAID controllers do not support TRIM, LSI SAS HBAs with IR firmware do not support TRIM) ("Sense Key : Illegal Request [current]; Add. Sense: Invalid field in parameter list") и scterc (SCT (Get) Error Recovery Control, TLER). Варианты:
Данный бизнес был куплен как часть LSI Corporation компанией Avago, затем Avago купила Emulex и Broadcom Corporation и переименовалась в Broadcom Limited,
В списке совместимости SuperMicro SAS2-216EB и SAS2-216EL2 (экспандер от LSI, fw 206) Поддержка UEFI 2.0 (driver configuration protocol и driver diagnostic protocol). Хранение конфигурации на диске в соответствии со стандартом DDF. Управление корзиной с помощью SES или SGPIO (корзины нумеруются не с нуля, например, с 12; "Zero Based Enclosure Enumeration = No").
В линейке 93xx контроллер можно перевести (storcli, требуется перезагрузка) в режим JBOD (аналог IT HBA) - только RAID-0, RAID-1, RAID-10, зато Passthrough, метаданные (DDF) не пишутся на диск (кроме поддерживаемых RAID).
Соединители: с модулем управления дисковой полкой (2 штуки, 3-pin, I2C?), с локальной батарейкой LSIiBBU09, с удалённой батарейкой LSIiBBU09, с CVFM02, 2 порта SFF-8087, с аппаратным ключом для "продвинутых" опций (3-pin). Джамперы: использовать ли BIOS (SBR bypass). Индикаторные разъёмы: с 8 индикаторами ошибки для каждого из 8 портов, с индикатором активности, с индикатором загруженного кеша, индикатор активности (Drive), индикатор ошибки (Global). Поддерживает протокол SAF-TE (интерфейс I2C с процессором SEP стойки) и SMART (диски нумеруются не с нуля и не подряд).
До 1008 (в другом месте 255) команд параллельно, scatter/gathers до 60 (80 для 93xx), максимальный размер передачи - 8192 сектора (до 42 полосок; 6.4MiB для 93xx). До 32 физических устройств на группу устройств, до 128 групп устройств и до 64 логических устройств (virtual drive) на контроллер (до 64 TB на LUN, увеличено в новых версиях), до 16 логических устройств на группу устройств. Размер полоски (strip) - от 8 КиБ (от 64 КиБ в новых версиях) до 1 МиБ. Обеспечивает RAID уровней 0 (до 32 дисков), RAID-1 (чётное число дисков от 2 до 32, параллельное чтение не заявлено), RAID-5 (от 3 до 32 дисков), RAID-6 (от 4 до 32 дисков), RAID-00 (RAID-0 из групп дисков типа RAID-0; от 2 до 256 дисков), RAID-10 (RAID 1+0, RAID-0 из групп дисков (до 8 групп, чётное число дисков от 2 до 32 в группе), собранных в RAID-1; размер stripe (strp*число-дисков-данных) д.б. одинаков), RAID-50 (RAID-0 из дисков, собранных в RAID-5, размер stripe (strp*число-дисков-данных) д.б. одинаков) и RAID-60 (RAID-0 из дисков, собранных в RAID-6, размер stripe (strp*число-дисков-данных) д.б. одинаков).
Независимые диски конфигурируются как RAID-0 или RAID-00 (в другом месте говорится про JBOD без метаданных и это правда).
Можно делать смешанные логические устройства из SAS и SATA дисков, но не из SSD (диски и SSD тоже нельзя смешивать). Описание вариантов смешивания - мутное. Начиная с версии ? можно смешивать всё, но изготовитель сильно не советует. Можно смешивать устройства с секторами 512n и 512e, но нельзя смешивать устройства с секторами 4Kn и 512n/e.
Возможность расширения находящегося в оптимальном состоянии логического диска и миграции между уровнями RAID без остановки работы (добавление 17-го диска - SAS, 900GB и 10k rpm - в RAID-6 заняло 52 часа, после чего инициализация массива ещё 6 часов, всё это время данные беззащитны, а скорость доступа упала в десятки раз; 24-го диска - предположительно займёт 70 часов; добавление 3 дисков к 12 - SAS, 1800GB и 10k rpm, RAID-6 - 97 часов, после чего инициализация массива ещё 23 часа; добавление 1 диска к 9 - SAS, 900GB и 10k rpm, RAID-6 - 27 часов, после чего инициализация массива ещё 5 часов; добавление 2 дисков к 13 - SATA, 500GB и 7200, RAID-6 - 42 часа, после чего инициализация массива ещё 7 часов); при реконструкции на всех логических дисках контроллера отключается кеширование записи.
Возможность задержки раскручивания дисков (интервал между парами дисков).
Диски горячей замены позволяют автоматически и без остановки работы заменять неисправные диски с помощью перестроения (восстановления избыточности, rebuild) группы дисков (автоматическое продолжение восстановления после перезагрузки (однако команда "init full" прерывается), возможность заранее задать долю - 30% - доступа к дискам для операций восстановления). Восстановление после сбоя 2 дисков RAID-6 происходит по очереди. Диски горячей замены можно привязывать к дисковой полке и/или к группе дисков. При отсутствии подходящего диска горячей замены необходимо извлечь сбойнувший диск и вставить новый. Возможно автоматическое назначение неиспользуемого диска в качестве диска горячей замены (то-то будет сюрприз при случайной вставке диска с ценными данными!).
Поддержка нескольких путей доступа к устройствам (multipath) в пределах контроллера, в т.ч. и к SATA, Обещана балансировка загрузки путей для SAS устройств (2 пути вижу, а скорость не прибавилась), автоматическое распознавание экспандеров (ESM, enclosure modules) в одной корзине, обнаружение путей, использование запасных путей, замена одного из ESN без остановки работы. Утилита storcli (и MSM) показывает только 1 ESN из пары, но демонстрирует наличие запасных путей. В режиме JBOD каждый путь к устройству (только SAS) представляется как устройство, сервер должен обрабатывать multipath (MPIO) и балансировать нагрузку самостоятельно.
Возможно автоматическое копирование данных с SSD с плохими данными SMART на запасное устройство (SSD Guard).
Автоматическая остановка несконфигурированных дисков, дисков горячей замены и неиспользуемых логических дисков (Dimmer Switch).
Проверка соответствия данных и чётности по расписанию (необходимо установить время на контроллере) и вручную (без нагрузки на массив: RAID6 - 240 минут, RAID1- 200 минут; 24 диска SAS 10000rpm 900GB; при полной нагрузке на массив: RAID6 - 300 часов, влияние на нагрузку минимальное - 10%; RAID6 из 18 дисков SAS 4TB 7200rpm - 20 часов независимо от ccrate), расхождения исправляются (RAID6). Патрульное чтение дисков (без нагрузки на массив, все диски одновременно - 2 часа; при полной нагрузке время патрульного чтения стремится в бесконечность, влияние на нагрузку минимальное - 20%). Если при восстановлении происходят ошибки чтения, то блокируется соответствующая область на восстанавливаемых устройствах (Punctured Block Entries), последующие чтения всегда будут возвращать ошибку до очистки (полной инициализации).
Имеется функция замены диска (replace, копирование данных и изменение конфигурации) без остановки работы в ручном и автоматическом (по SMART) режиме.
Только фоновая инициализация логических дисков (запускается автоматически через 5 минут после создания для RAID-5 из 5 дисков и RAID-6 из 7 дисков), повторная инициализация с теми же параметрами не портит данные. Фоновые операции (инициализация, восстановление, проверка) могут быть приостановлены и продолжены в любое время. Чтобы изменить скорость необходимо остановить операцию и запустить её заново. по непонятным причинам фоновая инициализация (RAID6 из 24 диска SAS 10000rpm 900GB) длится от 2 часов до суток; инициализация RAID-6 из 18 дисков SATA 2TB 7200rpm - более 5 суток при 100% доле).
Снимки (snapshot) от LSI называются "MegaRAID recovery".
Возможна перестановка местами дисков, подключённых к одному контроллеру (требуется отключать питание). Возможна перестановка группы дисков на другой контроллер (требуется сохранять порядок дисков (?!), импортирование не работает при заполненном кеше контроллера, экспортирования или деактивания группы дисков нет, поэтому требуется выключить сервер перед выемкой дисков (перед этим деактивировать LV и экспортировать VG!)). При очистке конфигурации (предлагалось во время импортирования конфигурации с неосвобождённым кешем) и последующем созданием точно такой же данные сохранились. Возможен импорт группы дисков с контроллеров типа IR (Integrated RAID), если использовался формат метаданных LDF (LSI Data Format) размером 512 MB (группа дисков с метаданными LDF 64MB будет испорчена).
Интерфейс управления: MegaRAID Management Suite, MegaRAID Storage Manager (MSM, установить или обновить пакеты Lib_Utils (libsysfs) и Lib_Utils2 (Pegasus), множество 32-битных библиотек, затем пакет MegaRAID_Storage_Manager; после этого у вас появляются сервисы login и logoff (хорошо хоть не reboot, как у Intel ;), дополнения к /etc/X11/xinit/xinitrc.d, ещё одно старое JRE, скрипт msm_profile в /etc/init.d вместо /etc/sysconfig и прочие радости; перед запуском необходимо выключить SELinux, сетевой экран и настроить маршруты multicast; сервис vivaldiframework, сервис ls_mrdsnmpd (SNMP интерфейс); в общем, не стоит "разворачивать" это без надобности), WebBIOS Configuration Utility (^H при загрузке, отключение OPROM в BIOS значительно ускоряет загрузку), MegaCLI (MegaCli64), StorCLI, интерфейс к SNMP, интерфейс SMIS.
Прошивки:
Установка новой прошивки с помощью storcli (старые прошивки не распознают ResetNow, поэтому после установки требуется перезагрузка с выключением питания ("storcli /c0 restart"?), длительная инициализация при загрузке, прерывается фоновая инициализация - надо сразу запустить CC):
/opt/MegaRAID/storcli/storcli64 /c0 download file=mr2208fw.rom ResetNow # mr3316fw.rom
Установка новой прошивки CacheVault (Gas Gauge) до обновления прошивки контроллера с помощью storcli (TFM для 9266-8i, модуль CVPM02 версии 25849-01 требует обновления до 70-25849-04), предварительно обновить прошивку минимум до MR 5.12 (пакет 23.32.0-0009, 3.450.55-4187) и storcli до 1.14.12:
/opt/MegaRAID/storcli/storcli64 /c0/cv show all # Module Version 25849-01 /opt/MegaRAID/storcli/storcli64 /c0 download file=TFM_70-25849-04.rom fwtype=2 resetnow
При обновлении с MegaRAID 6.6 к 6.7 в VPD поменяли LSI на Broadcom, так что вернуться обратно будет непросто.
Для включения кеширования записи необходимо докупить модуль сброса кеша на флешку LSICVM01 (CacheVault, LSI00297) или LSICVM02 для 93cxx, включающий флеш (CVFM02, USB флешка; или CVFM04 для 93xx), суперконденсатор (CVPM02, LSI 49571-01, 283 J, 9.4V, есть датчик температуры и заряда, очень быстрая зарядка, хранение данных много лет, необязательно мониторить и регулярно менять, не нагревать выше 55, потребляет 6 Вт при зарядке) и переходной кабель (6-pin разного размера с обоих концов), или батарейный модуль LSIBBU09 (LiON, достаточно для 48 часов, может работать при температуре до 45 градусов). CVPM нельзя подключать на ходу. При восстановлении питания содержимое кеша из флеша или памяти записывается на диск, имеется интерфейс для подключения индикатора наличия незаписанных данных в кеше (нет в 9361-16i). Если при загрузке обнаруживаются данные в кеше, которые некуда восстановить (дисков от нужных логических томов нет или они были обновлены "на стороне"), то в модуле BIOS появляется строка меню для очистки кеша. При заполненном кеше некоторые функции недоступны, например, импорт конфигурации с вновь вставленных дисков (foreign), зато предлагается очистить постороннюю конфигурацию. Надо отказаться, очистить кеш, затем импортировать конфигурацию. CVFM0x можно перемещать на аналогичный контроллер с аналогичными (?) настройками. Не помогает при пропадании питания при включённом кешировании на самих дисках, так что кеш устройств необходимо выключить. Интересно, что происходит с кешем при зависании ОС и сбросе без выключения питания?
Имеет собственный звучок (включается при переходе одного из массивов в состояние Fail; отключается утилитами или в BIOS для текущего события или навсегда; примерное описание: равномерные гудки - деградация, длинные - отказ, короткие - задействован резервный диск).
Дополнительно можно закупить ПО ускорения работы с SSD FastPath (программная лицензия LSI00266 или аппаратный ключ LSI00289, доступен бесплатно с какого-то момента: для виртуального диска включить набор Write Thru, Direct IO, No Read Ahead, Disk Cache Policy Disabled, Strip Size 64K) и/или ПО кеширования доступа к массивам на SSD CacheCade Pro 2.0 (программная лицензия LSI00293 или аппаратный ключ LSI00290). Максимальный поддерживаемый объём SSD - 512 ГБ на контроллер. Для использования в комплекте с CacheCade Pro 2.0 предлагался LSI Nytro WarpDrive (SLC: 200 или 400 ГБ, MLC: 400, 800 или 1600 ГБ) или LSI Nytro MegaRAID (одна плата, совмещающая LSI 9266-4i с Nytro WarpDrive; SLC: 100 ГБ, eMLC: 200 или 800 ГБ) или LSI Nytro XD (MLC 400 ГБ в комплекте с ПО). Имеется утилита LSI Nytro Predictor для оценки выигрыша в производительности. Отдельно от ПО Cache Cade продавался SSD WarpDrive (SLC 300GB). Ключ активации можно перемещать между контроллерами (re-host).
SafeStore - локальное управление ключами шифрования виртуальных дисков, необходимо использовать устройства с самошифрованием (SED), при загрузке может запрашиваться пароль хранилища ключей (Authenticated Mode). Утрата ключей обеспечивает очень быстрый способ стирания данных, так что необходимо озаботиться резервным хранением ключей.
Поддержка горячей замены дисков (должна быть поддержка в самих дисках и корзине). Обеспечивается автоматическое восстановление при наличии запасных дисков (hot disk, hot spare). Если запасной диск имеет больший размер, то свободное место использовать не получится. Запасной диск можно добавить позднее (в общий пул или выделенный). При вставке нового чистого диска в корзину он автоматически становится запасным (и форматируется при необходимости). При сбое одного диска (состояние массива "Degradated") необходимо отключить его, вынуть неисправный диск, вставить новый, добавить его к массиву. При сбое 2 дисков в RAID-6 их восстановление производится по очереди. Восстановление как первого, так и второго диска RAID-6 без нагрузки произсходит очень быстро (2 часа для SAS диска 900GB 10000rpm), под полной нагрузкой - очень медленно (более 2 суток для SAS диска 900GB 10000rpm). Возможно автоматическое продолжение создания или восстановления массива после перезагрузки, необходимо указать при создании FlexRAID PowerFail в BIOS. Возможно указание долей пропускной способности, расходуемых на восстановление и проверку массива (создание массива RAID-5 в действительности есть непрерываемый режим проверки). При нахождении различия данные считаются правильными, а контрольная сумма перевычисляется, если при чтении произошла ошибка ввода, то данные перевычисляются из контрольной суммы, а блок переназначается на резервную дорожку. Рекомендуется периодически (раз в месяц) делать проверку массива, т.к. если "плохой" блок "проявится" при восстановлении, то данные будут потеряны. Возможно предупреждающая замена "подозрительных" дисков (replace) с копированием данных.
При настройке физические диски объединяются в группы дисков. Из группы дисков или нескольких групп дисков (до 8, span, упряжка) нарезаются виртуальные диски (логические устройства с точки зрения ОС). Данные нарезаются на полоски, которые распределяются по дискам (strip size - размер полоски на одном диске, stripe width - число дисков в группе, stripe size - сумма размеров полосок данных "на одном обороте"). Логический диск после создания должен быть проинициализирован, происходит в фоновом режиме, запускается автоматически при достаточном количестве дисков (5 для RAID-5, 7 для RAID-6).
Настройка во время загрузки в графическом режиме - ^H (дополнительные функции - отключение BIOS, требуется при загрузке не с массива; округление размера дисков вниз (coercion) - требуется для последующей беспроблемной замены диска; отключение восстановления данных при проверке; остановка при ошибке в конфигурации; выбор конфигурации при расхождении между версиями в NVRAM и на диске; задержка раскрутки; отключение автовосстановления). Для работы USB мышки требуется включить эмуляцию порта 60/64. Все настроечные данные хранятся на диске (COD) в формате DDF и в NVRAM (настройка контроллера BIOS Config Auto Selection позволяет выбирать тип поведения при их несовпадении). Это позволяет перемещать (roaming) диск внутри контроллера (при отключении питания), перестроение массива начнётся с начала. Чтобы переместить (migration) массив целиком на новый контроллер (того же типа), необходимо предварительно очистить конфигурацию нового контролера, диски необходимо подключать в те же самые позиции, что и на сгоревшем контроллере. Если в кеше записи остались данные, а батарейный модуль не типа TBBU, то они при смене контроллера будут потеряны. Реконфигурацию массива (добавление диска, смена типа RAID) нельзя прерывать и перезагружаться, после вынимания диска на ходу массив остался в состоянии миграции, сделать с ни ничего не смог.
Кеширование записи: write back (контроллер рапортует о завершении записи сразу после записи в кеш), write through (контроллер рапортует о завершении записи после передачи на диск). Кеширование записи можно включать только при наличии батарейки (см. выше). Кеширование записи дисков необходимо выключить. Тип предваряющего чтения: включено, выключено (раньше был адаптивный режим - удалили). Политика ввода/вывода: с использованием кеша (все читаемые и записываемые данные попадают в кеш), прямой ввод-вывод (читаемые данные не попадают в кеш, предварительно читаемые данные попадают в кеш, записываемые данные попадают в кеш в режиме writeback). Изготовитель рекомендует прямой ввод-вывод без предварительного чтения (и похоже знает, что говорит).
Возможные состояния физического диска:
Возможные состояния виртуального диска:
Заявлена поддержка RHEL5 и RHEL6 (модуль megaraid_sas.ko, параметры max_sectors - не получается задать более 280 KiB (/sys/block/sda/queue/max_sectors_kb) - и msix_disable). Управление megacli и StorCLI.
Сообщения ядра (FUA отсутствует, несмотря на обновление прошивки): megasas: 06.504.01.00-rh1 Mon. Oct. 8 17:00:00 PDT 2012 megasas: 0x1000:0x005b:0x1000:0x9266: bus 2:slot 0:func 0 megaraid_sas 0000:02:00.0: PCI INT A -> GSI 32 (level, low) -> IRQ 32 megaraid_sas 0000:02:00.0: setting latency timer to 64 megasas: Waiting for FW to come to ready state megasas: FW now in Ready state alloc irq_desc for 89 on node 0 alloc kstat_irqs on node 0 alloc irq_2_iommu on node 0 megaraid_sas 0000:02:00.0: irq 89 for MSI/MSI-X ... 90,91,92,93,94,95,96,97,98,99,100,101,102,103,104 - 16 прерываний megasas:IOC Init cmd success megasas: INIT adapter done scsi0 : LSI SAS based MegaRAID driver scsi 0:0:0:0: Direct-Access LSI MR9266-8i 3.27 PQ: 0 ANSI: 5 scsi 0:0:12:0: Enclosure LSI CORP SAS2X36 0717 PQ: 0 ANSI: 5 scsi 0:0:15:0: Enclosure LSI CORP SAS2X36 0717 PQ: 0 ANSI: 5 scsi 0:2:0:0: Direct-Access LSI MR9266-8i 3.27 PQ: 0 ANSI: 5 sd 0:2:0:0: [sda] 38655885312 512-byte logical blocks: (19.7 TB/18.0 TiB) sd 0:2:0:0: [sda] Write Protect is off sd 0:2:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA sda: unknown partition table sd 0:2:0:0: [sda] Attached SCSI disk sd 1:2:0:0: [sda] 4096-byte physical blocks /proc/scsi/scsi Host: scsi0 Channel: 00 Id: 12 Lun: 00 Vendor: LSI CORP Model: SAS2X36 Rev: 0717 Type: Enclosure ANSI SCSI revision: 05 Host: scsi0 Channel: 00 Id: 15 Lun: 00 Vendor: LSI CORP Model: SAS2X36 Rev: 0717 Type: Enclosure ANSI SCSI revision: 05 Host: scsi0 Channel: 02 Id: 00 Lun: 00 Vendor: LSI Model: MR9266-8i Rev: 3.16 Type: Direct-Access ANSI SCSI revision: 05
Совместим с SES, включая загрузку прошивки. Информация о составе:
sg_ses --page=1 /dev/sg0 LSI CORP SAS2X36 0717 enclosure services device Configuration diagnostic page: number of secondary subenclosures: 0 generation code: 0x0 enclosure descriptor list Subenclosure identifier: 0 relative ES process id: 1, number of ES processes: 1 number of type descriptor headers: 11 logical identifier (hex): 50030480015a967f vendor: LSI CORP product: SAS2X36 rev: 0717 vendor-specific data: 00 11 22 33 44 55 00 00 00 ."3DU... type descriptor header/text list Element type: Array device, subenclosure id: 0 number of possible elements: 24 text: Drive Slots Element type: Temperature sense, subenclosure id: 0 number of possible elements: 1 text: Temperature Sensors Element type: Cooling, subenclosure id: 0 number of possible elements: 3 text: Fans Element type: Audible alarm, subenclosure id: 0 number of possible elements: 1 text: Buzzers Element type: Voltage sensor, subenclosure id: 0 number of possible elements: 2 text: Voltage Sensors Element type: Current sensor, subenclosure id: 0 number of possible elements: 2 text: Current Sensors Element type: Power supply, subenclosure id: 0 number of possible elements: 2 text: Power Supplies Element type: Enclosure, subenclosure id: 0 number of possible elements: 1 text: Enclosure Element type: SAS expander, subenclosure id: 0 number of possible elements: 2 text: SAS Expanders Element type: SAS connector, subenclosure id: 0 number of possible elements: 30 text: SAS Connectors Element type: Communication port, subenclosure id: 0 number of possible elements: 2 text: Ethernet ports
Состояние:
sg_ses --page=2 /dev/sg0 LSI CORP SAS2X36 0717 enclosure services device Enclosure status diagnostic page: INVOP=0, INFO=1, NON-CRIT=0, CRIT=0, UNRECOV=0 generation code: 0x0 status descriptor list Element type: Array device, subenclosure id: 0 Overall status: Predicted failure=0, Disabled=0, Swap=0, status: Unsupported ... Individual element 1 status: Predicted failure=0, Disabled=0, Swap=0, status: OK OK=0, Reserved device=0, Hot spare=0, Cons check=0 In crit array=0, In failed array=0, Rebuild/remap=0, R/R abort=0 App client bypass A=0, Don't remove=0, Enc bypass A=0, Enc bypass B=0 Ready to insert=0, RMV=0, Ident=0, Report=0 App client bypass B=0, Fault sensed=0, Fault reqstd=0, Device off=0 Bypassed A=0, Bypassed B=0, Dev bypassed A=0, Dev bypassed B=0 ... все 24 диска ... Element type: Temperature sense, subenclosure id: 0 Individual element 1 status: Predicted failure=0, Disabled=0, Swap=0, status: OK Ident=0, Fail=0, OT failure=0, OT warning=0, UT failure=0 UT warning=0 Temperature=29 C Element type: Cooling, subenclosure id: 0 Individual element 1 status: Predicted failure=0, Disabled=0, Swap=0, status: Unknown Ident=0, Hot swap=0, Fail=0, Requested on=0, Off=0 Actual speed=0 rpm, Fan stopped ... и якобы все выключены ... Element type: Audible alarm, subenclosure id: 0 Element type: Voltage sensor, subenclosure id: 0 Individual element 1 status: Predicted failure=0, Disabled=0, Swap=0, status: OK Ident=0, Fail=0, Warn Over=0, Warn Under=0, Crit Over=0 Crit Under=0 Voltage: 4.93 volts Individual element 2 status: Predicted failure=0, Disabled=0, Swap=0, status: OK Ident=0, Fail=0, Warn Over=0, Warn Under=0, Crit Over=0 Crit Under=0 Voltage: 11.83 volts Element type: Current sensor, subenclosure id: 0 Individual element 1 status: Predicted failure=0, Disabled=0, Swap=0, status: OK Ident=0, Fail=0, Warn Over=0, Crit Over=0 Current: 22.54 amps Individual element 2 status: Predicted failure=0, Disabled=0, Swap=0, status: OK Ident=0, Fail=0, Warn Over=0, Crit Over=0 Current: 1.45 amps Element type: Power supply, subenclosure id: 0 Individual element 1 status: Predicted failure=0, Disabled=0, Swap=0, status: Not installed Ident=0, DC overvoltage=0, DC undervoltage=0, DC overcurrent=0 Hot swap=0, Fail=0, Requested on=0, Off=0, Overtmp fail=0 Temperature warn=0, AC fail=0, DC fail=0 ... Element type: Enclosure, subenclosure id: 0 Individual element 1 status: Predicted failure=0, Disabled=0, Swap=0, status: OK Ident=0, Time until power cycle=0, Failure indication=0 Warning indication=0, Requested power off duration=0 Failure requested=0, Warning requested=0 Element type: SAS expander, subenclosure id: 0 Individual element 1 status: Predicted failure=0, Disabled=0, Swap=0, status: OK Ident=0, Fail=0 ... Element type: SAS connector, subenclosure id: 0 Individual element 1 status: Predicted failure=0, Disabled=0, Swap=0, status: OK Ident=0, Mini SAS 4i receptacle (SFF-8087) [max 4 phys], Connector physical link=0xff Fail=0 ... 6 штук Individual element 7 status: Predicted failure=0, Disabled=0, Swap=0, status: OK Ident=0, SAS Drive backplane receptacle (SFF-8482) [max 2 phys], Connector physical link=0x0 Fail=0 ... 24 штуки
Дополнительная информация (слоты и адреса):
sg_ses --page=0xa /dev/sg0 Additional element status diagnostic page: generation code: 0x0 additional element status descriptor list Element type: Array device, subenclosure id: 0 element index: 0 [0x0] Transport protocol: SAS number of phys: 1, not all phys: 0, bay number: 0 phy index: 0 device type: end device initiator port for: target port for: SSP attached SAS address: 0x500304800163d4ff SAS address: 0x5000cca016212fe2 phy identifier: 0x1 ...
smartctl умеет получать информацию об отдельных дисках с помощью ключа "-d megaraid,номер" (диски нумеруются не с нуля! при замене диска номер изменяется!)
smartctl -a -d megaraid,8 /dev/sda Vendor: WD Product: WD9001BKHG-02D22 Revision: SR03 User Capacity: 900,185,481,216 bytes [900 GB] Logical block size: 512 bytes Logical Unit id: 0x50014ee7aaadd8f0 Serial number: WXL1E32HSEPM Device type: disk Transport protocol: SAS Local Time is: Wed Sep 4 21:31:39 2013 MSK Device supports SMART and is Enabled Temperature Warning Enabled SMART Health Status: OK Current Drive Temperature: 26 C Drive Trip Temperature: 69 C Manufactured in week 01 of year 2010 Specified cycle count over device lifetime: 1048576 Accumulated start-stop cycles: 47 Specified load-unload count over device lifetime: 1114112 Accumulated load-unload cycles: 0 Elements in grown defect list: 0 Error counter log: Errors Corrected by Total Correction Gigabytes Total ECC rereads/ errors algorithm processed uncorrected fast | delayed rewrites corrected invocations [10^9 bytes] errors read: 122820 428 466 123248 428 106471.048 0 write: 620 4753 0 5373 4753 48017.563 0 verify: 62 2 2 64 2 19.126 0 Non-medium error count: 297 No self-tests have been logged Long (extended) Self Test duration: 6362 seconds [106.0 minutes]
Часть информации доступна через /sys, например:
cat /sys/class/enclosure/0\:0\:8\:0/Slot\ 24/status OK
Тестирование скорости записи (на примере параллельного восстановления домашних каталогов, 18546GB, 33779024 файлов), CentOS 6.3, прошивка 3.220.35.1998, полоска 64КБ, RAID-6, 24 диска SATA 900GB 10000rpm, кеширование записи на дисках выключено, writeback, кеширование чтения и readahead включены, перед началом записи очищаются буфера - 3 в /proc/sys/vm/drop_caches, создание файловой системы xfs с параметрами "-d su=64k,sw=22 -i attr=2,maxpct=5 -l su=64k,lazy-count=1", монтирование с параметрами "-o nodiratime,attr2,logbufs=8,logbsize=65536"; команда восстановления - "lzop -F -cd /другой-массив/$home.tar.lzo | dd bs=102400k |tar -C /first --warning=no-timestamp -xf -"
Тестирование скорости чтения (на примере параллельного чтения домашних каталогов после параллельной записи в 100 потоков, 18546GB, 33779024 файлов), CentOS 6.3, прошивка 3.220.35.1998, полоска 64КБ, RAID-6, 24 диска SATA 900GB 10000rpm, кеширование записи на дисках выключено, writeback, кеширование чтения и readahead включены, перед началом чтения файловая система размонтируется и очищаются буфера - 3 в /proc/sys/vm/drop_caches, создание файловой системы xfs с параметрами "-d su=64k,sw=22 -i attr=2,maxpct=5 -l su=64k,lazy-count=1", монтирование с параметрами "-o nodiratime,attr2,logbufs=8,logbsize=65536"; команда чтения отдельного домашнего каталога - "tar -C $1 -H posix -b2048 -cf - ."; результат направляется в "dd bs=10240k" и далее в /dev/null:
Выключаем для массива кеширование чтения и readahead (ReadAheadNone и Direct), записываем 1408 в /sys/block/sda/bdi/read_ahead_kb записать:
Записываем deadline в /sys/block/sda/queue/scheduler вместо cfq, монтирование с параметрами "-o nodiratime,attr2,logbufs=8,logbsize=65536,nobarrier":
Записываем noop в /sys/block/sda/queue/scheduler, монтирование с параметрами "-o nodiratime,attr2,logbufs=8,logbsize=65536,nobarrier":
Записываем noop в /sys/block/sda/queue/scheduler вместо cfq, монтирование с параметрами "-o relatime,nodiratime,attr2,logbufs=8,logbsize=65536,nobarrier", 0 в /proc/sys/vm/vfs_cache_pressure вместо 100 (33779024 файлов - это в теории 34GB памяти, а на практике 52GB), с предварительным прогревом (find /first -ls) и без размонтирования и очистки буферов:
Уменьшил фрагментацию до 0.27% (8 часов, 250 МБ/сек), в результате свободное место фрагментировалось в пыль и дальнейшая дефрагментация невозможна. Записываем noop в /sys/block/sda/queue/scheduler, монтирование с параметрами "-o nodiratime,attr2,logbufs=8,logbsize=65536,nobarrier" (без relatime и vfs_cache_pressure):
Тестирование скорости записи (на примере параллельного восстановления домашних каталогов, 18546GB, 33779024 файлов), CentOS 6.3, прошивка 3.220.35.1998, полоска 64КБ, RAID-6, 24 диска SATA 900GB 10000rpm, кеширование записи на дисках выключено, writeback, кеширование чтения и readahead выключены, перед началом записи очищаются буфера - 3 в /proc/sys/vm/drop_caches, планировщик noop, создание файловой системы xfs с параметрами "-d su=64k,sw=22 -i attr=2,maxpct=5 -l su=64k,lazy-count=1", монтирование с параметрами "nodiratime,attr2,logbufs=8,logbsize=262144,nobarrier,inode64,filestreams"; команда восстановления - "lzop -F -cd /другой-массив/$home.tar.lzo | dd bs=102400k |tar -C /first --warning=no-timestamp -xf -"
Чтение обратно (noop, "nodiratime,attr2,logbufs=8,logbsize=262144,nobarrier,inode64,filestreams"):
Дефрагментация мелких файлов (до 14080KB) и чтение обратно (noop, "nodiratime,attr2,logbufs=8,logbsize=262144,nobarrier,inode64,filestreams"):
Тестирование скорости записи (на примере параллельного восстановления домашних каталогов, 18546GB, 33779024 файлов), CentOS 6.3, прошивка 3.220.35.1998, полоска 64КБ, RAID-6, 24 диска SATA 900GB 10000rpm, кеширование записи на дисках выключено, writeback, кеширование чтения и readahead выключены, перед началом записи очищаются буфера - 3 в /proc/sys/vm/drop_caches, планировщик noop, создание файловой системы ext4 (e2fsprogs-1.42) с параметрами "-E stride=16,stripe_width=352 -G 64 -J size=512", монтирование с параметрами "nobarrier,nodiratime,journal_checksum,journal_async_commit,stripe=352,delalloc"; команда восстановления - "lzop -F -cd /другой-массив/$home.tar.lzo | dd bs=102400k |tar -C /first --warning=no-timestamp -xf -"
Чтение обратно (noop, 0 в /proc/sys/vm/vfs_cache_pressure, без сброса кеша и перемонтирования, "nobarrier,nodiratime,relatime,journal_checksum,journal_async_commit,delalloc", с предварительным прогревом:
Чтение обратно после дефрагментации (довёл фрагментацию до 2.5%):
Сообразил, что исходную файловую систему тоже можно дефрагментировать и сделал это (по большей части командой mv - на порядок быстрее).
Тестирование скорости записи (на примере параллельного восстановления домашних каталогов, 18546GB, 33779024 файлов), CentOS 6.3, прошивка 3.220.35.1998, полоска 64КБ, RAID-6, 24 диска SATA 900GB 10000rpm, кеширование записи на дисках выключено, writeback, кеширование чтения и readahead выключены, перед началом записи очищаются буфера - 3 в /proc/sys/vm/drop_caches, планировщик noop для обеих файловых систем, создание файловой системы ext4 (e2fsprogs-1.42.6) с параметрами "-E stride=16,stripe_width=352 -G 128 -J size=512", монтирование с параметрами "nobarrier,nodiratime,journal_checksum,journal_async_commit,stripe=352,delalloc,commit=60,max_batch_time=30000,min_batch_time=1000"; команда восстановления - "lzop -F -cd /другой-массив/$home.tar.lzo | dd bs=102400k |tar -C /first --warning=no-timestamp -xf -"
Настройка параметров: 256 в /sys/block/sdX/queue/nr_requests, 4096 в /sys/block/sdX/queue/read_ahead_kb, 50 в /proc/sys/vm/vfs_cache_pressure, 262144 в /proc/sys/vm/min_free_kbytes, 100000000 в /proc/sys/vm/dirty_background_bytes, 700000000 в /proc/sys/vm/dirty_bytes:
Чтение записанного в 1 поток, 100 в /proc/sys/vm/vfs_cache_pressure, 3 в /proc/sys/vm/drop_caches, монтирование с параметрами "nobarrier,nodiratime,relatime,journal_checksum,journal_async_commit,delalloc,commit=60,max_batch_time=30000,min_batch_time=1000":
Чтение записанного в 1 поток, 50 в /proc/sys/vm/vfs_cache_pressure, 1000 в /sys/block/sda/queue/nr_requests (это слишком много - большие задержки), 4096 в /sys/block/sda/queue/read_ahead_kb, 262144 в /proc/sys/vm/min_free_kbytes:
Тестирование скорости записи (на примере параллельного восстановления домашних каталогов, 18546GB, 33779024 файлов), CentOS 6.3, прошивка 3.220.35.1998, полоска 64КБ, RAID-6, 24 диска SATA 900GB 10000rpm, кеширование записи на дисках выключено, writeback, кеширование чтения и readahead выключены, перед началом записи очищаются буфера - 3 в /proc/sys/vm/drop_caches, планировщик noop для обеих файловых систем, создание файловой системы с параметрами "-d su=64k,sw=22 -i attr=2,maxpct=5 -l su=64k,lazy-count=1,size=256m", монтирование с параметрами "nodiratime,relatime,attr2,nodelaylog,logbufs=8,logbsize=256k,nobarrier,inode64,filestreams,osyncisdsync", 256 в /sys/block/sdX/queue/nr_requests (4096 даёт средний await в 2 секунды), 4096 в /sys/block/sdX/queue/read_ahead_kb, 50 в /proc/sys/vm/vfs_cache_pressure, 262144 в /proc/sys/vm/min_free_kbytes, 100000000 в /proc/sys/vm/dirty_background_bytes, 700000000 в /proc/sys/vm/dirty_bytes:
Поменяем nodelaylog на delaylog:
Ещё "урежем" кеширование записи /proc/sys/vm/dirty_background_bytes до 10000000, proc/sys/vm/dirty_bytes до 40000000:
Чтение, записанного в 1 поток (с размонтированием и сбросом буферов):
Сборка 3 массивов RAID1 из 24 дисков и объединение их в LVM с чередованием ("lvcreate --stripes 3 --stripesize 64K"), исходные архивы на другом сервере (соединение 10 Гбит по NFS), планировщик noop для всех блочных устройств, 256 в /sys/block/sdX/queue/nr_requests, 4096 в /sys/block/sdX/queue/read_ahead_kb, 50 в /proc/sys/vm/vfs_cache_pressure, 262144 в /proc/sys/vm/min_free_kbytes, 100000000 в /proc/sys/vm/dirty_background_bytes, 400000000 в /proc/sys/vm/dirty_bytes, создание файловой системы с параметрами "-d su=64k,sw=66 -i attr=2,maxpct=5 -l su=64k,lazy-count=1,size=256m", монтирование с параметрами "nodiratime,relatime,attr2,nodelaylog,logbufs=8,logbsize=256k,nobarrier,inode64,filestreams":
Чтение, записанного в 2 потока (с размонтированием и сбросом буферов):
Переключение в режим оптимизации времени доступа вместо IOPS ускоряет чтение на 10% и замедляет запись на 10% (XFS, 12 потоков).
При размонтировании с накопленным кешем записи достигается скорость записи 2 ГБ/сек, т.е. успех возможен.
Сборка 2 массивов RAID1 из 24 дисков и последовательное соединение их в логический том LVM: запись в 8 потоков - 1614 МБ/сек, чтение в много потоков - 881 МБ/сек.
Тестирование чтения tarnull с LVM (stripe по 64КБ), собранного из 2 * RAID6 из 18 дисков SAS 4TB 7200 на одном контроллере, perfmode=1, NORA, Direct, XFS (сборка - "mkfs.xfs -d su=64k,sw=32 -i attr=2 -l su=64k,lazy-count=1", монтирование - "nodiratime,relatime,attr2,logbufs=8,logbsize=256k,inode64,filestreams,nobarrier"), запись bacula в 5 потоков - 643 МБ/сек, копирование на себя в очень много потоков - 165 МБ/сек:
потоков | после bacula, МБ/сек | после копирования, МБ/сек |
1 | 170 | 77 |
2 | 191 | 111 |
3 | 236 | 148 |
4 | 279 | 178 |
5 | 314 | 204 |
6 | 344 | 227 |
7 | 372 | 248 |
8 | 397 | 268 |
9 | 421 | 285 |
10 | 441 | 301 |
11 | 461 | 315 |
12 | 478 | 328 |
13 | 499 | 340 |
14 | 501 | 351 |
15 | 499 | 359 |
16 | 490 | 368 |
17 | 470 | 374 |
18 | 473 | 377 |
19 | 455 | 378 |
20 | 443 | 379 (389, 382) |
21 | 440 | 378 (381) |
22 | 439 | 378 (372) |
23 | 439 | 376 (371) |
24 | 439 | 369 |
25 | 438 | 370 |
26 | 441 | 371 |
27 | 439 | 372 |
28 | 436 | 373 |
29 | 439 (454) | 374 |
30 | 439 (454) | 374 |
31 | 430 (455) | 375 |
32 | 436 (449, 458) | 375|
33 | 439 (452) | 376 |
34 | 436 (459) | 376 |
35 | 435 (453) | 377 |
36 | 436 (458) | 375 |
37 | 436 (460) | 377 |
38 | 435 (453) | 376 |
39 | 429 (453) | 377 |
40 | 436 (467, 489) | 376 |
41 | 436 (472) | 376 |
42 | 435 (464) | 380 |
43 | 434 (467 | 375 |
44 | 434 (463) | 373 |
45 | 434 (461) | 374 |
46 | 435 (451) | 374 |
47 | 433 (442) | 373 |
48 | 434 (444) | |
49 | 446 (446) | |
50 | 442 (457) | |
51 | 430 (451) | |
52 | 428 (447) | |
53 | 431 (447) | |
54 | 427 (474) | |
55 | 429 (458) | |
56 | 428 (459) | |
57 | 430 (457) | |
58 | 426 (448) | |
59 | 427 (445) | |
60 | 427 (440) | |
61 | 430 (437) | |
62 | 427 (442) | |
63 | 425 (439) | |
64 | 426 (440) | |
65 | 422 (436) | |
66 | 426 (438) | |
67 | 424 (436) | |
68 | 424 (436) | |
69 | 421 (437) | |
70 | 420 (435) | |
71 | 420 (437) | |
72 | 419 (435) | |
76 | (432) | |
80 | (430) | |
84 | (432) | |
88 | (427) | |
92 | (427) | |
96 | (426) | |
100 | (425) | |
104 | (426) | |
108 | (426) | |
112 | (424) | |
116 | (424) | |
120 | (424) | |
124 | (421) | |
128 | (422) | |
132 | (419) | |
136 | (420) | |
140 | (416) |
Настройка:
/opt/MegaRAID/storcli/storcli64 /c0 set coercion=0 # всё-равно неправильно округляет /opt/MegaRAID/storcli/storcli64 /c0 set loadbalancemode=on /opt/MegaRAID/MegaCli/MegaCli64 -AdpSetProp -LoadBalanceMode -0 -a0 # storcli не умеет (не умел?) устанавливать баланс /opt/MegaRAID/storcli/storcli64 /c0 set perfmode=1 # минимизация задержек /opt/MegaRAID/storcli/storcli64 /c0 set patrolread=off # cc достаточно и он "правильней" # для сервера резервного копирования bacula "ra cached" вместо "nora direct" /opt/MegaRAID/storcli/storcli64 /c0 add vd type=raid6 size=all name=first drives=9:0-17 pdcache=off wb nora direct Strip=64 /opt/MegaRAID/storcli/storcli64 /c0 add vd type=raid6 size=all name=second drives=9:18-23,8:0-11 pdcache=off wb nora direct Strip=64 pvcreate /dev/sda /dev/sdb vgcreate x42fronttop /dev/sda /dev/sdb lvcreate -n share --stripes 2 --stripesize 64K -l +100%FREE x136all36 /dev/sda /dev/sdb mkfs.ext4 -E stride=16,stripe_width=512,lazy_itable_init=1 -G 128 -J size=512 -L share -v \ -O 64bit,dir_index,dir_nlink,extent,ext_attr,filetype,flex_bg,has_journal,huge_file,large_file,meta_bg,sparse_super,uninit_bg \ /dev/x136all36/share в /etc/fstab: /dev/x136all36/share /share ext4 data=ordered,stripe=512,nobarrier,nodiratime,norelatime,journal_checksum,journal_async_commit,delalloc 1 2
Глюк
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 errorstorcli видит только 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
Утилита storcli (/opt/MegaRAID/storcli/storcli64) предназначена для управления RAID контроллерами фирмы LSI Logic линеек 924x и выше, например, MegaRAID SAS 9266-8i. Имеет одинаковый командный интерфейс для RHEL 5.8, RHEL 6.1, Fedora 15, UEFI Shell, Solaris, FreeBSD, VMware ESX 4.0, VMware ESXi 4.U2, MS Windows 7, MS Windows Server 2008 R2. Не поддерживает работу со снимками. Не рекомендуется параллельное выполнение нескольких storcli.
Установка выполнена в виде пакета storcli-*.noarch.rpm (/opt/MegaRAID/storcli/storcli64).
Командный интерфейс имеет следующий формат: [указатель-объекта] команда [параметр] [ключ=значение] [J]. Указание "J" в конце строки приводит в форматированию ответа в формате JSON. Булевы параметры задаются в виде "on" и "off".
Указатель объекта:
Команды:
storcli /cx/ex/sx set bootdrive=on или storcli /cx/vx set bootdrive=on
/opt/MegaRAID/storcli/storcli64 /c0 add vd type=raid6 size=all name=second drives=8:18-23,9:0-11 pdcache=off wb nora direct Strip=64
Пример замены дисков (после вставки 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, всегда выводится версия.
Утилита 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 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). Методы борьбы:
(cd /mnt/copy1; tar --files-from /tmp/listnull --null --sparse -cf -) | \ bfr -T 95 -b 512M -C 150000000 | \ tar -p --sparse --keep-old-files -xf -
#!/bin/bash DEVICE=$1 PROCESS=$2 while true do QL=`iostat -d -k -x 1 $DEVICE 2|head -7|tail -1|awk '{printf "%d", $9}'` if [ $QL -gt 100 ] then echo `date`: $QL kill -STOP $PROCESS; COUNTER=0 QL=`iostat -d -k -x 1 $DEVICE 2|head -7|tail -1|awk '{printf "%d", $9}'` while [ $QL -gt 50 ] do echo ' ' $QL sleep 1 QL=`iostat -d -k -x 1 $DEVICE 2|head -7|tail -1|awk '{printf "%d", $9}'` COUNTER=$[$COUNTER+1] if [ $COUNTER -gt 2 ] then echo ' ' reset echo 1 > /proc/sys/vm/drop_caches COUNTER=0 sleep 2 fi done kill -CONT $PROCESS; fi; done
Ощущения:
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 выпускает семейство автономных дисковых массивов, монтируемых в стойку и подключаемых к серверу с помощью интерфейса 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 массив создаётся из разделов, а не из дисков. При создании разделов необходимо указывать тип "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 создаёт и обеспечивает работу нового логического блочного устройства на основе списка интервалов секторов блочных устройств (каждый сектор логического устройства отображается с помощью одного из методов - 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 контроллерах поддерживается специальными модулями ядра (подсистема 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 и 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 выделенных сети, каждая из которых обслуживает свой набор портов. Необходимо развести их так, чтобы в нормальных условиях трафик к первому хранилищу проходил внутри первой сети, трафик ко второму - внутри второй сети. И только при сбое одной из сетей весь трафик перемещался во вторую. При этом остальные хранилища продолжали работать как раньше.
#!/bin/sh HBTL=`ls -l --full-time /sys/block/$1/device|awk '{print $11}'|awk -F/ '{print $7}'` HBT=`echo $HBTL|awk -F: '{print $1 ":" $2 ":" $3}'` if [ -f /sys/class/iscsi_transport/target$HBT/portal_ip_address ] then ip=`cat /sys/class/iscsi_transport/target$HBT/portal_ip_address` if [ $ip = "первый порт первого хранилища" ] then pri=50 elif [ $ip = второй порт первого хранилища"" ] then pri=10 elif [ $ip = "первый порт второго хранилища" ] then pri=10 else pri=50 fi else pri=30 fi echo $pri
defaults { udev_dir /dev polling_interval 10 selector "round-robin 0" path_grouping_policy failover getuid_callout "/sbin/scsi_id -g -u -s /block/%n" prio_callout "/usr/local/sbin/mpath_prio_ip %n" path_checker tur rr_min_io 100 rr_weight uniform failback immediate no_path_retry 12 user_friendly_names yes } devnode_blacklist { ... } multipaths { multipath { wwid WWID alias mpathtest path_grouping_policy failover } } devices { device { vendor "HP" product "MSA2[02]12fc|MSA2012i" path_grouping_policy multibus getuid_callout "/sbin/scsi_id -g -u -s /block/%n" hardware_handler "0" no_path_retry 18 } }
При использовании LVM рекомендуется включить подлежащие блочные устройства в фильтр в /etc/lvm/lvm.conf.
Позволяет создавать массив из блочных устройств, как физических (в т.ч. разделов и 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: bindmd: 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 (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 (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.
Метод отображения 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 имя-колонки":
Утилиты:
Пример создания:
pvcreate /dev/sda # 24 диска SATA 2TB в RAID-6 pvcreate /dev/sdb # 4 SSD SATA 800GB в RAID-0 (762559 PE)
vgcreate x136all36 /dev/sda /dev/sdb
lvcreate -n data -l +100%FREE x136all36 /dev/sda
lvcreate -n metacache -l 513 x136all36 /dev/sdb # уровень использования не превышает 18.29% #lvcreate -n metacache -l 258 --stripes 2 x136all36 /dev/sdb /dev/sde # 2 отдельных SSD
lvcreate -n datacache -l 761533 x136all36 /dev/sdb #lvcreate -n datacache -l 381032 --stripes 2 x136all36 /dev/sdb /dev/sde # 2x800GB
# увеличить в /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
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.
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
Разборка:
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
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р) |
|
Bog BOS: hardware: Использование RAID контроллеров в Linux |