У меня есть сервер с двумя дисками, собранными с помощью mdadm в RAID1. В какой-то момент времени места стало не хватать и были куплены ещё два диска, чтобы расширить массив в виде RAID10.
Забавно, но mdadm не позволяет просто сконвертировать RAID1 в RAID10. Но если пойти непростым путём, то сделать это можно. Идея простая. Конвертируем в два этапа: RAID1 → RAID0 → RAID10. Всё на лету.
Настоятельно не рекомендую этот способ на боевых системах по двум причинам:
- 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 дисков нет, идёт перестроение.
После перестроения размер массива увеличился. Можно расширять файловую систему, но это уже мелочи.
Послесловие
Снова повторюсь, что через неделю массив рассыпался, стал тормозить и отображаться как RAID0, при этом один диск из массива выпал. Не знаю с чем это связано, с такой сложной конвертацией или с чем-то ещё, но на боевых системах больше так конвертировать массивы не буду.
Разобрал всё и снова собрал сразу как RAID10, работает.