Как создать RAID1 на Linux с mdadm: пошаговая инструкция


Отказ одного накопителя не должен оборачиваться простоем сервиса и потерей данных. Зеркальный массив RAID1 страхует от этого без покупки отдельного контроллера: каждый байт одновременно ложится на два диска, и если один из них выйдет из строя, система продолжит работать со второго.

В Linux всем этим заведует встроенная утилита mdadm. Ниже — практический разбор: как с нуля собрать RAID1, от разметки накопителей до автозагрузки и контроля состояния. Примеры команд даны для Ubuntu/Debian; где поведение в RHEL-семействе отличается, это отмечено отдельно.

Что такое программный RAID и mdadm

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

RAID1: принцип зеркалирования

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

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

Программный RAID против аппаратного

Параметр mdadm (программный) Аппаратный контроллер
Затраты без доплат требуется контроллер
Миграция на другой сервер без проблем завязан на контроллер
Расход ресурсов CPU для RAID1 минимальный снимается контроллером

Под зеркало mdadm подходит как нельзя лучше: вычислительные затраты на дублирование ничтожны, а сам массив не привязан к железу и без труда переезжает с сервера на сервер.

Что понадобится перед началом

  • Два накопителя одинакового размера (в примере — /dev/vdb и /dev/vdc, типичные virtio-диски облачной ВМ).
  • Права root либо учётная запись с sudo.
  • Свежая резервная копия.

Важно: содержимое дисков, которые войдут в массив, будет стёрто. Дважды проверьте имена устройств, прежде чем продолжать.

В руководстве собирается отдельный массив под данные, который затем монтируется в каталог. Перенос на RAID1 корневого и загрузочного разделов — задача со своей спецификой (метаданные версии 1.0, запись GRUB сразу на оба диска), и здесь она не затрагивается.

Установка mdadm

sudo apt update
sudo apt install mdadm
mdadm --version

В RHEL/CentOS/Rocky пакет ставится через sudo dnf install mdadm.

Подготовка и разметка дисков

Выведем перечень накопителей и удостоверимся, что работаем именно с нужными:

lsblk

На каждом диске создадим таблицу разделов GPT и один раздел во весь объём с флагом raid. Для /dev/vdb это выглядит так:

sudo parted /dev/vdb --script mklabel gpt
sudo parted /dev/vdb --script mkpart primary 0% 100%
sudo parted /dev/vdb --script set 1 raid on

Те же три команды повторяем для /dev/vdc. В итоге появляются разделы /dev/vdb1 и /dev/vdc1.

Если диски раньше работали в составе другого массива, сотрём остаточные метаданные, чтобы они не спровоцировали конфликт:

sudo mdadm --zero-superblock /dev/vdb1 /dev/vdc1

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

Зеркало собирается одной командой:

sudo mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/vdb1 /dev/vdc1

Что означают аргументы:

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

Если разделы не помечены загрузочными, mdadm может предупредить о формате метаданных и попросить подтверждение — для дискового (незагрузочного) массива отвечаем y.

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

Сразу после сборки запускается первичная синхронизация (resync): диски приводятся к одинаковому содержимому. Пользоваться массивом можно немедленно, не дожидаясь её завершения. Ход процесса отображает /proc/mdstat:

cat /proc/mdstat

Примерно такой вывод:

md0 : active raid1 vdc1[1] vdb1[0]
      209584128 blocks super 1.2 [2/2] [UU]
      [====>................]  resync = 23.4% (49072192/209584128) finish=11.3min speed=235008K/sec

Запись [2/2] говорит, что в строю 2 диска из 2, а [UU] — оба исправны (U — Up). Будь один из них недоступен, на его месте оказался бы прочерк: [U_]. Развёрнутые сведения покажет:

sudo mdadm --detail /dev/md0

Форматирование и монтирование

Создадим поверх массива файловую систему ext4, каталог для подключения и смонтируем том:

sudo mkfs.ext4 /dev/md0
sudo mkdir -p /mnt/storage
sudo mount /dev/md0 /mnt/storage
df -h /mnt/storage

После этого массив доступен в /mnt/storage и ведёт себя как обычный диск.

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

Чтобы после перезагрузки система знала, как собрать массив, занесём его описание в конфигурационный файл:

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

В Ubuntu и Debian файл лежит по пути /etc/mdadm/mdadm.conf, в системах на базе RHEL — /etc/mdadm.conf. Команда дописывает строку ARRAY в конец файла, поэтому при повторном запуске (например, когда массив пересобирают) загляните в конфиг и убедитесь, что описание массива в нём одно, без дубля.

Затем пересоберём образ initramfs, чтобы массив поднимался на раннем этапе старта:

sudo update-initramfs -u

В RHEL/CentOS для этого служит sudo dracut -f.

Важно: пропускать этот шаг нельзя. Без строки в mdadm.conf и обновлённого initramfs массив после перезагрузки рискует не собраться вовсе или получить другое имя — например, /dev/md127.

Автозагрузка через fstab

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

sudo blkid /dev/md0

Добавляем в /etc/fstab строку (UUID подставьте свой):

UUID=ваш-uuid  /mnt/storage  ext4  defaults,nofail  0  2

