Centos перенести на raid 1

Обновлено: 06.07.2024

После очередного выхода из строя очередного винта назрела таки
необходимость внедрения raid-ов. Так как на что-то вроде raid5 или
raid10 винтов надо "много" (ну хотя бы 4), а обьемов существующих для
моих нужд вполне достаточно решил для начала поэкспериментировать с
raid1. Хотя на материнке и присутствует raid контроллер, но фраза в
мануале "если вы хотите установить ОС используя raid - скопируйте
драйвер на флопи диск. " напрочь отбивает охоту оный использовать.

После поиска возможных вариантов миграции на софтовый raid для linux и
анализа был выбран (помоемому) самый простой способ, правда требующий
физического доступа к серверу, установочного/восстановительного диска и
парочки перезагрузок сервера.

Но, как оказалось, mdadm начиная с 2.6 поддерживает обьединение в raid
уже целяком всего устройства! Без необходимости предварительного
разбиения, переносов и т.д.

Изменена последовательность действий и добавлено пару-тройку замечаний.

Нам потребуется установочный диск, т.к. переносилась CentOS5.3 - её диск
и был взят.

Для размещения служебной информации mdadm требуется немножко
неразмеченого места на диске, а диск при установке был задействован
полностью. По старой привычке /home, /var/log и /tmp были созданы
отдельными разделами причем /tmp - последний; посему сильно не
заморачиваясь раздел /tmp был попросту ликвидирован (позже на raid-е
создан заново).

Проверяем, что установлены mdadm версии не ниже 2.6

rpm -q mdadm
mdadm-2.6.4-1.el5


Теперь выясняем что собственно у нас куда примонтировано:
в /etc/fstab лично у меня было:

LABEL=/1 / ext3 defaults 1 1

Какое устройство соответствует этой метке обнаружилось в файлике /etc/blkid/blkid.tab
LABEL=/1 это оказалось /dev/sda2
Это надо для дальнейшей правки /etc/fstab - разделы у нас поменяются.
затем нам потребуется патч для mkinitrd качаем его
(зачем он нужен желающие могут выяснить здесь) и сохраняем
где-нибудь, например в /root (т.к. /root у меня расположен в корневом
разделе - он будет легко доступен)

Впринципе ничто не мешает сразу пропатчить mkinitrd

cd /sbin
cp mkinitrd mkinitrd.dist
patch -p0 < /root/mkinitrd-md_d0.patch


Если пакет mkinitrd будет обновлен (например через yum update) то
патчить придется заново, а если про это забыть - то при обновлении ядра
новый mkinitrd создаст неправильный initrd и наш сервер попросту не
загрузиться.

Соответственно правим /etc/yum.conf - добавляем строку

Выключаем сервер, добавляем второй жесткий диск, загружеамся с
устновочного CD (DVD, Flash) диска в варианте Rescue (Восстановление),
на вопрос примонтировать ли найднные разделы на жестком диске отвечаем "нет".
Создаем raid используя mdadm:

mdadm --create --level=1 --raid-devices=2 /dev/md_d0 /dev/sda missing


Теперь необходимо изменить параметры загрузки, для чего монтируем
вручную наш жесткий диск, который собственно уже является частью raid
массива:

mkdir /mnt/sysimage
mount /dev/md_d0p2 /mnt/sysimage
mount -o bind /dev /mnt/sysimage/dev
mount -o bind /selinux /mnt/sysimage/selinux
mount -t proc none /mnt/sysimage/proc
mount -t sysfs none /mnt/sysimage/sys
chroot /mnt/sysimage

mdadm --examine --scan > /etc/mdadm.conf


И редактируем его (/etc/mdadm.conf): необходимо заменить /dev/md0 на /dev/md_d0.

Правим /etc/fstab - меняем параметры типа LABEL=. на
root=/dev/md_d0pN где N - соответствует /dev/sdaN на котором был этот раздел.

И создаем новый образ initrd


Перезагружаемся уже в нормальном режиме.

