RAID и RAID-контроллеры

Как создать и настроить программный RAID в Linux с mdadm

Пошаговая настройка RAID 1, RAID 5 и RAID 10 в Linux: проверка дисков, создание mdadm-массива, монтирование по UUID и контроль состояния.

13 минут
Средний
Серверные диски, объединённые в программный RAID-массив — схематичная иллюстрация
Программный RAID в Linux создают утилитой mdadm только после проверки каждого выбранного диска или раздела: его модели, серийного номера, WWN, точек монтирования и существующих сигнатур. После создания массива на нём создают файловую систему, монтируют её по UUID и проверяют автосборку после перезагрузки. Пока не завершилась начальная синхронизация RAID, массив может быть доступен, но его не стоит считать полностью готовым к рабочей нагрузке.

Ниже рассматривается массив данных, не содержащий корневую файловую систему. Загрузка ОС с MD RAID требует отдельной проверки разметки, загрузчика и состава initramfs. Базовое устройство и выбор RAID-уровней описаны в статье «Что такое RAID: полное руководство для начинающих».

Что подготовить для настройки mdadm

Нужны права root или sudo, свободные накопители либо свободные разделы и резервная копия данных. В примерах используются постоянные пути /dev/disk/by-id/..., а не /dev/sdX: буквы sdX могут измениться после перезагрузки, переподключения диска или изменения порядка обнаружения устройств.

Минимальные параметры массивов

УровеньМинимум участниковПриблизительная полезная ёмкостьДопустимый отказ
RAID 12Ёмкость наименьшего участникаВсе участники, кроме одной рабочей копии
RAID 53(N − 1) × CОдин участник
RAID 10 Linux MD2Зависит от числа копий и layout; при двух копиях обычно около половины суммарной ёмкостиЗависит от layout и того, какие именно участники отказали

N — число участников, C — доступный размер наименьшего компонента. Устройства могут иметь разную физическую ёмкость, но без явного --size mdadm обычно ограничивает размер компонента наименьшим доступным устройством с учётом метаданных и выравнивания. Диск для будущей замены должен предоставлять не меньше доступных секторов, чем заменяемый компонент, а не просто иметь одинаковую маркетинговую ёмкость.

Linux MD RAID 10 допускает два устройства и может работать с нечётным числом устройств, однако нечётная конфигурация не образует обычные независимые зеркальные пары. Параметры near, far и offset определяют размещение копий: near хранит копии рядом по устройствам, far разносит их по адресному пространству, offset сочетает разнесение с иным смещением. Они влияют на полезный размер, шаблон чтения и сочетания отказов, которые массив переживёт. Для типовой схемы из четырёх дисков обычно оставляют layout по умолчанию с двумя near-копиями; нестандартный layout следует проектировать и проверять отдельно.

Проверка дисков: модель, серийный номер, WWN и сигнатуры

Не создавайте массив до идентификации устройств

mdadm --create записывает на участников метаданные RAID — суперблоки MD — и может сделать существующие разделы, файловые системы и данные недоступными. Команда mkfs затем создаёт новую файловую систему и также уничтожает прежнюю структуру данных на целевом устройстве.

Безопасно выбрать участники массива

Выполните проверку до любых команд записи. Пример ниже предполагает, что массив создаётся на отдельных дисках; для разделов указывайте пути вида /dev/disk/by-id/...-part1.

  1. 1
    Посмотреть физические накопители
    Сверьте размер, модель, серийный номер и WWN с маркировкой дисков, инвентаризацией сервера или данными контроллера. Системный диск обычно содержит смонтированные разделы и не должен попадать в список участников.
  2. 2
    Проверить разделы, файловые системы и точки монтирования
    Убедитесь, что выбранные устройства не смонтированы и не содержат нужных файловых систем. Отдельно проверьте корневую точку /, /boot, EFI System Partition и области swap.
  3. 3
    Посмотреть сигнатуры без их удаления
    Команда wipefs -n работает в режиме просмотра. Она покажет, например, старую файловую систему, LVM, swap или сигнатуру linux_raid_member, но ничего не сотрёт.
  4. 4
    Зафиксировать постоянные пути
    Найдите символьные ссылки в /dev/disk/by-id/ для устройств с проверенными серийными номерами и WWN. Именно эти ссылки подставляйте в команду создания.
