linux-labs

Вики / Хранилище и ФС

mdadm (программный RAID)

Концепция Linux · mdadm ХранилищеТраблшутинг

Software RAID в Linux — создание массива, статус, замена диска.

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

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

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

Массив 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.

cat /proc/mdstat                  # статус (degraded? ребилд?)
sudo mdadm --detail /dev/md0
sudo mdadm /dev/md0 --fail /dev/sdX --remove /dev/sdX ; --add /dev/sdY   # замена
sudo mdadm --grow /dev/md0 --raid-devices=N     # расширить
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf           # сохранить

См. также