Если все прошло успешно - последний штрих, синхронизация дисков, хотя
сервер уже выполняет свои функции.

Добавляем второй диск в массив

mdadm --add /dev/md_d0 /dev/sdb


Можем последить за процессом синхронизации

watch cat /proc/mdstat


Синхронизация - процесс довольно долгий и сильно тормозящий весь
сервер. Что логично - винчестеры оба задействованы "на полную".

Весь процесс от остановки сервера для перезагрузки до запуска занял
примерно 15 минут (не считая времени на подготовку и синхронизацию, т.к.
в это время сервер хоть и тормозил, но всетаки работал).

Раздел /tmp позже был создан уже сразу на /dev/md_d0 и неиспользуемого
места на массиве больше не осталось :)

При эмуляции отказа - удалили диск sda, бывший sdb обнаружился как sda и
все нормально загрузилось и работало, НО когда sda (отформатированый
ради чистоты эксперимента) вернули наместо - сервак не завелся!

Все оказалось банально просто - в рейде остался один диск - sda который
стал sdb после возвращения sda наместо, проблема решилась просто -
переткнули диски наоборот, вроде мелочь, но нервы попортить может :)

1.Нет необходимости при замене жесткого диска разбивать его на разделы,
и колдовать с загрузчиком.

2.Процесс восстановления состоит из одной единственной команды -
добавления нового диска взамен вышедшего из строя.

1. swap тоже получается на raid-е, хотя если бы делали на нормальном raid
контроллере помоемому получили бы тотже эффект.

2. Надо патчить mkinitrd, вроде как патч будет включен и необходимость в
этом отпадет.

есть работающая система с виртуалками(под vmmgr) на 1 диске, на котором появились бэд сектора. Купил пару дисков, хочу на них собрать рейд1 и перенести систему.

Но система нетиповая с lvm, и немогу найти инструкции. А знаний что бы боюсь нехватит(я начинающий админ в мелкой конторе) и могу только на ночь сервер положить, днем в работе находится.

прошу вашей помощи в настройке, может инструкцию или еще что…

сейчас конфиг такой:


Вот инструкция от Dimez , как переезжать с одиночного диска на Raid1. В Вашем случае все несколько проще, потому что Вы сразу же имеете пару чисты дисков для сборки полноценного Raid1.

Соответственно, алгоритм простой - разбиваете новые диски на разделы, создаете RAID1, на нужном разделе (видимо, /dev/md2, аналог Вашего /dev/sda3) cоздаете тома lvm (такие же, как и на исходном диске), монтируете их в исходную систему, далее копируете данные, ставите груб или любой другой загрузчик на raid1, правите /etc/fstab.

Serge10 ★★★★★ ( 01.12.19 19:04:19 )
Последнее исправление: Serge10 01.12.19 19:04:42 (всего исправлений: 1)

Если не разбираешься в raid, то используй raid в рамках lvm. Преобразуешь lv в raid1 тип с тремя зеркалами, указав два новых диска. Для этого достаточно документацию почитать. Остается переустановить загрузчик. Потом старый диск можно убрать, но не забыть перенастроить на два зеркала.

На самом деле у тебя довольно простой случай. Нужно разметить sdb и sdc, затем сделать примерно следующее (я пишу команды, но не нужно их бездумно копировать в терминал)

Ты всегда можешь воткнуть 3 дешёвых флешки в любой комп с линуксом и потренироваться на них.

Всё это можно сделать не прерывая работы сервера и не отключая клиентов, в рабочее время. LVM делает операции с томами с нониженным приоритетом, так что в типичной конторе «рога и копыта» пользователи не должны заметить просадку производительности. Но вот переезд они тебе замедлят.

Ещё важный момент: я не коснулся переноса /boot который у тебя вне LVM. Я не знаю, у тебя там UEFI или GRUB но все их потроха придётся вручную скопировать на каждый из дисков. Иначе система не сможет загрузиться без старого диска, а тебе наверное надо, чтобы грузилась с любым одним из двух новых. Я у себя заленился это делать и забил, гружусь с одного диска.

