mdadm — утилита для управления программными RAID массивами в GNU/Linux (Linux Software Raid), ранее известная, как mdctl. MD — сокращение от multi disk.

  • LINEAR (JBOD) — расширение размера логического диска за счет нескольких физических дисков;
  • RAID0 (striping) — распределение блоков на нескольких физических дисках без обеспечения отказоустойчивости;
  • RAID1 (mirroring) — зеркалирование, запись одних и тех же данных одновременно на два диска, что обеспечивает отказоустойчивость при отказе одного из дисков;
  • RAID5 — массив с обеспечением отказоустойчивости за счет минимальной избыточности (требуется минимум три диска);
  • RAID6;
  • MULTIPATH — не RAID-массив, позволяющий создавать разные псевдо-дисковые устройства для одного физического диска;

 

С помощью mdadm можно выполнять 7 групп операций:

  • Create — создание RAID-массива из нескольких дисков (с суперблоком на каждом устройстве).
  • Assemble — сборка (ранее созданного) массива и его активация. Диски из которых собирается массив могут указываться явно или будет выполнен их автоматический поиск. mdadm проверяет, образуют ли компоненты корректный массив.
  • Build — объединение дисков в массив (без суперблоков). Для таких массивов mdadm не различает создание и последующую сборку. Также невозможно проверить, были ли указаны необходимые устройства в верном порядке. Не используйте этот режим, если вы не знаете зачем это нужно.
  • Manage — Управление массивом: добавление новых свободных дисков (spares) и удаление неработоспособных (faulty devices).
  • Follow/Monitor — Следить за одним или несколькими md-устройствами и реагировать на изменение их состояния. Это имеет смысл только для массивов уровней 1, 4, 5, 6 или multipath-массивов, так как только они могут иметь различные состояния. raid0 или linear не могут иметь недостающих, запасных или сбойных дисков, поэтому там не за чем следить.
  • Grow — расширение или уменьшение размера (shrink) массива, либо иное его реформирование (reshape). На данный момент поддерживается изменение активного размера компонентов в RAID-массивах уровней 1/4/5/6, а также изменение количества активных устройств в RAID1.
  • Misc — прочие операции с независимыми дисками. Например: просмотр и модификация суперблоков массива и остановка активных массивов.

 

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

 

Проверить статус массива:

# sudo cat /proc/mdstat

Подробная информация о массиве:

# sudo mdadm -D /dev/mdX

Проверить состоит ли диск в каком-либо массиве:

# sudo mdadm -Q /dev/sdX1

 

Как выполнить проверку целостности программного RAID-массива md0:

# echo 'check' >/sys/block/md0/md/sync_action

Как посмотреть нашлись ли какие-то ошибки в процессе проверки программного RAID-массива по команде check или repair:

# cat /sys/block/md0/md/mismatch_cnt

----------------------------------------------------------+

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

Рассмотрим как выполнить настройку RAID-массива 5 уровня на трёх дисковых разделах. Мы будем использовать разделы:

/dev/hde1
/dev/hdf1
/dev/hdg1

Если разделы смонтированы, то размонтиуем их:

# sudo umount /dev/hde1
# sudo umount /dev/hdf1
# sudo umount /dev/hdg1

Создадим разделы на дисках:

# sudo fdisk -l

# sudo fdisk /dev/hdX

n

p

1

Enter

Enter

w

Меняем типы разделов на Linux RAID autodetect:

# sudo fdisk -l

# sudo fdisk /dev/hdX

t

1

L

fd

w

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

# sudo mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/hde1 /dev/hdf1 /dev/hdg1

Если вы хотите сразу создать массив, где диска не хватает (degraded) просто укажите слово missing вместо имени устройства. Для RAID5 это может быть только один диск; для RAID6 — не более двух; для RAID1 — сколько угодно, но должен быть как минимум один рабочий.

 

Проверим сборку массива:

# cat /proc/mdstat

Создадим файловую систему поверх массива:

