Программный RAID в Linux. Метаданные, mdadm и создание массива






В сегодняшней заметке рассмотрим что такое метаданные md, режимы работы утилиты mdadm, а также создадим наш первый RAID массив.



Метаданные md

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

Массивы без метаданных

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

  • в предыдущих версиях драйвер md поддерживал только линейные (linear) и RAID-0 конфигурации, в которых суперблок не использовался, поскольку в данных случаях это не критически-важный момент. Вы можете пересобрать такой массив, включив использование суперблоков, но md поддерживает работу и без них из соображений обратной совместимости;
  • являясь прозрачным слоем поверх устройств, предназначенным для тестирования массивов, псевдо-уровень RAID FAULTY не нуждается в суперблоках;
  • поскольку MULTIPATH-массивы для md представляют всего одно устройство, смысла в использовании суперблока попросту нет;
  • в некоторых случаях выгоднее не использовать суперблоки в RAID1-массивах.

Режимы работы mdadm

Утилита mdadm, речь о которой шла в предыдущей заметке, имеет 9 основных режимов работы. В повседневной жизни обычно требуются только первые три, в то время как остальные пригодятся в случае восстановления массива после сбоев или изменения его параметров.

  • Режим Create предназначен для создания массивов, размещая суперблоки на каждом устройстве;
  • в режиме Assemble утилита mdadm выполняет сборку массива из компонент, созданных ранее. Компоненты для сборки могут быть как указаны вручную, так и найдены автоматически. Обычно необходимость в этом режиме работы mdadm возникает у сценариев загрузки системы;
  • режим Monitor используется для наблюдения за изменением состояния устройств массива. Поскольку в конфигурациях Linear и RAID0 не может быть spare (запасных), fault(сбойных) и missing (потерянных) устройств, то для таких конфигураций режим Monitor работать не будет, ибо нечего отслеживать;
  • в режиме Build утилита mdadmможет выполнять сборку массива из устройств, не содержащих суперблоков. При работе с массивами такого типа для mdadm нет разницы между созданием нового массива или сборкой существующего, поскольку у неё нет возможности определить, инициализировались ли уже указанные устройства или нет. Пользуйтесь этим режимом только в том случае, если вы абсолютно уверены  в том, что вы делаете;
  • режим Grow используется в случаях, когда вам необходимо расширить или каким-либо образом реорганизовать ваш массив. На сегодняшний день можно расширять массив путём изменения размера составных устройств в массивах RAID ¼/5/6 и количества активных устройств в массивах RAID1;
  • режим Manage предназначен для выполнения разнообразных операций, вроде добавления запасных или удаления сбойных устройств;
  • команды режима Misc предназначены для выполнения «всяких-разных» операций, которые не вошли в предыдущие режимы;
  • режим Incremental Assembly позволяет добавлять или удалять одно устройство в/из массива;
  • в режиме Auto-detect утилита просит ядро Linux активировать автоматически определённые массивы.

Планирование массива

Прежде чем создавать массив, естественно, нужно определиться, из чего он будет состоять. Обратите внимание, что для mdadm устройством является не обязательно физическая «железка». Это может быть любое блочное устройство, т. е. даже дисковые разделы. На данном этапе предположим, что у нас имеется три одинаковых жёстких диска одинакового размера: /dev/sdb, /dev/sdc и /dev/sdd, из которых мы и создадим наш первый массив.

Создание массива

В общем случае новый RAID-массив создаётся  следующим образом:

где:

  • n — количество устройств, входящих в массив;
  • level — уровень RAID, один из: linear, raid0, raid1, raid4, raid5, raid6, raid10 или multipath (опций на самом деле больше, многие из которых являются синонимами, но пока что опустим их, дабы не загромождать статью);
  • md-device — путь к файлу блочного устройства, которое будет представлять массив;
  • block-device-1 ... block-device-n — компоненты массива устройства.

Linear

Как уже говорилось, в этом режиме компоненты массива последовательно «склеиваются» и в массивах такого типа нет избыточной информации для восстановления данных в случае чего. Данный тип массива может пригодиться вам, если необходимо «слепить» из нескольких небольших разделов и/или дисков один раздел большой ёмкости, а надёжность хранения данных вас не особо заботит. В случае с нашими тремя дисками команда создания linear-массива будет выглядеть так:

Если всё прошло успешно, mdadm сообщит вам об этом и автоматически активрует массив:

Не забывайте, что если хотя бы одна из компонент массива выйдет из строя, вы потеряете весь массив!

RAID-0

Если у вас есть два или более устройств примерно одного размера, вы можете создать RAID-0-массив:

Так же, как и в случае с linear-массивом, в RAID-0 не создаётся информация для восстановления, так что если хотя бы одна из компонент массива выйдет из строя, вы потеряете весь массив!

RAID-1

Вот, собственно, здесь начинается RAID в буквальном (redundant, не забыли?) смысле этого слова. Представим, что у нас имеется два диска, которые мы хотим объединить в зеркало. Нет ничего проще:

Одной очень приятно «фишкой» md является возможность иметь т. н. spare (запасные) устройства, которые могут автоматически подключаться ядром в случае выхода из строя компонент массива. Именно в RAID-1 можно начинать пользоваться этой возможностью, поскольку для двух предыдущих уровней эта функция не поддерживается по понятным причинам. Допустим, необходимо создать такой же массив, как мы только что создали, но при этом нужно указать системе, что имеется один запасной диск /dev/sdd, который необходимо ввести в строй взамен вышедшего, если вдруг такое произойдёт. Делается это при помощи опции --spare-devices, передав ей количество запасных устройств, а также пути к их файлам:

Чтобы узнать, в каком состоянии находится синхронизация данных между устройствами массива, необходимо взглянуть на содержимое файла /proc/mdstat:

Из содержимого приведённого примера видно, что синхронизация закончена на 6.2%, идёт на скорости 29123К/сек и должна закончиться приблизительно через четыре с половиной минуты. Синхронизация выполняется системой в фоновом режиме в то время, когда сама система простаивает. То есть, влияние синхронизации на скорость работы системы сведено к минимуму.

RAID-4/5/6

При наличии трёх и более дисков, вы можете создать массив уровня RAID-4/5.

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

А если у вас в запасе есть 4 и более дисков, можно позволить себе RAID-6:

или

Состояние массивов

Узнать, в каком состоянии находятся массивы и их компоненты, можно из содержимого файла /proc/mdstat, как мы это делали в разделе о создании массива RAID-1. Подробнее о том, что можно извлечь из инофрмации,хранящейся в этом файле, мы поговорим в следующих статьях.

Создание разделов и файловых систем, монтирование

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

и/или файловую систему:

смонтировать её:

и пользоваться на здоровье ;)

Что дальше

В следующей заметке мы рассмотрим процесс сборки массива из существующих компонент, а также настройку его автоматической сборки при загрузке системы.