Найти тему

mdadm (RAID-массивы на Arch Linux)

Добрый день дорогой читатель, данное повествование не является истиной в последней инстанции, это некая инструкция (в основном для собственного пользования) по настройке программного RAID массива на Arch Linux, но справедливо и для других дистрибутивов. Действия будут происходить на KVM/QEMU для наглядности.

Что такое RAID массив? простыми словами это технология объединения двух и более накопителей в единую область хранения данных для повышения производительности и/или отказоустойчивости. По RAID массивам достаточно много информации на просторах всемирной паутины. В данном повествовании рассмотрим RAID6, так как на его примере раскрывается практически все достоинства этой технологии. Довольно "воды", приступим...

устанавливаем mdadm

sudo pacman -S mdadm

Подготовка накопителей. Я добавил в виртуальную машину восемь одинаковых по объему накопителей (8Гб как видно из скриншотов, если будут разного объема то объем массива будет рассчитываться от наименьшего накопителя) для наглядности, вероятно это избыточно. С помощью следующей команды мы их видим

-2
lsblk

далее обнулим суперблоки накопителей следующей командой, это нужно если вы ранее пользовались ими

-3
sudo mdadm --zero-superblock --force /dev/vd{b,c,d,e,f,g,h,i}

для того что бы не набирать полностью название накопителей воспользуемся конструкцией /dev/vd{b,c,d,e,f,g,h,i}, далее очистим метаданные на всех накопителях с помощью команды

-4
sudo wipefs --all --force /dev/vd{b,c,d,e,f,g,h,i}

Сборка массива. Для построения RAID6 требуется минимум 4 накопителя, собираем следующей командой

Процесс создания массива на реальном железе занимает продолжительное время
Процесс создания массива на реальном железе занимает продолжительное время
sudo mdadm --create --verbose /dev/md0 --level=6 --raid-devices=4 /dev/vd{b,c,d,e}

--create - создать новый массив

/dev/md0 - массив

--level=6 - уровень массива

--raid-devices=4 - количество используемых накопителей

/dev/vd{b,c,d,e} - накопители которые будут использоваться в массиве

*Размышления: если на этапе планирования массива имеется нужное количество накопителей, то на мой взгляд резонно использовать дополнительный параметр --spare-devices для резервирования накопителей горячей замены. Например в данном примере используем RAID6, имеется 8 накопителей из них 6 пойдут в массив 2 на горячую замену. Команда будет такой

sudo mdadm --create --verbose /dev/md0 --level=6 --raid-devices=6 --spare-devices=2 /dev/vd{b,c,d,e,f,g,h,i}

давайте посмотрим состояние накопителей с помощью известной команды

-6
lsblk

как видим на них созданы разделы md0(то бишь по названию массива) c типом raid6

Файл mdadm.conf. Переходим к созданию файла-конфига в котором будет описана конфигурация массива, если при добавление строк в конфиг будет отказано в доступе(а оно будет) войдите под root'ом командой su

-7
sudo mkdir /etc/mdadm
su
echo "DEVICE partitions" > /etc/mdadm/mdadm.conf
mdadm --detail --scan --verbose | awk '/ARRAY/ {print}' >> /etc/mdadm/mdadm.conf
exit

следующей командой можно посмотреть конфиг

-8
sudo nano /etc/mdadm/mdadm.conf

или

cat /etc/mdadm/mdadm.conf

Создание файловой системы. Далее отформатируем в нужную нам файловую систему(иначе как нам хранить файлы) для примера возьмем ext4

на реальном железе с большим объемом массива форматирование в ext4 занимает достаточно продолжительное время
на реальном железе с большим объемом массива форматирование в ext4 занимает достаточно продолжительное время
sudo mkfs.ext4 /dev/md0

Монтирование. Далее монтируем например в директорию /mnt следующей командой

-10
sudo mount /dev/md0 /mnt

командой lsblk мы видим точки монтирования

lsblk

следующей командой можно увидеть всю информацию по объему нашего смонтированного массива

-11
df -hT

Добавление в fstab. Если нам нужно смонтировать автоматически при запуске системы, то добавляем в /etc/fstab массив и по UUID монтируем его в соответствии с правилами fstab, делаем это следующей командой делается это из под root'а

-12
su
blkid /dev/md0 >> /etc/fstab

Это делается для того что бы руками не вводит UUID, будьте предельно внимательны с выше написанной командой обязательно >> таким образом вы добавляете информацию в конец файла!!! Далее приводим в соответствие с помощью текстового редактора например nano

nano /etc/fstab

должно быть согласно скрину

параметр nofail я использую для того в случае проблем с монтированием система запустилась, иначе будет ошибка и на этом система застопорится, Некая мера предосторожности.
параметр nofail я использую для того в случае проблем с монтированием система запустилась, иначе будет ошибка и на этом система застопорится, Некая мера предосторожности.

Получение информации о RAID. Что бы посмотреть полную информацию о массиве используем следую команду

-14
sudo mdadm -D /dev/md0

давайте разберем что означает каждый параметр

Version — версия метаданных.

Creation Time — дата в время создания массива.

Raid Level — уровень RAID.

Array Size — объем дискового пространства для RAID.

Used Dev Size — используемый объем для устройств. Для каждого уровня будет индивидуальный расчет

Raid Devices — количество используемых накопителей для RAID.

Total Devices — количество добавленных в RAID накопителей.

Update Time — дата и время последнего изменения массива.

State — текущее состояние. clean - все в порядке degraded - проблемы с накопителями, recovering - процесс восстановления массива, но о них чуть позже.

Active Devices — количество работающих в массиве накопителей.

Working Devices — количество добавленных в массив накопителей в рабочем состоянии.

Failed Devices — количество сбойных накопителей.

Spare Devices — количество запасных накопителей.

Consistency Policy — политика согласованности активного массива (при неожиданном сбое). По умолчанию используется resync — полная ресинхронизация после восстановления. Также могут быть bitmap, journal, ppl.

Name — имя компьютера.

UUID — идентификатор для массива.

Events — количество событий обновления.

Chunk Size — размер блока в килобайтах, который пишется на разные диски.

после идет список с накопителей и их статусы

Восстановление RAID. Давайте симулируем ситуацию в с выходом из строй одного из дисков достаточно выполнить следующую команду

-15
sudo mdadm /dev/md0 --fail /dev/vdc
sudo mdadm -D /dev/md0

И так мы видим статус массива clean, degraded то есть массив работает(данные будут доступны), но есть проблема, Failed Devices: 1 это количество сбойных накопителей. Смотрим таблицу дисков статус диска vdc faulty(неисправен) и он не используется массивом.

Давайте его удалим из массива следующей командой и посмотрим на состояние массива

-16
sudo mdadm /dev/md0 --remove /dev/vdc
sudo mdadm -D /dev/md0

Видим по информации о массиве, он работает на трех накопителях статус массива все тот же, давайте добавим исправный накопитель следующей командой и посмотрим состояние массива

на реальном железе процесс занимает продолжительное время
на реальном железе процесс занимает продолжительное время
sudo mdadm /dev/md0 --add /dev/vdf
sudo mdadm -D /dev/md0

И так, мы добавили накопитель в массив, смотрим что произошло, статус массива сменился clean, degraded, recovering третий статус(данные будут доступны, но массив будет тормозить) говорит о том что добавленный накопитель используется в массиве происходит процесс восстановления это видно по Rebild Status, так же это видно по списку накопителей, добавленный накопитель имеет статус spare rebilding.

-18

Использование Hot Spare(Горячая замена). Данный способ позволяет использовать резерв из накопителей и при сбое накопителя в массиве происходит автоматическая замена вышедшего из строй накопителя на резервный. Приступим...

-19

посмотрим какие у нас накопители не используются с помощью уже известной команды

lsblk

воспользуемся накопителями например vdg и vdh, выполним следующую команду и добавим накопители в резерв

sudo mdadm /dev/md0 --add /dev/vd{g,h}

и посмотрим состояние массива уже известной нам командой

-20
sudo mdadm -D /dev/md0

накопителями vdg и vdh в статусе spare то бишь они зарезервированы на горячую замену так же об этом нам говорит Spare Devices: 2

Давайте про симулируем ситуацию описанную выше только с выходом из строя двух накопителей, благо это позволяет RAID6, следующей командой

-21
sudo mdadm /dev/md0 --fail /dev/vd{d,e}

выставляем статус faulty на накопителях vdd и vde, смотрим состояние массива уже известной командой

sudo mdadm -D /dev/md0

как видим массив в статусе восстановления (State: clear,degraded,recovering), идет процесс Rebild, об этом нам говорит параметр Rebild Status

-22
sudo mdadm /dev/md0 --remove /dev/vd{d,e}

удалим неисправные(исходя из нашей симуляции)накопители

sudo mdadm -D /dev/md0

смотрим состояние массива

Добавление накопителя к массиву с целью расширения хранилища. Давайте теперь увеличим объем нашего массива в данный момент у нас RAID 6(Raid level: raid6) и 4 накопителя по 8Gb то бишь объем его сумма всех накопителей за минусом двух накопителей(Array Size: 16Gb)

-23

С помощью известной команды посмотрим какие накопители нам доступны

lsblk

к примеру возьмем два vdc и vdd, добавим их в массив следующей командой

sudo mdadm /dev/md0 --add /dev/vd{c,d}

посмотрим информацию о массиве, эти накопители у нас в резерве об этом говорит нам их статус spare

sudo mdadm -D /dev/md0

давайте с помощью них расширим наш массив то есть, он состоял из 4 накопителей а мы сделаем его из 6

-24

данная команда расширяет массив на 6 накопителей и соответственно объем уже изменится(6 накопителей по 8Gb за минусом 2 накопителя по итогу у нас 32Gb)

sudo mdadm --grow /dev/md0 --raid-devices=6

смотрим состояние, State: clear,reshaping изменения массива ну в данном случае расширение хранилища

sudo mdadm -D /dev/md0

давайте посмотрим какие у нас накопители используются следующей командой

-25
lsblk

в принципе их и так видно, но для наглядности сделаем через lsblk

sudo mdadm -D /dev/md0

мы расширили это видно по параметру Array Size: 32Gb

-26
df -hT

но следующая команда нам показывает что объем остался прежним то есть 16Gb, следовательно нам надо расширить файловую систему на остаток свободного места в массиве(или добавить новый раздел, нет, мы этого делать не будет но как вариан не исключаю)

sudo fdisk -l /dev/md0

так же выше написанная команда показывает что массив на 32Gb

Расширение файловой системы. Так как в примере мы используем файловую систему EXT4 то воспользуемся утилитой resize2fs(для других файловых систем другие инструменты), если же имеется графическая оболочка то рекомендую воспользоваться например GParted

-27
sudo resize2fs /dev/md0

с помощью команды выше мы расширяем раздел на массиве (как ранее было сказано используем EXT4) на всю свободную область в рамках массива

df -hT

далее команда (для наглядности опять же) говорит нам о том что раздел на массиве расширен

-28

далее на всякий случай давайте проверим раздел на корректность, для этого предварительно от монтируем массив следующей командой

sudo umount /mnt

проверяем на ошибки следующей командой

sudo fsck -y /dev/md0

ну и с монтируем обратно

sudo mount /dev/md0 /mnt

Ремонт массива. Если по каим то причинам массив перестал работать вовсе, не паникуйте это самое первое, далее все действия выполняются из под Root. Проверьте в каком статусе находится массив и его накопители командой

mdadm -D /dev/md0

например у меня однажды случилось что все накопители массива были в статуе remove, причин может быть несколько от аппаратных(заменил БП, пока полет нормальный) до програмных. Выполните следующую команды

cat /proc/mdstat

посмотрите что покажет, посмотрите что в файле конфиге

cat /etc/mdadm/mdadm.conf

если файла такого нет, надо посмотреть информацию о массива с помощью следующей команды

mdadm --detail --scan --verbose

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

mdadm --stop /dev/md0

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

mdadm --assemble --verbose --force /dev/md0 /dev/vd{b,c,d,e,f,g,h,i}

повторно проверяем данные массива командой

mdadm --detail --scan --verbose

если все верно, можно добавить информацию о массиве в конфиг командой

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

ну и последнне вероятно не будет лишним проверить вновь собранный массив командой

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

если надо остановить проверку то

echo 'idle' >/sys/block/md0/md/sync_action

процедура долгая наберитесь терпения и оставьте ваше устройство в покое

так же рекомендуется просканировать на ошибки файловую систему, думаю лишним не будет

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

Удаление массива. Если массив не нужен и требуется разобрать то выполняем следующую команды

-29

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

sudo umount /mnt

далее удаляем массив

sudo mdadm -S /dev/md0

после обнулим суперблоки и очистим от метаданных следующими командами

sudo mdadm --zero-superblock --force /dev/vd{b,c,d,e,f,g,h,i}
sudo wipefs --all --force /dev/vd{b,c,d,e,f,g,h,i}

За основу взято ArchWiki, так же несколько инструкций от других пользователей и переписаны под себя

За сим откланиваюсь...