При перезагрузках sda, sdb и sdc могут поменяться местами, будь бдителен!

legolegs ★★★★★ ( 01.12.19 19:58:03 )
Последнее исправление: legolegs 01.12.19 20:02:39 (всего исправлений: 1)


Как уже писали выше - делаешь рейд, копируешь туда с помощью rsync всё, что было. Затем чрутишься, правишь fstab, ставишь загрузчик.

Офигеть, я и сам про неё забыл уже.

Делаешь raid1 (mdadm)

Делаешь 2 раздела, для /boot 512m, для PV все остальное (parted)

Добавляешь новый PV в существующую VG (vgextend)

Переносишь данные со старого диска (pvmove)

Выкидываешь старый диск из VG (vgreduce)

Копируешь /boot (dd, rsync, …). правишь /etc/fstab

И grub-install /dev/md0 (или как там новый raid называться будет)

Зачем вы все ему советуете mdadm если там уже есть живой LVM?

При зеркале на LVM работает только один диск для всех потоков (при чтении), а на mdadm потоки разбросает по дискам (при чтении)

futurama ★★★★★ ( 02.12.19 16:21:35 )
Последнее исправление: futurama 02.12.19 16:22:10 (всего исправлений: 1)

:). Сеть помнит все и про всех ;).

А надо не lvc*e -m Number --type mirror использовать, а --type raid1, или вообще явно не задавать, т.к. он уже лет 6 по умолчанию. А вести он должен себя почти так же.

man lvmraid

LVM RAID uses both Device Mapper (DM) and Multiple Device (MD) drivers from the Linux kernel. DM is used to create and manage visible LVM devices, and MD is used to place data on physical devices.

boowai ★★★★ ( 02.12.19 17:27:26 )
Последнее исправление: boowai 02.12.19 17:37:51 (всего исправлений: 2)

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

Если читает один процесс, то ускорения действительно нет наблюдается. А если два - то они друг другу не мешают.

действовал таким образом:

sgdisk /dev/sda -R /dev/sdb sgdisk /dev/sda -R /dev/sdc

mdadm –create –verbose /dev/md0 –level=0 –raid-devices=2 /dev/sdb /dev/sdc

vgextend centos /dev/md2

pvmove /dev/sda3 /dev/md2

после окончания сервер сам ребутнулся и больше lvm не доступен.

vgchange -ay пробовал, не работает. lvscan пишет что все активны.

что можно предпринять? работа сервера встала. прошу вашей помощи

Пойти покушать и повеситься (с)

Не считая всего бреда, непонятно одно, откуда взялся /dev/md2 ?

а где grub-install ?

iostat запускал? видел распределение нагрузки по дискам?

то в обоих случаях lvm/mdadm, работает только один диск к сожалению. А при нескольких потоках … как я говорил ранее mdadm лучше.

Может за последние 5-10 лет что-то изменилось в lvm, но я сомневаюсь.

Если ты не понимаешь, что и как делать, то в первую очередь нужно сделать backup.

А затем, перед выполнением команд на целевой системе потренироваться на кошках, например на другом ПК или виртуалке.

Если система не загружается, то тебе придётся грузиться с любого LiveCD / LiveUSB и выполнять команды с него.

делал по мануалам, было примерно так:

sgdisk /dev/sda -R /dev/sdb sgdisk /dev/sda -R /dev/sdс

mdadm –create –verbose /dev/md1 –level=0 –raid-devices=2 /dev/sdb2 /dev/sdc2 mdadm –create –verbose /dev/md2 –level=0 –raid-devices=2 /dev/sdb3 /dev/sdc3

последний шаг длился сутки, и вчера под вечер сервер сам ребутнулся и больше диски виртуалок в lve не появились.

загрузчик еще не менял, грузится со старого (sda2).

sda1 это 1 мбайт отступа в начале диска.

все lve томы активны, но не видны почему то. Немогу найти может где то точки монтирования нужно поменять, но хотя вроде нет, я же просто расширил существующий.

