Миграция Xenserver 7 на linux raid

Xenserver недавно обновился до седьмой версии и я, конечно же, не смог пройти мимо!
Среди бросающихся в глаза плюшек (помимо миграции на CentOS 7) – другая разбивка диска с монтируемым отдельно /var/log (наконец-то) и увеличенным до 20 гигов корнем (алиллуйя!).
Но вот делать при загрузке RAID любого уровня он так и не умеет. А значит, нужно опять мигрировать уже установленную систему.

Благо, если XenServer только-только установлен, то это не так страшно 😉

Итак, мануалов по установке давать не буду – там ничего не изменилось толком. Если будете ставить с нуля – при установке не надо создавать хранилища для ВМ, их мы сделаем позже.

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

/ (root) 18GB
(update) 18GB
/boot/efi 512M
/var/log 4GB
swap 1GB

0. Удаляем старое

Первым делом отключаем существующие хранилища (если они таки есть):

#xe sr-list
#xe pbd-list sr-uuid=
#xe pbd-unplug uuid=
#xe sr-forget uuid=
#sed -i 's/metadata_read_only = 1/metadata_read_only = 0/' /etc/lvm/lvm.conf
#lvremove /dev/VG_XenStorage-cc5e2fd6-e2f5-2e1c-ad01-1f8635b02f24/MGT
#vgremove VG_XenStorage-cc5e2fd6-e2f5-2e1c-ad01-1f8635b02f24
#pvremove /dev/sda3
#sed -i 's/metadata_read_only = 0/metadata_read_only = 1/' /etc/lvm/lvm.conf

естественно, pv и vg указываем свои, а не просто копипастим 😉

Теперь останавливаем и удаляем RAID, если они есть в системе:

#mdadm --stop /dev/md0
#mdadm --stop /dev/md1
#mdadm --stop /dev/md2
#mdadm --stop /dev/md3
#mdadm --stop /dev/md4
#mdadm --stop /dev/md5

#mdadm --zero-superblock /dev/sdb1
#mdadm --zero-superblock /dev/sdb2
#mdadm --zero-superblock /dev/sdb3
#mdadm --zero-superblock /dev/sdb4
#mdadm --zero-superblock /dev/sdb5
#mdadm --zero-superblock /dev/sdb6

При этом каких-то разделов у вас может и не оказаться – например, у меня не было sda4 (видимо потому, что я не создавал хранилище при установке).
Ниже я считаю, что раздела /dev/sda4 у вас нет.

1. Строим новое

Удаляем таблицу разделов на /dev/sdb и копируем её с /dev/sda

#sgdisk --zap-all /dev/sdb
#sgdisk -R /dev/sdb /dev/sda

Задаем тип RAID для разделов

#sgdisk --typecode=1:fd00 /dev/sdb
#sgdisk --typecode=2:fd00 /dev/sdb
#sgdisk --typecode=3:fd00 /dev/sdb
#sgdisk --typecode=5:fd00 /dev/sdb
#sgdisk --typecode=6:ef02 /dev/sdb

Создаем, собственно, RAID

#yes|mdadm --create /dev/md0 --level=1 --raid-devices=2 --metadata=0.90 /dev/sdb1 missing
#yes|mdadm --create /dev/md1 --level=1 --raid-devices=2 --metadata=0.90 /dev/sdb2 missing
#yes|mdadm --create /dev/md2 --level=1 --raid-devices=2 --metadata=0.90 /dev/sdb3 missing
#yes|mdadm --create /dev/md3 --level=1 --raid-devices=2 --metadata=0.90 /dev/sdb4 missing
#yes|mdadm --create /dev/md4 --level=1 --raid-devices=2 --metadata=0.90 /dev/sdb5 missing

Создаем новый раздел подкачки. Он не будет жить на RAID, поэтому у нас их будет два.
#mkswap /dev/sdb6

Создаем разделы (корень и /var/logs) и монтируем

