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 →