единственное что мне непонятно, почему номера md после ребута поменялись. может в этом проблема? но сейчас lvm видно 7 терабайт, т.е. старый диск полностью и рейд полностью.


Ну и насоветовал.

и вчера под вечер сервер сам ребутнулся

Почему это произошло?

И была ли к этому моменту завершена процедура переноса физического тома?

Все-таки я отстал от жизни, LVM mirror таки распределяет потоки по дискам (нашел одну систему с lvm mirror, RHEL 6.6)

проблем с питанием не было, стоит ИБП. Другие серверы не ребутались, значит просадки тож не было.

в 21:30 уже идут записи ио загрзке…

kernel panic и подобного нет.

самого вывода консиоли в момент ребута не видел, но примерно в это время и должен был закончитс перенос. В районе 18 часов смотрел было около 80%.

Ну как было примерно так видимо примерно и получилось.

Бороздя просторы интернета я иногда натыкался на описания миграции на RAID1, но никогда особо не обращал на них внимания, при правильно поставленной задаче в этом просто нет смысла. По-моему, если планировать недорогой сервер, то софтовый RAID можно предусмотреть с самого начала, и сразу на него уже проинсталить операционную систему, а заодно и проверить как он отреагирует на отключение одного из винтов. Но бывают ситуации из разряда одна на миллион, когда в руки попадает какой-нибудь недорогой Supermicro расположенный на площадке провайдера, на единственном винте которого чудесным образом вращается около сотни различных сайтов.

1. Лирика (вступление)

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

Итак проверяем, что у нас есть из разделов:

На втором разделе диска создана группа томов с именем vg_web16, при установке поименованная по имени сервера.

И на этой группе томов располагаются два тома под данные и свап. Все как нужно.

1. Основной раздел

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

Ставим mdadm и создаем RAID1 массив с именем md2, в этот массив помещается только один раздел со второго (пустого) диска, раздел с первого диска пока помечается как отсутствующий.

Далее помечаем /dev/md2 как физический том LVM, расширяем на него группу томов vg_web16, переносим все логические тома лежащие на первом диске /dev/sda2 на созданный RAID-массив /dev/md2.

Операция pvmove может выполняться длительное время, для 500Гб SATA-дисков оно составило около 45 минут. Теперь удаляем из группы томов первый диск и добавляем его в RAID

Ждем пока закончится процесс синхронизации дисков в RAID1.

2. Раздел Boot

Опять как и для предыдущего раздела создаем RAID-массив с одним диском, и выбираем формат суперблока 0.90 или 1.0, с другими форматами GRUB 0.97 работать не умеет.

Форматируем созданный раздел в ext4 и переносим на него данные из директории /boot

Размонтируем /boot отключив от него первый раздел первого диска и примонтируем туда RAID-массив /dev/md1, а затем добавляем отмонтированный диск в этот массив.

3. Настройка initrd и grub

Для начала формируем конфигурационный файл mdadm.conf

Меняем в /etc/fstab точку монтирования для /boot, все остальные точки монтирования находятся на LVM и поэтому остаются на своих местах.

Пересоздать initramfs можно при помощи утилиты dracut, начиная с Fedora 12 она пришла на смену mkinitrd. Проверяем выключены ли в конфигурацию LVM и MDADM, и перезаписываем старый initramfs.

Из конфигурационного файла Grub убираем параметры ядра отключающие загрузку mdraid.

Настраиваем Grub на обоих дисках

Запасаемся на всякий случай LiveCD и отправляем сервер в перезагрузку.

4. Заключение

В принципе LVM и сам не плохо умеет делать RAID, и как мне кажется это намного проще чем с mdraid, основной раздел легко разместиться LVM-RAID, а /boot можно просто скопировать на оба диска и монтировать по метке. Но это теория.. как только попадется какой-нибудь еще сервер без RAID-контроллера, обязательно пущую его в продакт и обкатаю на нем это дело.

