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=<local storage-uuid>
xe pbd-unplug uuid=<uuid>
xe sr-forget uuid=<local storage-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:fd00 /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
yes|mdadm --create /dev/md4 --level=1 --raid-devices=2 --metadata=0.90 /dev/sdb6 missing


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


Создаем разделы (корень и /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</code>
Создаем новый initrd:
<source lang="bash">
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/md3 /dev/sda5
mdadm -a /dev/md4 /dev/sda6


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

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

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

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

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


  1. mobilesfinks
    08.08.2016 10:41

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

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

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

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


    1. Night_Snake
      08.08.2016 10:47

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

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


  1. farafonoff
    08.08.2016 15:50
    +1

    Я swap слздаю на md, иначе при выходе диска из строя получается краш системы.


    1. rrrav
      08.08.2016 20:58

      Тоже удивило — делать зеркало, а swap раскидывать на два физических диска — вероятность вылета даже в 2 раза больше, чем на одном диске. Логично тогда вообще все положить на RAID 0 — летать будет, но недолго проживет.
      Swap либо на зеркале, либо вовсе без него (что тоже может осложнить жизнь).


      1. Night_Snake
        08.08.2016 21:51

        Я в двух мануалах (в т.ч. на форуме цитрикса как «рекомендованное решение») видел именно такой сценарий. Хотя, соглашусь, странно. Пожалуй, сделаю апдейт, спасибо


        1. rrrav
          08.08.2016 22:49
          +2

          Возможно имелось ввиду, что swap не следует располагать на томе LVM — это где-то понять можно — лишняя нагрузка на процессор. Еще попадалось рассуждение, что при серьезной нехватке памяти, в swap может попасть сам модуль LVM на которой этот swap лежит. Лет 20 назад такое еще можно было представить, но сейчас памяти хватает, swap в системе — «на всякий случай» (чтобы OOM килер не посетил).


  1. MikeBooker
    08.08.2016 21:51

    Не совсем понял автора — у меня XenServer 6.5 & RAID1 (hardware) + RAID1 (hardware), т.е. в моем случае штатный update до 7.0 не пройдет? И спасет только этот мануал?


    1. Night_Snake
      08.08.2016 23:31

      Обновлять я не пробовал, сразу скажу. Но при загрузке с диска xenserver тупо не дает поставиться на RAID.


    1. mobilesfinks
      09.08.2016 10:31
      +1

      не пройдёт.
      Что бы прошёл вам нужно:
      1 — вывести один диск из массива.
      2 — поставить на этот освободившийся диск новую систему
      3 — поднять дегрейдед рейд на новом диске (для хранилища)
      4 — мигрировать VG на новый диск
      5 — дальше как обычно переезжаем на рейд


  1. akamensky
    11.08.2016 09:49

    Вот интересно почему ext3, а не ext4? И да, причем тут XenServer? Процесс для миграции на RAID и без XenServer'а будет выглядет также.

    Ну и немного непонятно зачем XenServer'у софтварный RAID? Что-то серьезное собирать без нормального RAID контроллера это, извиняюсь, поиск приключений на собственную голову.


    1. Night_Snake
      11.08.2016 10:05

      Так исторически сложилось (с). Думаю, этот вопрос надо задать Citrix, которые до сих пор пользуют ext3 для хост-системы, даже после перехода на ядро centos 7.
      XenServer тут, собственно, не сильно при делах — за исключением того, что он, в отличие от «обычного» линукса на RAID не ставится.

      Про аппаратный RAID-контроллер вы всё правильно говорите, но далеко не всегда есть возможность и/или необходимость в его покупке.


      1. akamensky
        11.08.2016 10:15

        Думаю, этот вопрос надо задать Citrix, которые до сих пор пользуют ext3 для хост-системы, даже после перехода на ядро centos 7.

        Не пользуюсь их продуктом. Но мы тут вовсю используем FOSS Xen под версией 4.x. Так вот он отлично работает со всеми известными FS, так как в этом случае Xen ядро подгружает оригинальное ядро, которое в свою очередь поддерживает все доступные драйвера.

        XenServer тут, собственно, не сильно при делах — за исключением того, что он, в отличие от «обычного» линукса на RAID не ставится.

        Вот это для меня новость. Так как обычный Xen спокойно ставится на все что угодно за исключением Secure Boot (его тоже можно завести, но для Centos придется руками все компилировать, не хочется с этим связываться)

        Про аппаратный RAID-контроллер вы всё правильно говорите, но далеко не всегда есть возможность и/или необходимость в его покупке.

        Ну как бы даже очень древние сервера «for small office» шли с какой-никакой а картой. Не уверен про другие бренды, в основном работал с Dell. Так что может это только к ним относится.


        1. Night_Snake
          11.08.2016 10:35

          Не пользуюсь их продуктом. Но мы тут вовсю используем FOSS Xen под версией 4.x. Так вот он отлично работает со всеми известными FS, так как в этом случае Xen ядро подгружает оригинальное ядро, которое в свою очередь поддерживает все доступные драйвера.

          Очень рад за вас, но в данном случае речь идет именно о XenServer от Citrix. Пользовать для хост-системы ext4 или ext3 — дело вкуса, на мой взгляд.

          Вот это для меня новость. Так как обычный Xen спокойно ставится на все что угодно за исключением Secure Boot (его тоже можно завести, но для Centos придется руками все компилировать, не хочется с этим связываться)

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

          Ну как бы даже очень древние сервера «for small office» шли с какой-никакой а картой. Не уверен про другие бренды, в основном работал с Dell. Так что может это только к ним относится.

          У меня в наличии самосбор на супермикре. Покупать к нему еще и RAID-контроллер смысла как-то не вижу, учитывая круг задач. В брендовых серверах да, встречал, но не во всех.