Есть сервер с CentOS7 и высоким %iowait. Нужно без простоя, или максимум 10 минут желательно ночью, перенести систему с md raid1 на md raid10. В моём случае реально уложиться в 10 минут, или даже меньше, потому что у сервера есть hot-swap корзины.

Перед началом упомяну одну деталь, без неё не получиться мигрировать следуя этому топику. Вся система, кроме /boot, должна быть установлена на LVM. Точка монтирования /boot находится на разделе md0, т.к. grub 0,97 не умеет грузиться с LVM.

Итак, сервер загружен и в нём четыре диска. Раздел /dev/md0 — /boot, раздел /dev/md1 — LVM Physical device и на нём стоит система.

1. Проверим какие диски существуют в нашей системе

Пример вывода:

2. Проверим текущее состояние Software Raid

Пример вывода:

 

3. Занятое дисковое пространство

Пример вывода:

В примере диски значатся как /dev/sdX, т.к. для примера использовалась виртуальная машина с использованием паравиртуализированных драйверов диска VirtIO.
Для начала извлечем из /dev/md127 раздел /dev/sdb2

4. Перед началом данной процедуры, нужно проверить какой номер md127 или md126 у диска с root и home данными

Вывод команды:

5. Удалим диск из массива:

Вывод команды:

6. Далее нам нужно затереть супер блок раздела и забить нулями небольшую часть раздела, т.к. если этого не сделать, то данные на /dev/md1 и разделе с raid10, как я понял, будут консистенты из-за этого возникнут проблемы с созданием раздела с raid10(mdadm будет ругаться что раздел /dev/sdb2 уже используется в /dev/md1, не смотря на то что мы его извлекли ранее) и после перезагрузки система попытается загрузиться не с /dev/md1, а c /dev/md2 и закончится всё на kernel panic.

Я знаю, что можно обойтись только второй командой, но изначально начал делать так, поэтому на реальной машине экспериментировать не решился.

7. Далее нам нужно скопировать таблицу разделов с /dev/sdb на /dev/sdc и /dev/sdd. Воспользуемся утилитой sfdisk. sfdisk будет ругаться и говорить, что не буду ничего делать т.к. раздел начинается не на границе цилиндра, добавляем ему ключ -f.

8. Разделы готовы, самое время для создания нового raid10 в degraded режиме. Указываю свой uuid тоже для страховки, т.к. во время экспериментов были проблемы.

Сгенерировать UUID вы можете на сайте: https://www.uuidgenerator.net/

Вывод команды:

9. Добавляем в /etc/mdadm.conf строчку с новым разделом

10. Добавляем: ARRAY /dev/md2 level=raid10 num-devices=4 UUID=efc0f8c6-c4da-744a-a750-8a7d645d9f67

 

11. Перезагружаемся, при загрузке видим что раздел /dev/md2 загружается в degraded режиме
md/raid10:md2: active with 3 out of 4 devices

Создаем physical volume из новоиспеченного раздела, так же указываю свой uuid для избежания duplicate uuid.

Вывод команды:

12. Теперь увеличиваем volume group centos

Вывод команды:

13. В LVM на Physical volume данные хранятся в блоках называемых PhysicalExtent(PE), вот эти PE’шки можно перемещать между Physical volume, что сейчас и требуется нам проделать.

Перед началом данной процедуры, нужно проверить какой номер md127 или md126 у диска с root и home данными

Вывод команды:

14. Если у вас CentOS 6, примените данную инструкцию:

####Сейчас нужно открыть файл /boot/grub/menu.lst и в строчке команд для ядра поправить параметр rd_MD_UUID на uuid раздела /dev/md2 в моем случае это 3846bee5:d9317441:f8fb6391:4c024445, если этого не сделать, то система будет пытаться найти рутовый раздел на /dev/md1, а том то уже пусто. Так же в эту строку ##желательно добавить полезный, при удаленной работе, параметр panic=10, что означает при kernel panic делать авторебут через 10 сек. Далее нам нужно перезагрузить сервер.

15. Для CentOS 7:

Проверим UUID нашего RAID массива:

Вывод команды:

16. Редактируем GRUB2:

Нам нужно поменять UUID после centos/root rd.md.uuid=

Второй UUID оставляем неизменным, т.к. он служит для RAID массива раздела /boot

17. Обновляем GRUB2

Перезагружаем систему:

Если у вас CentOS 6

И тут нас ждёт один подарочек,  пока что я не разобрался почему такое происходит. После перезагрузки раздел /dev/md2 переименовывается в раздел /dev/md127, но система нормально грузится по uuid. На сколько я знаю это относится к новой версии mdadm — 3.0 и выше, где можно создавать partitionable array, в котором можно именовать md разделы. Если кто нибудь в курсе, почему так происходит, то пожалуйста отпишитесь в комментариях. А пока мне остается только поправить номер раздела в файле /etc/mdadm.conf и удалить строчку отвечающую за /dev/md127.

18. Удаляем из Physical group /dev/md127:

Вывод команды:

19. Удаляем его из списка Physical device

Вывод команды:

20. Останавливаем /dev/md127

Вывод команды:

21. затираем супер блок у /dev/sda2

22. добавляем в /dev/md2

Вывод команды:

23. Проверяем наш RAID 10

Вывод команды:

Всё, система мигрирована на RAID 10.
Работать это должно и на CentOS 5 только там не придется изменять uuid в menu.lst, т.к. там нет такого параметра. В Debian Sid разница будет только в grub, т.к. там grub2.

Теперь нужно увеличить размер LVM раздела.

Посмотрим сколько дискового места у нас теперь свободно:

Видим, что добавилось еще 15,41 GB

Добавим дискового места нашим разделам:

И оставшееся место для раздела home

Теперь нужно увеличить размер файловой системы

 

Chapter 1. Добавление еще двух дисков в RAID 10

 

В заключении, для себя сделал вывод, что лучше всегда пользоваться LVM, т.к. работать с дисками становится легче в разы. Я могу увеличивать разделы, переносить данные с одного физического диска на другой в прозрачном режиме, могу делать снэпшоты и т.д.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.