Флаг nofail не даст серверу застрять на загрузке, если с массивом что-то пойдёт не так. Запись проверяем без перезагрузки:

sudo mount -a

Отсутствие ошибок означает, что всё прописано верно.

Мониторинг mdadm и email-оповещения

Толк от RAID есть лишь тогда, когда о сбое узнают вовремя. mdadm способен наблюдать за массивами в фоне и отправлять письма. Адрес задаётся в конфиге:

MAILADDR raid-alerts@example.com

Демон наблюдения (mdmonitor под управлением systemd) в большинстве дистрибутивов уже работает и читает этот файл. Учтите: само письмо уходит через системный MTA, поэтому без настроенного почтовика (postfix, exim или лёгкий msmtp) уведомление не отправится, даже если тестовая команда отработала без ошибок. Проверить рассылку поможет тестовое уведомление:

sudo mdadm --monitor --scan --test --oneshot

Для ручных проверок состояния пригодятся две команды:

cat /proc/mdstat
sudo mdadm --detail /dev/md0

Не лишним будет завести в системе мониторинга оповещение на смену статуса массива (degraded, [U_]) — тогда на отказ диска удастся среагировать в первые же минуты.

Ежемесячно массив стоит прогонять на целостность (scrubbing): ядро перечитывает все блоки обоих дисков и выявляет скрытые сбойные секторы заранее, до того как они помешают ребилду после реальной аварии. Ручной запуск:

echo check | sudo tee /sys/block/md0/md/sync_action

Прогресс отражается в /proc/mdstat, а счётчик расхождений — в /sys/block/md0/md/mismatch_cnt (норма — ноль). В Ubuntu и Debian эта проверка уже выполняется автоматически: за неё отвечает скрипт checkarray из задания /etc/cron.d/mdadm с ежемесячным запуском.

Частые ошибки и FAQ

Массив исчез или сменил имя после перезагрузки. Почти всегда причина — пропущенное сохранение конфигурации. Внесите массив в mdadm.conf и пересоберите initramfs (update-initramfs -u либо dracut -f).

Массив в статусе inactive или auto-read-only. Соберите его вручную: sudo mdadm --assemble --scan. Состояние auto-read-only обычно снимается с первой же записью на массив.

Resync тянется слишком долго или мешает нагрузке. Скорость регулируют параметры /proc/sys/dev/raid/speed_limit_min и speed_limit_max. На работу с массивом синхронизация не влияет — данные уже защищены.

Один из дисков отказал — порядок действий. Базовая последовательность замены: пометить накопитель сбойным, убрать из массива, заменить физически, добавить новый раздел — дальше восстановление пойдёт само:

sudo mdadm --manage /dev/md0 --fail /dev/vdc1
sudo mdadm --manage /dev/md0 --remove /dev/vdc1
# физически меняем диск, затем на новом стираем старые сигнатуры и размечаем как первый:
sudo wipefs -a /dev/vdc
sudo parted /dev/vdc --script mklabel gpt
sudo parted /dev/vdc --script mkpart primary 0% 100%
sudo parted /dev/vdc --script set 1 raid on
sudo mdadm --manage /dev/md0 --add /dev/vdc1
cat /proc/mdstat   # следим за восстановлением

Для массивов примерно от сотни гигабайт mdadm по умолчанию заводит внутренний write-intent bitmap (на маленьких зеркалах его может не быть). Bitmap помечает изменённые блоки, поэтому после кратковременного отключения диска повторная синхронизация затрагивает только их, а не весь объём, — и ребилд идёт многократно быстрее.

Сервер на загрузке ждёт ввод из-за деградированного массива. Для тома с данными вопрос снимает опция nofail в fstab (мы её уже добавили). Если же на RAID1 размещён корень, поведением управляет команда sudo dpkg-reconfigure mdadm (параметр BOOT_DEGRADED в /etc/initramfs-tools/conf.d/mdadm): сервер поднимется автоматически даже с единственным живым диском, не дожидаясь администратора.

RAID — это не резервная копия. Зеркало страхует от физического отказа диска, но не спасёт от случайного удаления файлов, ошибки оператора или шифровальщика: всё это мгновенно отразится на обоих дисках. RAID1 и регулярный бэкап решают разные задачи и не заменяют друг друга.

Заключение

Сборка RAID1 на mdadm укладывается в несколько минут и не требует специального оборудования: размечаем диски, создаём массив, форматируем, прописываем автозагрузку и подключаем мониторинг. В результате сервер переживает отказ накопителя без простоя и без потери данных. Ключевое — не пропустить сохранение конфигурации и оповещения: именно они превращают набор команд в реально работающую защиту.

После перезагрузки стоит пробежаться по короткому чек-листу:

  • cat /proc/mdstat показывает [UU] — оба диска в строю;
  • том смонтирован (df -h /mnt/storage);
  • тестовое письмо от mdadm дошло до почты.

Если возиться с дисками и следить за состоянием массивов самостоятельно не хочется, эту заботу можно переложить на инфраструктуру Cloud4y — отказоустойчивое хранилище и серверы обслуживаются на стороне провайдера.


Полезный материал?
0
0
Автор: Всеволод
опубликовано: 08.06.2026
Читайте нас: 
Последние статьи
Вверх!