С чего начать Первые шаги трек · 15 ступеней
Linux Labs

Программный RAID mdadm

4 мин Linux · mdadm

Программный RAID в Linux через mdadm: создание массива, статус, замена отказавшего диска.

Шпаргалка

6 команд Версия для печати
  • cat /proc/mdstat статус (degraded? ребилд?)
  • sudo mdadm --detail /dev/md0
  • sudo mdadm /dev/md0 --fail /dev/sdX --remove /dev/sdX пометить и убрать сбойный
  • sudo mdadm /dev/md0 --add /dev/sdY добавить диск взамен
  • sudo mdadm --grow /dev/md0 --raid-devices=4 расширить
  • sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf сохранить

Обзор

mdadm собирает несколько дисков в RAID-массив (/dev/md0) средствами ядра. Зачем: отказоустойчивость (RAID1/5/6) или скорость (RAID0).

Уровни кратко: RAID0 — полоса (быстро, без избыточности), RAID1 — зеркало, RAID5/6 — чётность (переживает 1/2 диска). Поверх массива — ФС (filesystems) или LVM.

Рецепты

3

Создание

bash
cat /proc/mdstat                  # статус всех массивов (главная команда!)
sudo mdadm --detail /dev/md0      # подробности массива
lsblk                             # дерево устройств

# зеркало из двух дисков:
sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc
# RAID5 из трёх + горячий резерв:
sudo mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sd{b,c,d} --spare-devices=1 /dev/sde
sudo mkfs.ext4 /dev/md0

# сохранить конфигурацию (чтобы собирался при загрузке):
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
sudo update-initramfs -u

Замена диска и рост

bash
cat /proc/mdstat                  # какой диск выпал ([_U] / [U_])
sudo mdadm /dev/md0 --fail /dev/sdc --remove /dev/sdc    # пометить и убрать сбойный
# заменить физически, затем добавить новый:
sudo mdadm /dev/md0 --add /dev/sdc
watch cat /proc/mdstat            # следить за ребилдом (recovery)

# добавить диск и расширить массив (RAID5):
sudo mdadm --add /dev/md0 /dev/sdf
sudo mdadm --grow /dev/md0 --raid-devices=4
# затем растянуть ФС поверх (resize2fs/xfs_growfs, см. filesystems)

sudo mdadm --stop /dev/md0        # остановить ; --assemble --scan — собрать
sudo mdadm --zero-superblock /dev/sdX   # стереть метаданные RAID с диска (переиспользовать)

Мониторинг

bash
sudo mdadm --monitor --scan --daemonise   # шлёт письма при сбоях
# адрес: MAILADDR в /etc/mdadm/mdadm.conf  (см. postfix)
sudo mdadm --detail /dev/md0 | grep -E 'State|Failed|Active'

Неполадки

5

Массив degraded ([_U])

Диск выпал. /proc/mdstat и mdadm --detail покажут какой. Замени и --add — пойдёт ребилд. Не тяни: при RAID1/5 второй сбой = потеря данных.

Не собирается после ребута

Конфиг не сохранён. mdadm --detail --scan >> /etc/mdadm/mdadm.conf + update-initramfs -u. Собрать вручную: mdadm --assemble --scan.

Ребилд идёт вечно/медленно

Нормально для больших дисков (часы). Скорость — /proc/sys/dev/raid/speed_limit_* (см. sysctl). Не выключай питание во время ребилда.

RAID — не бэкап!

RAID спасает от отказа диска, но не от удаления/шифровальщика/ошибки. Делай бэкапы (restic/rsync/tar) отдельно.

Диск был в старом массиве, не даёт пересоздать

Остались метаданные: sudo mdadm --zero-superblock /dev/sdX.

Опасно

Опасно. mdadm --create на дисках, где уже есть данные или чужой массив, перезаписывает суперблок и может уничтожить данные без предупреждения — --assemble для существующего массива, --create только для дисков, в которых ты уверен. mdadm --zero-superblock стирает метаданные RAID безвозвратно: применяй только к дискам, выведенным из массива и больше не нужным в этом составе.

mkfs поверх /dev/md0 стирает файловую систему массива так же необратимо, как на обычном разделе — RAID защищает от отказа диска, но не от ошибки команды.

См. также

  • filesystems — Создание ФС, метки и UUID, проверка fsck, типы ext4/xfs.
  • lvm — PV → VG → LV; гибкое управление дисками, расширение и снапшоты.
  • disk-usage — Куда делось место и inode — df, du, поиск крупных файлов, ловушки.
Загрузка…