Данная статья детально описывает, как перенести Linux систему на RAID1 без переустановки, добавив схожий по характеристикам жесткий диск к тому, на котором установлена система. Все операции будут проводиться на системе с двумя IDE-HDD, операционная система CentOS 5.1.

Просмотрим таблицу разделов:


По полученным данным видно, что установлены два идентичных жестких диска объемом 80 Гб. На первом диске создано 2 раздела: корневая файловая система и SWAP-раздел. Второй жесткий диск абсолютно пуст. Диски определены системой как hda и hdb.

Первым делом нам необходимо создать таблицу разделов на втором диске, идентичной первому.

Опция -d делает дамп таблицы разделов.


Посмотрим теперь, что представляют диски, установленные в системе:


Видно, что таблица разделов на втором диске полностью соответствует таблице разделов на первом диске.

Теперь изменим тип таблицы разделов на втором диске на Linux raid autodetect:


На запрос введем t. Пункт t — это изменение id системы раздела.

Выбираем номер раздела (напомню в нашем случае их 2).

Вводим шестнадцатеричный id код. Т.к. нам нужно Linux raid autodetect, то выбираем fd.


То же самое повторяем и для второго раздела:


Теперь записываем таблицу разделов на диск и выходим, выбрав опцию w.


Теперь загоним разделы нашего второго диска в массивы. Статус RAID намеренно выбран degraded.

mdadm: array /dev/md0 started.


При попытке повторить то же самое для второго раздела:

mdadm: error opening /dev/md1: No such file or directory

Мы воспользуемся опцией —auto:

mdadm: array /dev/md1 started.


Теперь выполним команду cat /proc/mdstat и убедимся, что наш деградировавший рейд работает:

md1 : active raid1 hdb2[1]

522048 blocks [2/1] [_U]

md0 : active raid1 hdb1[1]

77617920 blocks [2/1] [_U]

По статусу _U видим, что с первым диском у нас проблемы, что естественно, ведь его в массиве нет, а вот со вторым все ОК.


Теперь создадим файловые системы в наших массивах: ext3 в первом массиве и swap по втором:


Теперь создадим директорию для монтирования первого массива и смонтируем его туда:


Создаем файл конфигурации mdadm — /etc/mdadm.conf:


И вносим в него такую строку: DEVICE partitions


Теперь заносим информацию о RAID массивах в файл конфигурации mdadm:


Теперь правим файл /etc/fstab:


И приводим в соответствие с подчеркнутыми значениями:


Теперь необходимо отредактировать конфигурационный файл загрузчика GRUB:


Делаем две копии конфигурации текущего раздела.

Значения которые подлежат изменению подчеркнуты красным.


Создаем новый образ initrd командой:


Теперь переносим данные нашей системы на массив:


Теперь настроим загрузчик на второй диск, введя команду grub:


Работать будем с меню GRUB:


Теперь перезагружаемся и выбираем для загрузки второй ядро:



Теперь изменим тип таблицы разделов на перовом диске на Linux raid autodetect:


На запрос введем t. Пункт t — это изменение id системы раздела.

Выбираем номер раздела (напомню в нашем случае их 2).

Вводим шестнадцатеричный id код. Т.к. нам нужно Linux raid autodetect, то выбираем fd.


То же самое повторяем и для второго раздела:


Теперь записываем таблицу разделов на диск и выходим, выбрав опцию w.


Теперь добавляем первый раздел на первом диске в наш первый массив (извините за тавтологию):



Сейчас начался ребилдинг массива. Процесс достаточно длительный и зависит от емкости диска. За процессом можно наблюдать:


Теперь выполним команду cat /proc/mdstat и убедимся, что наш первый диск добавлен в массив:


Следующим шагом нам необходимо изменить файл конфигурации mdadm:


Нам необходимо либо удалить, либо закомментировать строки с параметрами дисков:


Сохраняем изменения и выходим.

Теперь соберем новые данные о массивах:


И пересоберем образ ядра. Обратите внимание на опцию -f, она позволит перезаписать существующие данные.

Читайте также: