По умолчанию Centos 7 устанавливается в том LVM, форматированный в XFS.
Изначально имеем:
- /dev/sda — диск на котором установлена ОС Centos 7
- /dev/sda1 — boot раздел в XFS, размер около 1ГБ (размер не принципиален)
- /dev/sda2 — PV LVM на котором находится VG centos
- centos/home — LV для домашних директорий пользователей
- centos/root — LV для корневого раздела
- centos/swap — LV для swap
Задача: нужно вживую мигрировать на программный RAID. Подключаем второй диск, он появляется как /dev/sdd (да, именно **D, так как там уже был /dev/sdb под другие функции) и начинаем. sda и sdd у меня одинаковые по объёму, также sdd может быть больше чем sda. В противном случае придётся изменять размер файловой системы и сжимать lvm том.
С помощью fdisk делаем два раздела, один около 1ГБ для boot, остальное для остального.
fdisk /dev/sdd
Создаём зеркальный RAID с одним диском. md0 для boot, md1 для PV LVM (root, home, swap):
mdadm --create --metadata=0.90 --verbose /dev/md0 --level=mirror --raid-devices=2 /dev/sdd1 missing
mdadm --create --verbose /dev/md1 --level=mirror --raid-devices=2 /dev/sdd2 missing
Если вы используете cLVM или другие блокировки LVM (обычно не требуется), то временно блокировку приводим к обычному типу. А также если используете filter, то не забудьте добавить для поиска LVM томов MD устройства:
mcedit /etc/lvm/lvm.conf
locking_type = 1
filter = [ "a|/dev/md.*|", …
Создаём PV на новом RAID устройстве, что позволит в будущем делать LVM группы и тома:
pvcreate /dev/md1
Расширяем PV на новый RAID диск, переносим все данные, убираем старый диск из этого PV:
vgextend centos /dev/md1
pvmove --atomic /dev/sda2 /dev/md1
vgreduce centos /dev/sda2
pvremove /dev/sda2
Создаём новый boot, переносим туда файлы со старого, отключаем старый boot, монтируем на его место новый:
mkfs.xfs /dev/md0
mkdir /tmp/new-boot
mount /dev/md0 /tmp/new-boot/
rsync -axu /boot/* /tmp/new-boot/
umount /tmp/new-boot
umount /boot
mount /dev/md0 /boot/
Правим fstab,меняем uuid boot раздела на новый
blkid | grep /dev/md0
copy uuid to fstab /boot
Добавляем конфигурацию RAID в файл:
mdadm --detail --scan > /etc/mdadm.conf
Здесь важная часть, правим grub, добавляя в него rd.md.uuid идентификаторы RAID устройств. Сами идентификаторы можно подсмотреть в только что сконфигурированном /etc/mdadm.conf
/etc/default/grub
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.md.uuid=3b50136e:3413dbb2:ec1aaf4f:607cd241 rd.md.uuid=5d8e91f6:4c1716cf:60926051:293da37f rd.lvm.lv=centos/swap"
Обновляем grub и генерируем initram-fs
grub2-mkconfig -o /boot/grub2/grub.cfg
dracut --force
Устанавливаем grub в загрузочные сектора дисков
grub2-install /dev/sdd
grub2-install /dev/sda
Возвращаем (если использовали ранее!) нужный тип блокировок LVM:
mcedit /etc/lvm/lvm.conf
locking_type = 3
С этого момента /dev/sda нам больше не нужен, он станет членом массива. Сделаем такую же разметку как у /de/sdd и добавим его в существующий RAID.
sfdisk -d /dev/sdd | sfdisk --force /dev/sda
mdadm --add /dev/md0 /dev/sda1
mdadm --add /dev/md1 /dev/sda2
Временно увеличим скорость синхронизации RAID массива
echo 500000 > /proc/sys/dev/raid/speed_limit_min
echo 500000 > /proc/sys/dev/raid/speed_limit_max
Следить за ходом синхронизации можно так:
watch cat /proc/mdstat
Как синхронизация закончится, можно сделать перезагрузку и надеяться что всё запустится так, как планировалось.