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






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


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

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

# mdadm --create --raid-devices=3 --level=raid1 /dev/md0 /dev/sdb /dev/sdc /dev/sdd

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

# mdadm --stop /dev/md0

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

# mdadm --assemble /dev/md0 /dev/sdb /dev/sdc /dev/sdd

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

mdadm: /dev/md0 has been started with 3 drives.

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

# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active (auto-read-only) raid1 sdb[0] sdd[2] sdc[1]
      8387572 blocks super 1.2 [3/3] [UUU]
          resync=PENDING
unused devices: <none>

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

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

# mdadm --assemble --scan
mdadm: /dev/md/0 has been started with 3 drives.

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

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

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

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

[    5.022639] md: bind<sdc>
[    5.026939] md: bind<sdd>
[    5.029737] md: bind<sdb>
[    5.060274] raid1: raid set md0 active with 3 out of 3 mirrors
[    5.060503] md0: detected capacity change from 0 to 8588873728

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