mdadm — конвертация RAID1 в RAID10

Thank you for reading this post, don't forget to subscribe!

У меня есть сер­вер с дву­мя дис­ка­ми, собран­ны­ми с помо­щью mdadm в RAID1. В какой-то момент вре­ме­ни места ста­ло не хва­тать и были куп­ле­ны ещё два дис­ка, что­бы рас­ши­рить мас­сив в виде RAID10.

Забав­но, но mdadm не поз­во­ля­ет про­сто скон­вер­ти­ро­вать RAID1 в RAID10. Но если пой­ти непро­стым путём, то сде­лать это мож­но. Идея про­стая. Кон­вер­ти­ру­ем в два эта­па: RAID1RAID0RAID10. Всё на лету.

Насто­я­тель­но не реко­мен­дую этот спо­соб на бое­вых систе­мах по двум причинам:

RAID10 у меня потом рас­сы­пал­ся через неде­лю. Это воз­мож­но из-за того, что пер­во­на­чаль­ный мас­сив был изна­чаль­но собран в RAID1 с помо­щью про­грамм­но­го RAID-кон­трол­ле­ра PERC S140. А может и про­сто такая кон­вер­та­ция содер­жит логи­че­ские ошиб­ки. Или случайность.
Chunk Size у RAID0 равен 8K, после кон­вер­та­ции в RAID10 зна­че­ние оста­нет­ся таким же, что неже­ла­тель­но для боль­ших массивов.
Луч­ше всё разо­брать и создать RAID10 с нуля. Это, конеч­но, потре­бу­ет про­стоя сер­ви­са, резерв­но­го копи­ро­ва­ния и вос­ста­нов­ле­ния данных.

Итак, мы име­ем мас­сив /dev/md127. Посмот­рим детали:

mdadm --detail /dev/md127

Уро­вень мас­си­ва RAID1. В мас­си­ве два диска:

/dev/nvme2n1
/dev/nvme3n1
На сер­ве­ре ещё есть два дис­ка, кото­рые будут исполь­зо­ва­ны в ито­го­вом массиве:

/dev/nvme0n1
/dev/nvme1n1
Кон­вер­ти­ру­ем мас­сив в RAID0:

mdadm --grow /dev/md127 --level=0 --raid-devices=2

mdadm: level of /dev/md127 changed to raid0
Посмот­рим детали:

mdadm --detail /dev/md127

Несмот­ря на опцию --raid-devices=2 в мас­си­ве остал­ся толь­ко один диск. Это ожи­да­е­мо, пото­му как пре­вра­тить RAID1 в RAID0 мож­но про­сто отки­нув один диск, что мы и видим в резуль­та­те. У нас и полу­чил­ся RAID0 из одно­го дис­ка /dev/nvme2n1.

Кон­вер­ти­ру­ем мас­сив в RAID10, добав­ляя недо­ста­ю­щие три диска:

mdadm --grow /dev/md127 --level=10 --raid-devices=4 --add /dev/nvme3n1 /dev/nvme0n1 /dev/nvme1n1

mdadm: level of /dev/md127 changed to raid10
Вто­рая над­пись мне непонятна:

raid_disks for /dev/md127 set to 5

Поче­му пять-то? Непо­нят­но. В любом слу­чае, мас­сив скон­вер­ти­ро­вал­ся. Посмот­рим детали:

mdadm --detail /dev/md127

Уро­вень мас­си­ва теперь RAID10, три дис­ка были добав­ле­ны как SPARE, один из них пере­стра­и­ва­ет­ся. Дожи­да­ем­ся окон­ча­ния про­цес­са перестроения.

Мас­сив пере­стро­ил­ся. Заме­чу, раз­мер мас­си­ва всё ещё такой же, как у RAID1. При­шло вре­мя его увеличить:

mdadm --grow /dev/md127 --level=10 --raid-devices=4
mdadm --detail /dev/md127

Теперь SPARE дис­ков нет, идёт перестроение.

После пере­стро­е­ния раз­мер мас­си­ва уве­ли­чил­ся. Мож­но рас­ши­рять фай­ло­вую систе­му, но это уже мелочи.