Настройка программного RAID в Linux с помощью mdadm

Введение

В предыдущих статьях рубрики мы разбирали теорию уровней RAID и работу с аппаратными контроллерами LSI через StorCLI. Но далеко не на каждом сервере есть отдельный RAID-контроллер и в этом случае на помощь приходит программный RAID, реализованный средствами самой операционной системы. В Linux для этого используется утилита mdadm (Multiple Disk Administration) стандартный инструмент управления программными RAID-массивами (Multiple Device, /dev/md*), входящий в состав ядра Linux и большинства дистрибутивов.

В этой статье пошагово разберём, как установить mdadm, создать массивы RAID 1, RAID 5 и RAID 10, сохранить конфигурацию, смонтировать массив и проверять его состояние.

Официальная документация проекта Linux Software RAID (mdadm), поддерживаемая сообществом ядра Linux, доступна по адресу: raid.wiki.kernel.org.

Чем программный RAID отличается от аппаратного


В программном RAID всю логику массива (распределение данных, вычисление чётности, отслеживание состояния дисков) берёт на себя центральный процессор сервера под управлением утилиты mdadm, а не отдельный чип на RAID-контроллере. У такого подхода есть свои плюсы и минусы:

Плюсы mdadm:

  • Не требует покупки отдельного RAID-контроллера можно использовать самые обычные SATA/SAS-порты материнской платы.
  • Гибкая настройка и подробная диагностика прямо из командной строки Linux.
  • Массив не привязан к конкретной модели контроллера диски можно перенести на любой сервер с Linux и собрать массив заново.

Минусы mdadm:

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

Подготовка: установка mdadm

Утилита mdadm доступна в репозиториях всех основных дистрибутивов Linux.

Debian / Ubuntu:

bash

sudo apt update
sudo apt install mdadm

RHEL / CentOS / AlmaLinux / Rocky Linux:

bash

sudo dnf install mdadm

Проверить, что утилита установлена, можно командой:

bash

mdadm --version

Важно: перед созданием массива определите, с какими дисками будете работать, и убедитесь, что на них нет нужных данных создание RAID-массива уничтожит всю информацию на выбранных дисках. Посмотреть список дисков в системе можно командой lsblk или sudo fdisk -l.

Создание массива RAID 1 (зеркало)

Для примера используем два диска /dev/sdb и /dev/sdc.

bash

sudo mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc

Разберём команду:

  • --create /dev/md0 — создать новое устройство массива с именем /dev/md0.
  • --level=1 — уровень RAID (в данном случае RAID 1).
  • --raid-devices=2 — количество дисков в массиве.
  • /dev/sdb /dev/sdc — сами диски, из которых собирается массив.

После запуска команды начнётся синхронизация (создание зеркальной копии данных) на дисках большого объёма это может занять продолжительное время, но сам массив уже доступен для использования во время синхронизации.

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

Для RAID 5 требуется минимум три диска используем /dev/sdb, /dev/sdc и /dev/sdd.

bash

sudo mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd

Если хотите сразу добавить в массив резервный диск (spare), который автоматически подключится при отказе одного из основных, укажите его через --spare-devices:

bash

sudo mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd --spare-devices=1 /dev/sde

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

Для RAID 10 нужно чётное количество дисков, минимум четыре:

bash

sudo mdadm --create --verbose /dev/md0 --level=10 --raid-devices=4 /dev/sdb /dev/sdc /dev/sdd /dev/sde

Если хочется тонко управлять раскладкой (near, far, offset layout) для RAID 10, можно задать её отдельным параметром --layout по умолчанию используется n2 (near layout с двумя копиями), что подходит для большинства сценариев.

Проверка состояния массива

Самый быстрый способ посмотреть статус всех массивов прочитать файл /proc/mdstat:

bash

cat /proc/mdstat

Более подробную информацию по конкретному массиву даёт команда:

bash

sudo mdadm --detail /dev/md0

Она покажет уровень RAID, состояние (clean, active, degraded и т.д.), список дисков массива и их роль (active, spare, faulty), а также прогресс синхронизации, если она ещё не завершена.

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

