Открыть сервис

mdadm

mdadm — это утилита командной строки для управления программными RAID-массивами в операционных системах семейства Linux. Она позволяет создавать, собирать, мониторить, администрировать и удалять массивы различных уровней, используя несколько физических блочных устройств (например, жёстких дисков или их разделов) для обеспечения отказоустойчивости, повышения производительности или объединения дискового пространства. mdadm является наследником утилиты raidtools и на сегодняшний день является стандартным инструментом для работы с программным RAID в Linux.

История

Программный RAID (Redundant Array of Independent Disks) в ядре Linux поддерживается с версии 2.0 (1996 год). Первоначально для управления массивами использовался набор скриптов и утилит под названием raidtools, который был сложен в настройке и не поддерживал все современные возможности. В 2001 году Нил Браун (Neil Brown) начал разработку mdadm (сокращение от «Multiple Device Administrator») как более простой и функциональной альтернативы. Первая стабильная версия вышла в 2002 году. С тех пор mdadm стал основным инструментом, включённым во все основные дистрибутивы Linux (Debian, Red Hat, SUSE, Arch Linux и другие). Развитие утилиты продолжается и поныне, добавляется поддержка новых уровней RAID и улучшений ядра.

Устройство и принцип работы

mdadm работает с подсистемой ядра Linux, называемой MD (Multiple Device). Эта подсистема позволяет объединять несколько физических блочных устройств (компонентов) в одно логическое устройство — массив. Утилита взаимодействует с драйвером MD через системные вызовы и специальные файлы в /dev/.

Основные понятия:

  • Компонент — физическое блочное устройство (например, /dev/sda1, /dev/sdb), которое входит в состав массива.
  • Массив — логическое устройство, созданное из компонентов. Оно отображается как блочное устройство (например, /dev/md0).
  • Метаданныеинформация о конфигурации массива, хранящаяся на самих дисках. mdadm поддерживает несколько форматов метаданных: 0.90, 1.0, 1.1, 1.2. Форматы версии 1.x предпочтительнее, так как они содержат больше информации и позволяют автоматически собирать массив при загрузке.
  • Суперблок — часть метаданных, хранящаяся в конце или начале диска (в зависимости от версии).

При создании массива mdadm записывает на каждый компонент суперблок, содержащий уникальный идентификатор массива (UUID), уровень RAID, порядок дисков, состояние и другую информацию. При последующем запуске системы утилита может автоматически собрать массив, прочитав суперблоки со всех подключённых дисков.

Уровни RAID

mdadm поддерживает все основные уровни RAID, определённые в стандарте, а также некоторые нестандартные конфигурации:

УровеньОписаниеМинимальное число дисковОтказоустойчивостьЭффективность использования дискового пространства
RAID 0Чередование (striping). Данные разбиваются на блоки и записываются на все диски поочерёдно.2Нет100%
RAID 1Зеркалирование (mirroring). Каждый блок данных дублируется на всех дисках.2Да (выход из строя одного диска)50% (для двух дисков)
RAID 4Чередование с выделенным диском чётности.3Да (выход из строя одного диска)(N-1)/N
RAID 5Чередование с распределённой чётностью. Блоки чётности распределяются по всем дискам.3Да (выход из строя одного диска)(N-1)/N
RAID 6Чередование с двойной распределённой чётностью.4Да (выход из строя двух дисков)(N-2)/N
RAID 10Комбинация зеркалирования и чередования. Сначала создаются зеркальные пары, затем они объединяются в RAID 0.4 (чётное количество)Да (выход из строя одного диска в каждой паре)50%
RAID 0+1Комбинация чередования и зеркалирования (сначала RAID 0, затем RAID 1).4 (чётное количество)Да (менее надёжен, чем RAID 10)50%

Кроме того, mdadm поддерживает:

  • RAID 1E — вариант RAID 1 с нечётным числом дисков.
  • RAID 5E, RAID 5EE, RAID 6E — варианты с «горячим резервом» (hot spare) внутри массива.
  • Линейный режим (LINEAR) — простое последовательное объединение дисков без чередования и чётности (не является RAID в классическом понимании).
  • Контейнеры (CONTAINER) — специальный режим для работы с аппаратными RAID-контроллерами, эмулируемыми драйверами (например, dmraid).

Основные возможности и команды

mdadm предоставляет широкий набор команд для управления массивами. Основные режимы работы задаются с помощью опции --action или специальных ключей:

  • Создание массива (--create). Позволяет создать массив заданного уровня из указанных компонентов. Пример: mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sda1 /dev/sdb1 /dev/sdc1.
  • Сборка массива (--assemble). Собирает ранее созданный массив из его компонентов. Обычно используется при загрузке системы или после подключения дисков. Пример: mdadm --assemble /dev/md0 /dev/sda1 /dev/sdb1.
  • Запуск массива (--run). Принудительно запускает массив, который не был собран автоматически.
  • Остановка массива (--stop). Останавливает активный массив. Пример: mdadm --stop /dev/md0.
  • Удаление массива (--remove). Удаляет массив из системы (не затрагивает данные на дисках).
  • Добавление диска (--add). Добавляет новый компонент в массив (например, для замены вышедшего из строя диска или расширения).
  • Удаление диска (--remove). Удаляет компонент из массива.
  • Замена диска (--replace). Заменяет один компонент другим.
  • Мониторинг (--monitor). Запускает процесс, который отслеживает состояние массивов и может отправлять уведомления (например, по электронной почте) при возникновении ошибок.
  • Проверка целостности (--check, --repair). Запускает проверку данных на массиве и, при необходимости, восстановление (для RAID 5/6).
  • Вывод информации (--detail, --query, --examine). Показывает детальную информацию о массиве или компоненте.