# sudo mkfs.ext4 /dev/md0

 

Имеет смысл для лучшей производительности файловой системы указывать при создании количество дисков в рейде и количество блоков файловой системы которое может поместиться в один страйп ( chunk ), это особенно важно при создании массивов уровня RAID0,RAID5,RAID6,RAID10. Для RAID1 ( mirror ) это не имеет значения так как запись идет всегда на один device, a в других типах рейдов дата записывается последовательно на разные диски порциями соответствующими размеру stripe.Например если мы используем RAID5 из 3 дисков, с дефолтным размером страйпа в 64К и используем файловую систему ext3 с размером блока в 4К то можно вызывать команду mkfs.ext вот так:

# sudo mkfs.ext4 -b 4096 -E stride=16,stripe-width=32 /dev/md0

stripe-width обычно расчитывается как stride * N ( N это дата диски в массиве - например в RAID5 - два дата диска и один parity ) Для неменее популярной файловой системы XFS надо указывать не количество блоков файловой системы соответствующих размеру stripe в массиве, а непосредственно размер самого страйпа

# sudo mkfs.xfs -d su=64k,sw=3 /dev/md0

 

Создадим конфигурационный файл mdadm.conf

# sudo echo "DEVICE partitions" > /etc/mdadm/mdadm.conf
# sudo mdadm --detail --scan | awk '/ARRAY/ {print}' >> /etc/mdadm/mdadm.conf

! Команду: mdadm --detail --scan выполняем без --verbose чтобы не было проблем при загрузке.

 

Создадим директорию для монтирования:

# mkdir /raid

Смотрим UUID массива md0:

# ls -l /dev/disk/by-uuid/

или:

# blkid | grep md0

 

Изменяем файл /etc/fstab, добавляя:

/dev/md0      /raid     ext4    defaults    1 2

или UUID из blkid:

UUID=a6557ac9-a3fe-4018-9e39-061aa17584e1      /raid     ext4    defaults    1 2

! При указании UUID в конфиге /etc/fstab мы защищаем себя от сбоев в случае переподключения дисков другим образом и изменений коротких наименований sd{a-z}!!!

 

Если мы объединяли в RAID-массив разделы, которые использовались раньше, нужно отключить их монтирование: удалить или закомментировать соответствующие строки в файле /etc/fstab. Закомментировать строку можно символом #.

#/dev/hde1       /data1        ext3    defaults        1 2

#/dev/hdf1       /data2        ext3    defaults        1 2

#/dev/hdg1       /data3        ext3    defaults        1 2

Примонтиуем массив:

# sudo mount -a

или:

# sudo mount /raid

----------------------------------------------------------+

Добавление диска в массив (прост или для резерва):

# sudo mdadm /dev/md0 -a /dev/sdX1

----------------------------------------------------------+

Сборка существующего массива.

 

Собрать существующий массив можно с помощью mdadm --assemble. Как дополнительный аргумент указывается, нужно ли выполнять сканирование устройств, и если нет, то какие устройства нужно собирать.

# sudo mdadm --assemble /dev/md0 /dev/hde1 /dev/hdf1 /dev/hdg1
# sudo mdadm --assemble --scan

----------------------------------------------------------+

Расширение массива.

Для расширения RAID 1, 10 необходимо последовательно поменять все диски массива на диски с большим объемом, после чего выполнить следующие действия.

Можно воспользоваться автоматическим расширением с помощью команды:

# sudo mdadm --grow /dev/md0 --size=max

 

Для расширения RAID 5, 6 необходимо последовательно поменять все диски массива на диски с большим объемом, после чего выполнить следующие действия.

Добавим дополнительный диск в массив:

# sudo mdadm /dev/md0 -a /dev/sdX1

Проверяем, что диск добавлен:

# cat /proc/mdstat

Если диск добавлен, то выполняем команду указывая ключ -G (--grow) и новое число дисков массива с помощью ключа -nX (--raid-devices=X).