Показывает физические диски и их идентификаторы. Для NVMe серийный номер и модель также обычно доступны в этом выводе.
lsblk -d -o NAME,PATH,SIZE,MODEL,SERIAL,WWN,TRAN,ROTA,TYPE
Показывает файловые системы, UUID, текущие точки монтирования и активные области swap. `blkid` запускается с повышенными правами, чтобы прочитать сведения с устройств, а не полагаться только на доступный непривилегированному пользователю кеш. Убедитесь, что будущие участники RAID нигде не используются.
lsblk -f && findmnt -rno TARGET,SOURCE,FSTYPE,UUID && sudo swapon --show --output NAME,TYPE,SIZE,USED,PRIO && sudo blkid
Безопасно отображает сигнатуры на выбранном диске. Замените `<идентификатор-диска>` на конкретное имя из `/dev/disk/by-id/`, например имя, содержащее WWN. Ключ `-n` обязателен для режима без записи.
wipefs -n /dev/disk/by-id/<идентификатор-диска>
Проверяет, есть ли на устройстве существующий суперблок MD. Если устройство не было участником MD-массива, команда обычно сообщит об отсутствии superblock.
mdadm --examine /dev/disk/by-id/<идентификатор-диска>
Показывает идентификационные сведения и краткий результат [S.M.A.R.T.](/baza-znaniy/glossariy/self-monitoring-analysis-and-reporting-technology). Для некоторых RAID-контроллеров и отдельных типов устройств способ обращения к SMART отличается; сверяйте документацию драйвера или контроллера.
smartctl -i -H /dev/disk/by-id/<идентификатор-диска>
Показывает постоянные имена и их ссылки на ядровые устройства. Выберите ссылки, соответствующие ранее проверенным серийным номерам или WWN.
ls -l /dev/disk/by-id/

Установка mdadm и smartmontools

В поддерживаемых Debian и Ubuntu пакеты обычно называются mdadm и smartmontools. На RHEL-подобных системах — RHEL, Rocky Linux, AlmaLinux и совместимых дистрибутивах — используются те же имена пакетов. Выполняйте установку от root или через sudo.

Debian и Ubuntu: устанавливает mdadm и утилиту SMART.
sudo apt update && sudo apt install mdadm smartmontools
RHEL-подобные системы с DNF. В системах, где используется YUM как совместимая команда, синтаксис пакетов аналогичен.
sudo dnf install mdadm smartmontools
Проверяет, что утилиты доступны. В современных выпусках mdadm при создании без явного `--metadata` обычно выбирает метаданные формата 1.2, но для воспроизводимости ниже формат указан явно.
mdadm --version && smartctl --version

Метаданные 1.2

Формат 1.2 размещает суперблок MD в начале устройства, после начальной служебной области. Он подходит для обычного массива данных. Для массива, с которого загружается ОС, выбор формата метаданных может быть ограничен загрузчиком и схемой разделов; это отдельная задача, не сводящаяся к mdadm --create.

Как создать RAID 1, RAID 5 или RAID 10

Во всех примерах <disk-1>, <disk-2> и другие заполнители означают конкретные, уже проверенные пути из /dev/disk/by-id/. Например: /dev/disk/by-id/wwn-0x5000.... Если используются разделы, подставляйте полные пути к разделам, например /dev/disk/by-id/wwn-0x5000...-part1. Не смешивайте в одном массиве случайно выбранные целые диски и их разделы.

Ключ --name задаёт имя массива в MD-метаданных, например data1; часто оно хранится с именем хоста как hostname:data1. Путь /dev/md/data1 или /dev/md0 — это имя устройства, созданное ядром и udev. После перезагрузки номер /dev/mdX может отличаться, поэтому UUID файловой системы, а не /dev/mdX, используют в /etc/fstab.

Разрушительная операция: создание массива