Управление с помощью конфигурационных файлов

Для автоматического сбора массивов при загрузке системы используется конфигурационный файл /etc/mdadm/mdadm.conf (в некоторых дистрибутивах — /etc/mdadm.conf). В нём можно указать:

  • Список массивов для автоматической сборки.
  • Параметры мониторинга.
  • Уровень детализации логов.

Пример строки для автоматической сборки: `` ARRAY /dev/md0 UUID=12345678:9abcdef0:12345678:9abcdef0 ``

Применение

Программный RAID с использованием mdadm широко применяется в различных сферах:

  • Домашние и офисные серверы. Позволяет обеспечить отказоустойчивость хранения данных без затрат на аппаратные RAID-контроллеры.
  • Файловые серверы (NAS). Часто используется в связке с Samba, NFS или другими протоколами для организации сетевого хранилища.
  • Веб-серверы и базы данных. RAID 0 может использоваться для повышения производительности, RAID 1 или 5 — для защиты данных.
  • Системы виртуализации. Массивы могут быть использованы как хранилище для образов виртуальных машин (например, в связке с LVM).
  • Научные и исследовательские вычисления. Для хранения больших объёмов данных с балансом между производительностью и надёжностью.

Преимущества и недостатки

Преимущества

  • Гибкость. Возможность создавать массивы практически любой конфигурации, менять уровень RAID, добавлять и удалять диски.
  • Независимость от оборудования. Не требует специального RAID-контроллера. Работает с любыми дисками, подключёнными через SATA, SAS, USB или NVMe (через эмуляцию блочного устройства).
  • Низкая стоимость. Не требуется покупка дорогого аппаратного контроллера.
  • Переносимость. Массив можно перенести на другую систему Linux, и он будет собран (при условии совместимости формата метаданных).
  • Интеграция с LVM. Часто используется совместно с Logical Volume Manager для более гибкого управления разделами.

Недостатки

  • Загрузка процессора. Все операции по расчёту чётности (для RAID 5/6) выполняются центральным процессором, что может снижать производительность на слабых системах.
  • Производительность записи. В некоторых конфигурациях (особенно RAID 5/6) скорость записи может быть ниже, чем у аппаратных решений с кэшем.
  • Сложность настройки. Требует понимания принципов работы RAID и командной строки.
  • Зависимость от ядра. Использует подсистему MD, которая является частью ядра Linux. Сбои в ядре могут повлиять на целостность данных.

Сравнение с аппаратным RAID

Программный RAID (mdadm) и аппаратный RAID имеют принципиальные различия:

  • Аппаратный RAID использует специализированный контроллер с собственным процессором и кэш-памятью. Он не нагружает центральный процессор и часто обеспечивает более высокую производительность, особенно при записи. Однако такие контроллеры дороги и могут быть привязаны к конкретному производителю.
  • Программный RAID (mdadm) использует ресурсы центрального процессора и оперативной памяти. Он дешевле, гибче и не зависит от конкретного контроллера. Современные многоядерные процессоры позволяют достичь производительности, близкой к аппаратным решениям начального уровня.

Существует также полуаппаратный (FakeRAID) — реализация RAID в прошивке материнской платы, которая использует драйверы операционной системы. mdadm может работать с таким оборудованием через режим контейнера, но это менее надёжно и не рекомендуется.

Интересные факты

  • Название mdadm расшифровывается как «Multiple Device Administrator», но также является отсылкой к старой утилите md (Multiple Device).
  • mdadm поддерживает «горячую замену» дисков (hot swap) при условии поддержки этого интерфейсом подключения (например, SATA или SAS с поддержкой горячего подключения).
  • Утилита может работать с дисками, на которых уже есть файловые системы, но это не рекомендуется, так как данные будут перезаписаны.
  • В некоторых дистрибутивах (например, Ubuntu) mdadm может автоматически собирать массивы при загрузке без конфигурационного файла, используя суперблоки на дисках.
  • mdadm поддерживает создание массивов из разделов, а не целых дисков, что позволяет использовать диск для нескольких массивов одновременно.

Источники

  • Brown, N. (2002). «mdadm — manage MD devices». Linux Kernel Mailing List.
  • «The Linux RAID Wiki». (Архивная версия).
  • «mdadm(8) — Linux man page».
  • «Software RAID HOWTO». Linux Documentation Project.
  • «Red Hat Enterprise Linux 7 Storage Administration Guide». Red Hat, Inc.
  • «Ubuntu Server Guide — RAID». Canonical Ltd.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →