Добрый день дорогой читатель, данное повествование не является истиной в последней инстанции, это некая инструкция (в основном для собственного пользования) по настройке программного RAID массива на Arch Linux, но справедливо и для других дистрибутивов. Действия будут происходить на KVM/QEMU для наглядности.
Что такое RAID массив? простыми словами это технология объединения двух и более накопителей в единую область хранения данных для повышения производительности и/или отказоустойчивости. По RAID массивам достаточно много информации на просторах всемирной паутины. В данном повествовании рассмотрим RAID6, так как на его примере раскрывается практически все достоинства этой технологии. Довольно "воды", приступим...
устанавливаем mdadm
sudo pacman -S mdadm
Подготовка накопителей. Я добавил в виртуальную машину восемь одинаковых по объему накопителей (8Гб как видно из скриншотов, если будут разного объема то объем массива будет рассчитываться от наименьшего накопителя) для наглядности, вероятно это избыточно. С помощью следующей команды мы их видим
lsblk
далее обнулим суперблоки накопителей следующей командой, это нужно если вы ранее пользовались ими
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}, далее очистим метаданные на всех накопителях с помощью команды
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}
давайте посмотрим состояние накопителей с помощью известной команды
lsblk
как видим на них созданы разделы md0(то бишь по названию массива) c типом raid6
Файл mdadm.conf. Переходим к созданию файла-конфига в котором будет описана конфигурация массива, если при добавление строк в конфиг будет отказано в доступе(а оно будет) войдите под root'ом командой su
sudo mkdir /etc/mdadm
su
echo "DEVICE partitions" > /etc/mdadm/mdadm.conf
mdadm --detail --scan --verbose | awk '/ARRAY/ {print}' >> /etc/mdadm/mdadm.conf
exit
следующей командой можно посмотреть конфиг
sudo nano /etc/mdadm/mdadm.conf
или
cat /etc/mdadm/mdadm.conf
Создание файловой системы. Далее отформатируем в нужную нам файловую систему(иначе как нам хранить файлы) для примера возьмем ext4
sudo mkfs.ext4 /dev/md0
Монтирование. Далее монтируем например в директорию /mnt следующей командой
sudo mount /dev/md0 /mnt
командой lsblk мы видим точки монтирования
lsblk
следующей командой можно увидеть всю информацию по объему нашего смонтированного массива
df -hT
Добавление в fstab. Если нам нужно смонтировать автоматически при запуске системы, то добавляем в /etc/fstab массив и по UUID монтируем его в соответствии с правилами fstab, делаем это следующей командой делается это из под root'а
su
blkid /dev/md0 >> /etc/fstab
Это делается для того что бы руками не вводит UUID, будьте предельно внимательны с выше написанной командой обязательно >> таким образом вы добавляете информацию в конец файла!!! Далее приводим в соответствие с помощью текстового редактора например nano
nano /etc/fstab
должно быть согласно скрину
Получение информации о RAID. Что бы посмотреть полную информацию о массиве используем следую команду
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. Давайте симулируем ситуацию в с выходом из строй одного из дисков достаточно выполнить следующую команду
sudo mdadm /dev/md0 --fail /dev/vdc
sudo mdadm -D /dev/md0
И так мы видим статус массива clean, degraded то есть массив работает(данные будут доступны), но есть проблема, Failed Devices: 1 это количество сбойных накопителей. Смотрим таблицу дисков статус диска vdc faulty(неисправен) и он не используется массивом.
Давайте его удалим из массива следующей командой и посмотрим на состояние массива
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.
Использование Hot Spare(Горячая замена). Данный способ позволяет использовать резерв из накопителей и при сбое накопителя в массиве происходит автоматическая замена вышедшего из строй накопителя на резервный. Приступим...
посмотрим какие у нас накопители не используются с помощью уже известной команды
lsblk
воспользуемся накопителями например vdg и vdh, выполним следующую команду и добавим накопители в резерв
sudo mdadm /dev/md0 --add /dev/vd{g,h}
и посмотрим состояние массива уже известной нам командой
sudo mdadm -D /dev/md0
накопителями vdg и vdh в статусе spare то бишь они зарезервированы на горячую замену так же об этом нам говорит Spare Devices: 2
Давайте про симулируем ситуацию описанную выше только с выходом из строя двух накопителей, благо это позволяет RAID6, следующей командой
sudo mdadm /dev/md0 --fail /dev/vd{d,e}
выставляем статус faulty на накопителях vdd и vde, смотрим состояние массива уже известной командой
sudo mdadm -D /dev/md0
как видим массив в статусе восстановления (State: clear,degraded,recovering), идет процесс Rebild, об этом нам говорит параметр Rebild Status
sudo mdadm /dev/md0 --remove /dev/vd{d,e}
удалим неисправные(исходя из нашей симуляции)накопители
sudo mdadm -D /dev/md0
смотрим состояние массива
Добавление накопителя к массиву с целью расширения хранилища. Давайте теперь увеличим объем нашего массива в данный момент у нас RAID 6(Raid level: raid6) и 4 накопителя по 8Gb то бишь объем его сумма всех накопителей за минусом двух накопителей(Array Size: 16Gb)
С помощью известной команды посмотрим какие накопители нам доступны
lsblk
к примеру возьмем два vdc и vdd, добавим их в массив следующей командой
sudo mdadm /dev/md0 --add /dev/vd{c,d}
посмотрим информацию о массиве, эти накопители у нас в резерве об этом говорит нам их статус spare
sudo mdadm -D /dev/md0
давайте с помощью них расширим наш массив то есть, он состоял из 4 накопителей а мы сделаем его из 6
данная команда расширяет массив на 6 накопителей и соответственно объем уже изменится(6 накопителей по 8Gb за минусом 2 накопителя по итогу у нас 32Gb)
sudo mdadm --grow /dev/md0 --raid-devices=6
смотрим состояние, State: clear,reshaping изменения массива ну в данном случае расширение хранилища
sudo mdadm -D /dev/md0
давайте посмотрим какие у нас накопители используются следующей командой
lsblk
в принципе их и так видно, но для наглядности сделаем через lsblk
sudo mdadm -D /dev/md0
мы расширили это видно по параметру Array Size: 32Gb
df -hT
но следующая команда нам показывает что объем остался прежним то есть 16Gb, следовательно нам надо расширить файловую систему на остаток свободного места в массиве(или добавить новый раздел, нет, мы этого делать не будет но как вариан не исключаю)
sudo fdisk -l /dev/md0
так же выше написанная команда показывает что массив на 32Gb
Расширение файловой системы. Так как в примере мы используем файловую систему EXT4 то воспользуемся утилитой resize2fs(для других файловых систем другие инструменты), если же имеется графическая оболочка то рекомендую воспользоваться например GParted
sudo resize2fs /dev/md0
с помощью команды выше мы расширяем раздел на массиве (как ранее было сказано используем EXT4) на всю свободную область в рамках массива
df -hT
далее команда (для наглядности опять же) говорит нам о том что раздел на массиве расширен
далее на всякий случай давайте проверим раздел на корректность, для этого предварительно от монтируем массив следующей командой
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
процедура долгая наберитесь терпения и оставьте ваше устройство в покое
так же рекомендуется просканировать на ошибки файловую систему, думаю лишним не будет
Большая вероятность того что большая часть данных уцелеет, все зависит от множества факторов ну и конечноже от самих накопителей
Удаление массива. Если массив не нужен и требуется разобрать то выполняем следующую команды
от монтируем массив
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, так же несколько инструкций от других пользователей и переписаны под себя
За сим откланиваюсь...