#mkfs.ext3 /dev/md0
#mkfs.ext3 /dev/md3
#mount /dev/md0 /mnt
#mkdir -p /mnt/var/log
#mount /dev/md3 /mnt/var/log

Копируем файлы на новый раздел:

#cp -xR --preserve=all / /mnt

Создаем файл mdadm.conf

#echo "MAILADDR root" > /mnt/etc/mdadm.conf
#echo "auto +imsm +1.x -all" >> /mnt/etc/mdadm.conf
#echo "DEVICE /dev/sd*[a-z][1-9]" >> /mnt/etc/mdadm.conf


#mdadm --detail --scan >> /mnt/etc/mdadm.conf
#cp /mnt/etc/mdadm.conf /etc

2. Правим fstab и grub

Изменяем точки монтирования на RAID

#sed -i 's/LABEL=root-[a-zA-Z\-]*/\/dev\/md0/' /mnt/etc/fstab
#sed -i 's/LABEL=swap-[a-zA-Z\-]*/\/dev\/sda6/' /mnt/etc/fstab
#sed -i 's/LABEL=logs-[a-zA-Z\-]*/\/dev\/md3/' /mnt/etc/fstab
#sed -i '/sda6/ a\/dev/sdb6 swap swap defaults 0 0 ' /mnt/etc/fstab

Копируем метку раздела на /dev/sdb

#e2label /dev/sda1 |xargs -t e2label /dev/sdb1

Делаем chroot в нашу будущую систему:

#mount --bind /dev /mnt/dev
#mount --bind /sys /mnt/sys
#mount --bind /proc /mnt/proc
#mount --bind /run /mnt/run
#chroot /mnt /bin/bash

Устанавливаем загрузчик
#grub-install /dev/sdb

Создаем новый initrd

#dracut --mdadmconf --fstab --add="mdraid" --filesystems "ext3 tmpfs devpts sysfs proc" --add-drivers="raid1 raid456 mdraid1x mdraid09" --force /boot/initrd-$(uname -r).img $(uname -r) -M

Меняем конфигурацию GRUB, чтобы загрузиться с RAID:

#sed -i 's/quiet/rd.auto rd.auto=1 rhgb quiet/' /boot/grub/grub.cfg
#sed -i 's/LABEL=root-[a-zA-Z\-]*/\/dev\/md0/' /boot/grub/grub.cfg
#sed -i '/search/ i\ insmod gzio' /boot/grub/grub.cfg
#sed -i '/search/ i\ insmod part_msdos' /boot/grub/grub.cfg
#sed -i '/search/ i\ insmod diskfilter mdraid09' /boot/grub/grub.cfg
#sed -i '/search/ c\ set root=(hd0,gpt1)' /boot/grub/grub.cfg

Выходим из chroot
exit

Перезагружаемся. В качестве загрузочного диска ставим второй, на котом мы создали RAID. Если что-то пойдет не так – будет шанс загрузиться со “старой” системы и попробовать еще раз.

Если всё прошло удачно, то переписываем таблицу с /dev/sdb на /dev/sda
#sgdisk -R /dev/sda /dev/sdb

И добавляем разделы в RAID:

#mdadm -a /dev/md0 /dev/sda1
#mdadm -a /dev/md1 /dev/sda2
#mdadm -a /dev/md2 /dev/sda3
#mdadm -a /dev/md4 /dev/sda5

На всякий случай, пересоздаем SWAP и переустанавливаем загрузчик на /dev/sda:

#mkswap /dev/sda6
#grub-install /dev/sda

Перезагружаемся еще раз, дабы проверить, что все установилось корректно.
Ну вот, собственно, и всё 🙂 Теперь можно создать/подключить хранилища:

#xe sr-create content-type=user device-config:device=/dev/md2 host-uuid= name-label=”SRRaid1-Local” shared=false type=lvm

Leave a Reply