Программный RAID в Linux. Сборка массива






В предыдущей статье, посвящённой созданию программного RAID-массива, мы рассматривали метаданные md, основные режимы работы утилиты mdadm, а также  процесс создания нового RAID-массива и файловой системы на нём. Всё, вроде бы, понятно, но мы не коснулись одного существенного вопроса: как поведёт себя система после перезагрузки? Откуда ядро узнает из каких частей и какой именно массив вам нужен? Об этом — ниже.


Сборка массива вручную

Для сборки ранее созданного массива вам понадобится режим assemble утилиты mdadm. Допустим, наш ранее созданный массив имел конфигурацию RAID-1 и состоял из трёх устройств: /dev/sdb, /dev/sdc и /dev/sdc, и был создан командой:

Вспомним, что сразу после создания массива, утилита mdadm автоматически активирует его, то есть собирает и делает доступным через блочное устройство /dev/mdX. Если же вы остановите активный массив при помощи команды (предварительно размонтировав файловые системы, располагающиеся в массиве):

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

Обратите внимание, что мы не указываем уровень конфигурации RAID, поскольку об этом утилита mdadm узнаёт из суперблоков элементов массива. Если всё прошло успешно, вы получите сообщение:

Вспомним, что проверить состояние массива можно в файле /proc/mdstat:

Автоматическая сборка массива

Ещё одним преимуществом, которое даёт использование суперблоков (а точнее постоянных суперблоков, смотрите ниже), является возможность «автосборки» массива, когда вам не нужно перечислять устройства, входящие в состав массива. mdadm отыщет их самостоятельно:

Как видим, утилита без особых трудностей и посторонней помощи отыскала все нужные устройства и собрала их, активировав массив /dev/md/0.

Автоматическая сборка массива во время загрузки системы

В старые-добрые времена, когда арбузы на деревьях были совсем ещё зелёные, системным администраторам приходилось вручную описывать массивы и их компоненты в специальном файле /etc/raidtab, чтобы драйвер md мог разобраться что к чему. Подход вроде бы традиционный и практичный, однако что делать, если RAID-массив необходимо собрать раньше, чем смонтирована ФС, на которой располагается файл /etc/raidtab (ситуация типична для случаев, когда необходимо загрузить систему, расположенную на RAID-массиве)? Выход был найден: были придуманы постоянные суперблоки (Persistent Superblocks).

Постоянные суперблоки располагаются на каждом устройстве, входящем в массив и содержат в себе всю необходимую информацию для того, чтобы драйвер md смог собрать массив. Иными словами файл конфигурации /etc/raidtab просто «перенесли» прямо в область суперблоков. Таким образом, когда ядро загружает драйвер md, у того есть возможность тут же собрать массив, просканировав доступные в системе блочные устройства на предмет наличия постоянных суперблоков. Например, предлагаю взглянуть на фрагмент файла /var/log/dmesg с системы в которой сконфигурирован массив, рассматриваемый в примерах выше:

В следующей статье мы рассмотрим основы мониторинга программных RAID-массивов.