Перед запуском ещё раз выполните lsblk, findmnt, blkid, wipefs -n и сверьте каждый путь с серийным номером и WWN. Следующие команды записывают MD-метаданные на все перечисленные устройства.

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

Выберите только один пример. Имя после --name можно заменить на своё; оно не должно совпадать с именем другого массива на этом хосте.

  1. 1
    Создать RAID 1 из двух устройств
    Подходит, когда нужны две зеркальные копии. Пример создаёт именованный массив data1.
  2. 2
    Создать RAID 5 из трёх устройств
    RAID 5 использует распределённую чётность и переносит отказ одного участника. Не планируйте работу массива в деградированном состоянии дольше необходимого.
  3. 3
    Создать RAID 10 из четырёх устройств
    Это типовая конфигурация Linux MD RAID 10. Здесь намеренно не задаётся layout: применяется стандартный выбор mdadm. Для near, far или offset сначала проверьте последствия для конкретного числа устройств и нагрузки.
  4. 4
    Проверить запуск массива
    Сразу после создания проверьте /proc/mdstat и mdadm --detail. Массив может начать первичную синхронизацию, и это нормальное состояние.
Команды создания — разрушительные
# RAID 1: два заранее проверенных устройства
sudo mdadm --create /dev/md/data1 --level=1 --raid-devices=2 \
  --metadata=1.2 --name=data1 \
  /dev/disk/by-id/<disk-1> /dev/disk/by-id/<disk-2>

# RAID 5: три заранее проверенных устройства
sudo mdadm --create /dev/md/data5 --level=5 --raid-devices=3 \
  --metadata=1.2 --name=data5 \
  /dev/disk/by-id/<disk-1> /dev/disk/by-id/<disk-2> /dev/disk/by-id/<disk-3>

# RAID 10: четыре заранее проверенных устройства
sudo mdadm --create /dev/md/data10 --level=10 --raid-devices=4 \
  --metadata=1.2 --name=data10 \
  /dev/disk/by-id/<disk-1> /dev/disk/by-id/<disk-2> \
  /dev/disk/by-id/<disk-3> /dev/disk/by-id/<disk-4>
Проверяет RAID 1 из примера. Для RAID 5 или RAID 10 замените путь на созданное устройство: `/dev/md/data5` или `/dev/md/data10`.
cat /proc/mdstat && sudo mdadm --detail /dev/md/data1

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

Разрушительная операция: создание файловой системы

mkfs.ext4 создаёт новую файловую систему на MD-устройстве и удаляет доступ к данным, которые могли находиться на нём ранее. Выполняйте команду только на только что созданном и проверенном массиве.

Подключение массива после перезагрузки

В примере используется ext4 и точка монтирования /srv/raid-data. Можно выбрать другую поддерживаемую файловую систему, но UUID нужно получать именно у файловой системы на MD-устройстве, а не у участников массива.

  1. 1
    Создать файловую систему
    Выполните mkfs на устройстве массива, например /dev/md/data1.
  2. 2
    Получить UUID и создать каталог
    Сохраните UUID, который вернёт blkid. Каталог точки монтирования не должен содержать нужные незамонтированные данные.
  3. 3
    Добавить одну проверенную строку в fstab
    Откройте /etc/fstab редактором и добавьте UUID созданной файловой системы. Не используйте UUID участников RAID и не привязывайтесь к /dev/mdX.
  4. 4
    Проверить без перезагрузки
    Команда mount -a проверит новые записи и попытается смонтировать их. Затем findmnt подтвердит источник, UUID и точку монтирования.
Создаёт ext4 на RAID 1 из примера. Для другого массива замените путь. Команда разрушительна.
sudo mkfs.ext4 -L raid-data /dev/md/data1
Создаёт точку монтирования и выводит UUID файловой системы. Скопируйте выведенное значение без пробелов и кавычек.
sudo mkdir -p /srv/raid-data && sudo blkid -s UUID -o value /dev/md/data1
/etc/fstab
# /etc/fstab
# Подставьте UUID, полученный командой blkid для /dev/md/data1.
UUID=<uuid-файловой-системы> /srv/raid-data ext4 defaults 0 2
Читает `/etc/fstab`, пытается выполнить указанное в нём монтирование и затем показывает фактически подключённую файловую систему. Если `mount -a` сообщает об ошибке или `findmnt` не показывает ожидаемый UUID, исправьте `/etc/fstab` до перезагрузки.
sudo mount -a && findmnt -no TARGET,SOURCE,FSTYPE,UUID --target /srv/raid-data