Рекомендуется задать файл бэкапа на случай прерывания перестроения массива, например добавить:

--backup-file=/var/backup

# sudo mdadm -G /dev/md0 -n4

или:

# sudo mdadm -G /dev/md0 --raid-devices=4

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

  /proc/sys/dev/raid/speed_limit_min
  /proc/sys/dev/raid/speed_limit_max

???Нужно обновить конфигурационный файл с учётом сделанных изменений:

# sudo mdadm --detail --scan >> /etc/mdadm/mdadm.conf

# sudo vi /etc/mdadm/mdadm.conf

После расширения массива необходимо расширить файловую систему!

 

Отмонтируем:

# sudo umount /dev/md0

 И проверим ФС:

# sudo e2fsck -f /dev/md0

Если всё ок, то расширяем ФС:

# sudo resize2fs /dev/md0

Примонтируем массив:

# sudo mount /dev/md0 /test

----------------------------------------------------------+

Иногда требуется вручную добавлять информацию в файл mdadm.conf. Взять ее можно, выполнив команду:

# sudo mdadm --detail --scan

В результате нам будет выведена информация вида:

ARRAY /dev/md/0 metadata=1.2 name=server:0 UUID=74c51786:16bbb1af:469a4f42:76ec9654
ARRAY /dev/md/1 metadata=1.2 name=server:1 UUID=6c65a539:36d0f116:b1194783:fc35d949
ARRAY /dev/md/2 metadata=1.2 name=server:2 UUID=55c01664:2cc1aa5b:5257948b:a7ea760c
ARRAY /dev/md/3 metadata=1.2 name=server:3 UUID=cf13c857:59adbacc:165c987e:d7c7f8a1

Её и добавляем в файл mdadm.conf

----------------------------------------------------------+

Если один из компонентов массива переходит в статус «Failed», то обычно помогает его ручное удаление из массива, а затем – добавление заново. Например:

# sudo mdadm --manage /dev/md0 -r /dev/sdX1

# sudo mdadm --manage /dev/md0 -a /dev/sdX1

Чтобы пометить раздел диска в массиве как сбойный:

# sudo mdadm /dev/md0 -f /dev/sda1

----------------------------------------------------------+

Замена неисправного диска в массиве:

http://8.tw1.ru/index.php/problems/37-zamena-diska-v-programmnom-raid1

http://8.tw1.ru/index.php/problems/36-zamena-diska-v-programmnom-raid10

----------------------------------------------------------+

Переименование массива.

Для начала отмонтируйте и остановите массив:

# sudo umount /dev/md0
# sudo mdadm --stop /dev/md0

Затем необходимо пересобрать как md5 каждый из разделов sd[abcdefghijk]1

# sudo mdadm --assemble /dev/md5 /dev/sd[abcdefghijk]1 --update=name

или так:

# sudo mdadm --assemble /dev/md5 /dev/sd[abcdefghijk]1 --update=super-minor

Примонтируем массив:

# sudo mount /dev/md5 /test

 Перезагружаем?

# sudo reboot

----------------------------------------------------------+

Удаление массива.

 

Остановить массив:

# sudo umount /raid

# sudo mdadm -S /dev/md0

Очищаем суперблоки RAID на разделах, из которых собран массив:

# sudo mdadm --zero-superblock /dev/sd[a-e]1

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

# sudo dd if=/dev/zero of=/dev/hde1 bs=512 count=1

# sudo dd if=/dev/zero of=/dev/hdf1 bs=512 count=1


----------------------------------------------------------+

Материалы:

https://wiki.dieg.info/mdadm

https://ru.wikibooks.org/wiki/Mdadm

http://xgu.ru/wiki/mdadm

https://habrahabr.ru/post/200194/

http://blog.102web.ru/howto/debian-mdadm/

пересборка массива: https://www.linux.org.ru/forum/linux-hardware/10723317

установка загрузчика: http://www.kochetov.net.ua/?p=310