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

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

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

image

Благо, если 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=

естественно, 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/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

Перезагружаемся еще раз, дабы проверить, что все установилось корректно.
Ну вот, собственно, и всё. Теперь осталось подключить (или создать) разделы с данными, добавить (если нужно) их в RAID и создать/подключить хранилища:
xe sr-create content-type=user device-config:device=/dev/md4 host-uuid= name-label=”SRRaid1-Local” shared=false type=lvm

Данный материал является компиляцией нескольких howto, найденных на просторах Сети. Замечания и дополнения всячески приветствуются.

Комментарии (2)

  • 8 августа 2016 в 10:41

    0

    lvremove /dev/VG_XenStorage-cc5e2fd6-e2f5–2e1c-ad01–1f8635b02f24/MGT
    vgremove VG_XenStorage-cc5e2fd6-e2f5–2e1c-ad01–1f8635b02f24
    pvremove /dev/sda3

    Извините за прямоту, но после этого можно не читать. Это уже не миграция, а чистая установка.

    Удалили хранилища => спокойно переставляем систему с нуля, как положено без создания хранилища. ВСЁ. Дальше делаем рейд, вводим в пул, настраиваем согласно своих предпочтений.

    Единственный вопрос:
    Где тут миграция?
    Миграция, это когда у вас одна из боевых нод на рейде и вы апгрейдите её до новой версии. У меня так не получалось с рейдом, надеялся увидеть данное шаманство здесь.

    • 8 августа 2016 в 10:47

      0

      Я делал именно на свежеустановленном XenServer. Но вы правы, удалю, дабы не смущать лишний раз.
      На «боевой» системе я так тоже делал, но еще на шестерке.

      С апгрейдом всё сложнее — на уже созданный linux-raid xenserver не встает, проверено. Т.е. как минимум, придется переставлять базовую систему, и потом цеплять к ней хранилища. смигрировать существующий lvm на raid проблем не составляет — делаем raid, добавляем в vg, мигрируем данные, вынимаем «старый» раздел из vg.

© Habrahabr.ru