Автосборка mdadm и initramfs

После создания проверьте, как именно ваш дистрибутив собирает MD-массивы. Современные systemd/udev-системы нередко распознают суперблок mdadm и собирают обычный массив данных по его UUID без вручную добавленной строки ARRAY. Но это зависит от политики дистрибутива, правил udev, initramfs и роли массива. Конфигурация особенно важна для массивов, нужных на ранней стадии загрузки, и полезна как явное описание ожидаемого массива.

В Debian и Ubuntu типичный файл конфигурации — /etc/mdadm/mdadm.conf; в RHEL-подобных системах — /etc/mdadm.conf. Не добавляйте вывод mdadm --detail --scan оператором >> без проверки: так можно создать дубликаты или записать описание постороннего массива.

Сохранить проверенное описание массива

Сохраните только строку для нового массива и сначала проверьте UUID, имя и список устройств в выводе.

  1. 1
    Получить ARRAY-описание
    Команда выводит строки формата ARRAY <путь> metadata=... UUID=... name=.... Сверьте UUID с mdadm --detail именно созданного массива.
  2. 2
    Отредактировать принятый файл конфигурации
    Откройте файл редактором, проверьте существующие ARRAY-строки и добавьте одну строку только при отсутствии эквивалентной записи. Не удаляйте описания действующих массивов.
  3. 3
    Определить необходимость обновления initramfs
    Для обычного массива данных, монтируемого после запуска корневой ФС, обновление initramfs часто не требуется, если ОС штатно собирает массив после загрузки. Если массив нужен для root, /usr, раннего mount или политика дистрибутива включает MD-конфигурацию в initramfs, образ необходимо обновить.
  4. 4
    Провести контрольную перезагрузку
    После перезагрузки убедитесь, что MD-устройство собрано, UUID файловой системы совпадает с записью в fstab, а точка монтирования активна.
Выводит обнаруженные массивы в формате `ARRAY`. Перед переносом строки в конфигурацию убедитесь, что она относится к нужному массиву, а не к старому или внешнему устройству.
sudo mdadm --detail --scan --verbose
Фрагмент конфигурации mdadm
# Debian / Ubuntu: /etc/mdadm/mdadm.conf
# RHEL-подобные системы: /etc/mdadm.conf
# Пример формы записи; используйте строку, проверенную на своём сервере.
ARRAY /dev/md/data1 metadata=1.2 UUID=<uuid-md-массива> name=<hostname>:data1
Debian и Ubuntu: обновляет initramfs после изменения конфигурации, когда массив должен быть доступен на ранней стадии загрузки или этого требует политика системы.
sudo update-initramfs -u
RHEL-подобные системы: пересоздаёт initramfs. Выполняйте после изменения `/etc/mdadm.conf`, если конфигурация массива должна попасть в раннюю загрузку.
sudo dracut -f
Контрольная перезагрузка выполняется только после успешного `mount -a`, проверки конфигурации mdadm и наличия доступа к серверу через консоль или удалённое управление.
sudo reboot
Выполните после загрузки. Команда подтверждает сборку массива, его состояние и монтирование файловой системы с ожидаемым UUID.
cat /proc/mdstat && sudo mdadm --detail /dev/md/data1 && findmnt -no TARGET,SOURCE,FSTYPE,UUID --target /srv/raid-data

Проверка состояния mdadm и прогресса синхронизации

Проверка состояния mdadm начинается с /proc/mdstat. В нём видны имя массива, уровень, участники, индикатор присутствующих устройств и фоновая операция. Например, [UU] у двухдискового RAID 1 означает, что оба ожидаемых участника доступны, а [U_] — что один отсутствует. Во время начальной инициализации или восстановления строка может содержать resync либо recovery, процент выполнения, скорость и оценку времени; эти значения меняются под нагрузкой и не являются универсальным прогнозом.

