Сегодня мне понадобилось преобразовать массив mdadm в RAID10. Ну так, ради повышения надежности и производительности...

В общем, бэкапы сделаны? Отлично, потому как такая конвертация, на самом деле, может приказать долго жить с огромной долей вероятности и если не повезет - придется переставлять систему с нуля :3.

Во первых, необходимо учесть, что итоговый размер массива RAID10 будет меньше, чем RAID5 при том же числе дисков. Так, например, массив из 4 терабайтников в RAID5 может в 3Тб пространства, а RAID10 - только в 2. Мне повезло в том, что я использую LVM и раздел LVM с ОС находится вначале диска. Просто потому, что в большинстве случаев уменьшить корневую ФС on-line (на лету) не представляется возможным. Поэтому я перенёс все тома, что мне надо на другую тачку и первым делом уменьшил размер Phesical Volume 
Код:
pvresize --setphysicalvolumesize 400G /dev/md2

Я предпочитаю уменьшать с запасом, чтобы потом не получить какую-нибудь проблему типа одна программа интерпретировала G как GiB, а другая - как GB, да и плюс-минус сектор... Потом лучше увеличить - это безболезненно.
Ну, собственно, теперь нужно уменьшить размер нашего RAID5:
Код:
mdadm --grow /dev/md1 --array-size 500G
Это быстро, так как не подразумевает какого-то пермеещения блоков и т.п. - файловую систему нужно уменьшить самостоятельно, иначе финита ля комедия. Теперь превращаем наш RAID5 в RAID0 - обращаю внимание, что число устройств должно быть такого размера, чтобы массив на них влез и В ПОЛОВИНУ того, что будет в итоговом RAID10:
Код:
mdadm --grow /dev/md1 --level=0 --raid-devices=2 --backup-file=/root/md1.backup
Параметр --backup-file обязателен. Он вас не спасёт на самом деле, если будет нужно изменение формы массива (например, RAID5 был на 4 дисках), но без этого параметра mdadm даст отлуп. Начинается решейп - нужно обязательно проверить минут через 10, что процесс начался 
Код:
cat /proc/mdstat

И если вы увидите прогресс на 0% - нужно повторить команду grow с ключом --continue.
Один из серверов у меня так умер и потерял все данные - я не стал разбираться и просто переустановил. Если с ключиком --continue не помогает - мне помогала перезагрузка. И вот если процесс решейпа начался - ну.. значит, всё хорошо и дальнейшее преобразование пройдет как задумано с большой долей вероятности (мы же помним, что RAID0 это не надежно?). Решейп может занимать мнооого времени, в моем случае каждый решейп занимал около суток и, в общем, сервер можно было переустановить за это время, но я ленивый и мне проще написать несколько команд и делать другие дела, чем возиться с настройками. И так, решейп закончился, проверяем состояние массива:
Код:
mdadm -D /dev/md1


И если мы увидели что тип массива остался RAID5 - дело труба - запускаем команду конвертации ещё раз - теперь оно должно сработать моментально, и массив стал действительно RAID0. Осталось превратить его в RAID10. Смотрим, какие устройства выкинуты из массива 
Код:
cat /proc/mdstat

И добавляем их в команду преобразования:
Код:
mdadm --grow /dev/md1 --level=10 --raid-devices=4 --add /dev/sdb4 --add /dev/sdd4

Процесс пошёл. Теперь пока оно там снова решейпится (в этот раз будет быстрее и если всё нормально - займет около 3 часов на 4 терабайтных дисках) - я тем временем расширил массив и LVM на новый размер. Массив расширяем так:
Код:
mdadm --grow /dev/md1 --array-size max

Ну вот и всё. Осталось только дождаться окончания процесса и можно работать дальше.