На основе Changing a RAID-10 into a RAID-5
Обычно считается, что лучшим вариантом организации дисков на бекап-сервере является RAID5, так как он обеспечивает достаточно хорошее соотношение цена/объем. К сожалению при увеличении количества дисков начинают сказываться недостатки RAID5, в частности надежность и скорость восстановления. Например при наличии на сервере RAID5 из 6 (шести) SATA дисков (даже достаточно надежных, например WD Re), при замене одного диска, время восстановления массива составляет около 10 часов (в моем случае). На время восстановления резервирование естественно отсутствует, нагрузка на диски повышается, что увеличивает вероятность сбоя оставшихся дисков, а уж если все диски одной и той же серии, вероятность, что во время восстановления испортится еще один диск увеличивается еще больше.
В связи с этим было принято решение преобразовать существующий дисковый массив из RAID5 в RAID10 с добавлением еще двух дисков, что теоретически должно было привести к увеличению скорости работы сервера и увеличению надежности.
В процессе преобразования необходимо: уменьшить размер текущего массива, перевести его в RAID0, перевести получившийся RAID0 в RAID10, увеличить размер массива до фактического размера.
ВНИМАНИЕ: в случае, если действия проделываются удаленно, все операции необходимо проводить под screen или чем-то подобным, в связи с тем, что время затраченное на каждую операцию может занимать несколько суток и обрывы связи крайне нежелательны (вплоть до потери данных).
Для преобразования необходимо выполнить следующие шаги:
- убрать все обращения в дисковому массиву, для чего размонтировать раздел, а также проделать любые другие действия для снижения нагрузки на сервер. В частности можно остановить сервис бекапа, cron и т.п.
umount /data /etc/init.d/cron stop
- ОБЯЗАТЕЛЬНО: Перед уменьшением размера массива необходимо уменьшить размер файловой системы на нем:
- Провести проверку файловой системы
e2fsck -f /dev/md1
- Уменьшить размер файловой системы (в моем случае текущий объем данных позволял разместить все на трех 2ТБ дисках)
resize2fs -p /dev/md1 5G
Время выполнения может занять несколько суток, в зависимости от количества файлов и их фрагментации
- Уменьшить размер массива
mdadm --grow /dev/md1 --array-size 5G
- Провести проверку файловой системы
- Перевести массив из RAID5 в RAID0
mdadm --grow /dev/md1 --level=0 --raid-devices=3 --backup-file=md1.backup
После запуска данной команды желательно подождать минут 10-20, после чего проверить статус выполения:
cat /proc/mdstat
Если в строке состояния данного массива стоит что-то типа:
reshape = 0% ... speed=0K/sec
скорее всего процесс не начался и ждать продолжения не имеет смысла. Рекомендуется еще раз запустить ту же команду с ключем —continue. Это приведет к продолжению работы процесса в консоли.
mdadm --grow /dev/md1 --level=0 --raid-devices=3 --backup-file=md1.backup --continue
Проверить работу можно из другой консоли, должно получится что-то типа:
root@backup:~# cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] md1 : active raid5 sdg4[0] sdd4[4] sde4[7] sdf4[6] sdc4[1] 5848233984 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/3] [UUUU] [==>..................] reshape = 14.5% (284427780/1949411328) finish=988.7min speed=28066K/sec
В моем случае время операции составило около 20 часов
- После этого необходимо проверить, полностью ли выполнилась процедура перевода:
mdadm -D /dev/md1
Если в данных масива все равно пишет:
Raid Level : raid5
То необходимо еще раз запустить команду:
mdadm --grow /dev/md1 --level=0 --raid-devices=3
Практически сразу тип массива будет изменен:
mdadm: level of /dev/md1 changed to raid0
- После выполнения предыдущей операции должен быть создан дисковый массив RAID0 из 3-х дисков. После этого его необходимо перевести в RAID10, указав свободные диски.
mdadm --grow /dev/md1 --level=10 --raid-devices=6 --add /dev/sdb4 --add /dev/sdf4 --add /dev/sdg4
В моем случае время операции составило около 20 часов
- Увеличение размера файловой системы до текущего размера дискового массива:
resize2fs /dev/md1