RAID на Linux собирается программно через mdadm: не нужен отдельный контроллер, массив описывается в конфигурации и переносится между машинами. Разберём, как создать массив, настроить мониторинг, пережить отказ диска и заменить его без остановки сервисов.

Что даёт RAID и чего он не даёт

RAID1 зеркалит данные, RAID5 добавляет один диск избыточности, RAID6 — два. Это защита от отказа диска, но не от пожара, форматирования по ошибке и шифровальщика. Резервные копии остаются обязательными.

# доступные диски
lsblk -o NAME,SIZE,MODEL,SERIAL,TRAN
# текущие массивы
cat /proc/mdstat
sudo mdadm --detail --scan

Используйте диски одинакового объёма и лучше не из одной партии: одновременные отказы близких по возрасту дисков встречаются.

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

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

# RAID1 из двух дисков
sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc
# RAID5 из трёх
sudo mdadm --create /dev/md5 --level=5 --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd
# смотреть сборку
watch -n2 cat /proc/mdstat
# сохранить конфигурацию
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf

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

Файловая система и монтирование

# форматировать (один раз)
sudo mkfs.ext4 /dev/md0
# в fstab — по UUID, а не по имени /dev/md0
sudo blkid /dev/md0
echo 'UUID=xxxx-xxxx  /srv/data  ext4  defaults,nofail  0  2' | sudo tee -a /etc/fstab
sudo mount /srv/data
df -h /srv/data

Опция nofail не даёт системе встать на загрузке, если массив недоступен. Для сервера это часто важнее доступности данных на этапе загрузки.

Мониторинг состояния

Массив «тихо» деградирует: пока он не отказал, никто не смотрит на /proc/mdstat. Настройте оповещения.

# состояние
cat /proc/mdstat
sudo mdadm --detail /dev/md0 | grep -E "State|Active|Failed"
# демон оповещений
sudo apt install mdadm
grep -E "^MAILADDR|^PROGRAM" /etc/mdadm/mdadm.conf
# тест оповещения
echo "test" | mail -s "mdadm test" admin@example.com

Дополнительно читайте SMART: деградация обычно предшествует отказу, и Reallocated_Sector растёт за недели.

sudo smartctl -A /dev/sdb | grep -E "Reallocated|Pending|Uncorrect"

Замена отказавшего диска

Процесс линейный: отметить диск как failed, вынуть его, вставить новый, запустить восстановление.

# отметить отказ
sudo mdadm --manage /dev/md0 --fail /dev/sdb
# отсоединить
sudo mdadm --manage /dev/md0 --remove /dev/sdb
# физически заменить диск, затем
sudo mdadm --manage /dev/md0 --add /dev/sdb
# следить за восстановлением
watch -n5 cat /proc/mdstat

Пока идёт ребилд, риск второго отказа критичен. Не запускайте в это время тяжёлые задачи и избегайте перезагрузок.

Автозагрузка массива

# сгенерировать конфиг
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
# обновить initramfs
sudo update-initramfs -u
# проверить, что массив появился в образе
lsinitramfs /boot/initrd.img-$(uname -r) 2>/dev/null | grep -i mdadm || echo "проверьте вывод"

Производительность и настройки

Чтение в RAID1 распределяется по дискам, запись — нет. Для RAID5 важен размер чанка и поведение stripe_cache. Проверяйте реальными тестами, а не рекомендациями из интернета.

# быстрый тест чтения/записи (аккуратно: пишет данные!)
fio --name=mdtest --filename=/srv/data/testfile --rw=readwrite --size=1G --runtime=30 --time_based
# семантика сброса кэша
cat /sys/block/md0/md/sync_action
# выровнять массив после ребилда
echo check > /sys/block/md0/md/sync_action
cat /sys/block/md0/md/sync_action

Типичные ошибки

  • Монтирование по имени /dev/md0 без UUID — после ребута порядок может измениться.
  • Отсутствие оповещений: отказ замечают слишком поздно.
  • RAID без бэкапов: защита от отказа диска, а не от ошибки оператора.
  • Замена диска на диск большего объёма без пересчёта — используется только старый размер.
  • Пропущен update-initramfs — после обновления ядра массив не поднимается.
# диагностика загрузки
cat /proc/mdstat
grep -i md /var/log/syslog | tail -20
sudo mdadm --examine /dev/sdb | head -20

Расчёт ёмкости и выбор уровня

Перед созданием массива посчитайте, сколько места останется после отказа диска: RAID5 из трёх дисков даёт два полезных, RAID1 из двух — один.

# полезная ёмкость RAID5 = (n-1) × размер_диска
# пример: 3 × 4 ТБ -> ~8 ТБ
sudo mdadm --detail /dev/md5 | grep -E "Total|Used"
# свободное место на смонтированном массиве
df -h /srv/data

Для больших дисков предпочтительнее RAID10: он быстрее при записи и проще при восстановлении, но требует минимум четырёх дисков. Для небольших файловых хранилищ RAID1 остаётся самым предсказуемым вариантом.

Плановое обслуживание

Раз в квартал запускайте проверку избыточности. Без неё скрытые ошибки обнаруживаются только в момент отказа, когда массив уже деградировал.

# проверка (READ-ONLY, безопасна под нагрузкой)
echo check | sudo tee /sys/block/md5/md/sync_action
# просмотр прогресса
watch -n5 cat /proc/mdstat
# после проверки
cat /sys/block/md5/md/sync_action   # CHECK_COMPLETED
# при обнаружении ошибок — восстановление (пишет данные)
echo repair | sudo tee /sys/block/md5/md/sync_action

После каждого обслуживания сверяйте mdadm --detail: состояние clean означает, что массив в порядке.

Аппаратный или программный контроллер

  • Программный RAID не зависит от железа: массив переносится на другую машину.
  • Аппаратный сбрасывает нагрузку на CPU, но привязывает данные к контроллеру.
  • Бюджетные RAID-контроллеры в режиме JBOD часто бесполезны: берите HBA в режиме прямого доступа.
  • Для домашнего хранилища mdadm или ZFS обычно удобнее.
# посмотреть, видит ли система HBA
lspci | grep -i -E "sas|raid|mega"
sudo lspci -vv | grep -A3 -i sas | head -20
# встроенные контроллеры иногда требуют отключения в BIOS

Итог

mdadm даёт программный RAID без оборудования: создание, оповещения, замена диска и ребилд — штатные операции. Настройте MAILADDR, монтируйте по UUID, обновляйте initramfs и следите за SMART. И помните: RAID не отменяет резервные копии — он защищает от другого сценария.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Поделиться: Telegram ВКонтакте