После того как массив создан, на нём нужно создать файловую систему и смонтировать его, как обычный раздел:

bash

sudo mkfs.ext4 /dev/md0
sudo mkdir -p /mnt/raid
sudo mount /dev/md0 /mnt/raid

Чтобы массив автоматически монтировался при перезагрузке сервера, добавьте запись в /etc/fstab. Сначала узнайте UUID массива:

bash

sudo blkid /dev/md0

Затем добавьте в /etc/fstab строку вида:

UUID=ваш-uuid  /mnt/raid  ext4  defaults  0  2

Сохранение конфигурации массива

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

bash

sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf

На RHEL-подобных дистрибутивах файл конфигурации обычно находится по пути /etc/mdadm.conf. После обновления файла конфигурации нужно обновить initramfs, чтобы массив собирался ещё на этапе загрузки системы:

Debian / Ubuntu:

bash

sudo update-initramfs -u

RHEL / CentOS / AlmaLinux / Rocky Linux:

bash

sudo dracut -f

Что делать при отказе диска

Если один из дисков массива вышел из строя, mdadm пометит его как faulty. Порядок действий:

  1. Убедитесь, что диск действительно отказал:

bash

   sudo mdadm --detail /dev/md0
  1. Пометьте диск как отказавший (если это ещё не произошло автоматически) и удалите его из массива:

bash

   sudo mdadm /dev/md0 --fail /dev/sdc
   sudo mdadm /dev/md0 --remove /dev/sdc
  1. Физически замените диск (при поддержке hot-swap это можно сделать без выключения сервера общие принципы такой замены разобраны в статье «Диагностика и замена дисков в RAID-массиве без остановки сервера», хотя там речь об аппаратных контроллерах, сама логика горячей замены дисков схожа).
  2. Добавьте новый диск в массив — начнётся автоматический ребилд:

bash

   sudo mdadm /dev/md0 --add /dev/sdc
  1. Следите за прогрессом восстановления через cat /proc/mdstat.

Полезные команды mdadm: шпаргалка

КомандаЧто делает
cat /proc/mdstatБыстрый статус всех массивов
sudo mdadm --detail /dev/md0Подробная информация по массиву
sudo mdadm --stop /dev/md0Остановить (разобрать) массив
sudo mdadm --assemble --scanСобрать все массивы из конфигурации
sudo mdadm /dev/md0 --fail /dev/sdXПометить диск как отказавший
sudo mdadm /dev/md0 --remove /dev/sdXУдалить диск из массива
sudo mdadm /dev/md0 --add /dev/sdXДобавить диск в массив (например, после замены)
sudo mdadm --detail --scanВывести конфигурацию массива для записи в mdadm.conf

Частые вопросы

Можно ли использовать mdadm вместе с аппаратным RAID-контроллером? Технически можно создать программный массив поверх логических дисков контроллера, но это усложняет диагностику и обычно не рекомендуется. Как правило, выбирают либо полностью аппаратный, либо полностью программный подход.

Нагружает ли mdadm процессор сервера? Да, особенно уровни с вычислением чётности (RAID 5, RAID 6) чем больше объём операций записи, тем выше нагрузка на CPU. На современных серверных процессорах это обычно не критично, но стоит учитывать при планировании нагруженных систем.

Что произойдёт с массивом mdadm, если перенести диски на другой сервер? Информация о массиве хранится в служебной области (суперблоке) на самих дисках, поэтому диски можно перенести на другой сервер с Linux и собрать массив заново командой mdadm --assemble --scan конкретный контроллер или материнская плата для этого не требуются.

Как узнать, что синхронизация или ребилд массива завершены? В файле /proc/mdstat во время синхронизации отображается процент выполнения и оценка оставшегося времени; когда процесс завершится, эта строка исчезнет, а состояние массива в mdadm --detail изменится на clean.

Заключение

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

Читайте также в рубрике RAID на andko.ru

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Популярные
Новые Старые

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x
Menu