Обновляет состояние каждые пять секунд. Остановите просмотр сочетанием `Ctrl+C`.
watch -n 5 cat /proc/mdstat
Показывает уровень, `Array Size`, `State`, число `Active Devices`, `Working Devices`, `Failed Devices`, UUID и роль каждого участника. Замените путь на имя своего массива.
sudo mdadm --detail /dev/md/data1

Как читать основные признаки состояния

ИсточникШтатный признакПризнак проблемы
/proc/mdstatВсе ожидаемые буквы U, например [UU], [UUU] или [UUUU]Символ _ на месте ожидаемого участника
/proc/mdstatПеред рабочей эксплуатацией нет незавершённых resync или recoveryИдёт resync или recovery; операция не продвигается либо завершается ошибкой
mdadm --detailState не содержит degraded или failed, Failed Devices : 0, а Active Devices равно Raid Devicesdegraded, failed, ненулевое число Failed Devices либо Active Devices меньше Raid Devices
mdadm --detailВсе ожидаемые участники перечислены как активные и синхронизированныеОжидаемый участник отсутствует либо отмечен как faulty, removed или неактивный

Деградированный RAID и RAID 5

Деградированный режим означает, что массив уже потерял часть избыточности. RAID 5 переносит отказ только одного участника; второй отказ до завершения восстановления приводит к выходу за возможности уровня. Во время первичной синхронизации, rebuild и работы в деградированном состоянии нагрузку и дальнейшие действия следует планировать особенно осторожно. Нельзя заранее назвать универсальные сроки, скорость восстановления или риск ошибок чтения: они зависят от накопителей, ёмкости, нагрузки, контроллера и параметров массива.

RAID не заменяет резервное копирование

Программный RAID даёт избыточность данных при допустимом числе отказов накопителей. RAID 1 использует зеркалирование, RAID 5 — чётность, RAID 10 — сочетание копий и чередования. Но массив не защищает от удаления файлов, ошибок приложения, повреждения файловой системы, вредоносного ПО, ошибочных команд администратора, отказа сервера целиком и числа отказов выше возможностей выбранной схемы. Резервные копии должны храниться и проверяться отдельно.

Термины в статье

Состояние отказоустойчивого RAID-массива, потерявшего один или несколько участников, но сохраняющего доступ, пока число отказов не превышает допустимое для RAID-уровня.
Зеркалирование — поддержание одинаковых копий данных на двух и более накопителях или узлах хранения. В RAID оно обеспечивает избыточность и лежит в основе RAID 1 и RAID 10.
Избыточность данных — хранение дополнительных копий или контрольной информации, позволяющее восстановить данные при отказе носителя, блока или другого компонента.
Метаданные RAID — служебные записи на дисках или контроллере, описывающие состав, уровень, состояние и параметры RAID-массива для его распознавания и сборки.
RAID, реализованный ОС или другим программным стеком хоста без отдельного аппаратного RAID-контроллера. Использует вычислительные ресурсы сервера.
Фоновая операция, восстанавливающая согласованность избыточности RAID: зеркальных копий либо блоков данных и чётности.
Служебная метаобласть Linux Software RAID, хранящая параметры массива, роль диска и сведения, необходимые для его автоматической сборки.
Суперпользователь — учётная запись с UID 0 или процесс с эффективным UID 0, обладающий административными правами; его полномочия шире, чем у обычного пользователя.
Распределение последовательных блоков данных между дисками или группами дисков RAID. Позволяет распараллеливать ввод-вывод, но само по себе не создаёт избыточности.
Избыточные контрольные данные, вычисляемые из блоков одной полосы RAID. Один блок чётности защищает от отказа одного диска, два независимых блока RAID 6 — от отказа двух.
AlmaLinux — корпоративный дистрибутив Linux, поддерживаемый сообществом и AlmaLinux OS Foundation, ориентированный на совместимость с интерфейсами и экосистемой RHEL.
Debian — универсальный дистрибутив Linux с пакетами DEB и системой APT, известный консервативной веткой Stable и разделением репозиториев по веткам разработки.
initramfs — временная корневая файловая система в памяти, разворачиваемая ядром Linux для загрузки модулей и подготовки хранилища перед монтированием постоянной корневой файловой системы.
Утилита командной строки Linux для создания, сборки, мониторинга и изменения программных RAID-массивов подсистемы MD.
Технология объединения нескольких накопителей в логические блочные устройства для повышения производительности и/или отказоустойчивости в зависимости от RAID-уровня.
RAID 1 — уровень RAID с зеркалированием данных на двух или более дисках. Полезная ёмкость равна ёмкости наименьшего участника, а доступ сохраняется, пока исправна хотя бы одна копия.
Комбинированный уровень: чередование (RAID 0) поверх зеркальных пар (RAID 1). Сочетает высокую скорость и отказоустойчивость, отдавая под избыточность половину ёмкости.
RAID 5 — уровень RAID с чередованием данных и распределённой чётностью, выдерживающий отказ одного диска. Требует минимум трёх дисков.
Процесс восстановления избыточности массива после замены отказавшего диска: контроллер вычисляет и записывает на новый диск недостающие данные из остальных дисков.
RHEL — корпоративный дистрибутив Linux от Red Hat с фиксированными основными версиями, сертификационной экосистемой и моделью сопровождения, зависящей от подписки.
Rocky Linux — корпоративный дистрибутив Linux, создаваемый из исходных пакетов экосистемы RHEL и ориентированный на совместимость с RHEL без использования его товарных знаков.
S.M.A.R.T. — технология самодиагностики накопителей, собирающая показатели состояния и ошибок. Она помогает выявлять признаки деградации диска до отказа.
Swap — область на диске или SSD, используемая ядром Linux для размещения вытесненных страниц памяти, когда RAM требуется более активным данным.
systemd — система инициализации и менеджер служб Linux, управляющий службами и другими ресурсами как объектами unit, обычно описанными unit-файлами.

Вопросы по теме

Все вопросы и ответы

Можно ли монтировать RAID через /dev/md0 в fstab?

Нет. Номер устройства /dev/mdX может измениться после перезагрузки, поэтому в /etc/fstab следует указывать UUID файловой системы, созданной на MD-массиве. Не используйте UUID отдельных дисков-участников. После изменения fstab проверьте запись командой mount -a и убедитесь через findmnt, что смонтирован ожидаемый UUID.

Можно ли сразу использовать RAID после создания?

Технически да, массив может быть доступен сразу после создания. Однако до завершения начальной синхронизации его не следует считать полностью готовым к рабочей нагрузке. Проверяйте прогресс в /proc/mdstat: там могут отображаться resync или recovery, процент выполнения, скорость и оценка оставшегося времени.

Можно ли собрать RAID из дисков разного размера?

Да, но полезный размер массива обычно будет ограничен наименьшим доступным компонентом. Без явного параметра --size mdadm учитывает размер самого маленького устройства с поправкой на метаданные и выравнивание. Физическая маркетинговая ёмкость дисков может различаться, но лишнее пространство на более крупных участниках не будет использовано.

Как выбрать диск для замены вышедшего из строя участника RAID?

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

Можно ли использовать описанную настройку для загрузочного RAID?

Зависит от конфигурации сервера. Описанный порядок рассчитан на массив данных, не содержащий корневую файловую систему. Для загрузки ОС с MD RAID нужно отдельно проверить разметку, загрузчик, состав initramfs и совместимость формата метаданных с выбранной схемой загрузки.

Как понять, что RAID работает в деградированном режиме?

Проверьте /proc/mdstat и mdadm --detail. В /proc/mdstat символ _ вместо ожидаемой буквы U, например [U_], означает отсутствующего участника. В выводе mdadm --detail признаками проблемы будут состояния degraded или failed, ненулевое число Failed Devices либо количество Active Devices меньше Raid Devices.