Выполнено по мотивам https://habr.com/post/307234/ , однако - некоторые моменты сделаны более аккуратно. На mdadm RAID переносим рабочую систему с виртуалками на борту. Виртуалки нужно останавливать только на время переноса со старой SR на новую.

Назначение разделов

https://docs.citrix.com/en-us/xenserver/current-release/install/partition-layout.html
На свежеустановленном Xenserver 7.6 диск разбивается на 6 разделов:

sda1 - 18.0 GiB / type ext3
sda2 - 18.0 GiB backup partition
sda3 - XenStorage LVM Physycal Volume 
sda4 - 512.0 MiB /boot/efi type vfat
sda5 - 4.0 GiB /var/log type ext3
sda6 - 1.0 GiB swap

Подготовка первого диска массива RAID

Подразумевается, что у нас два одинаковых диска, на /dev/sda установлен Xenserver 7.6. Копируем таблицу разделов с /dev/sda на /dev/sdb.

sgdisk -R /dev/sdb /dev/sda

Делаем прописываем новым разделам тип fd00 и создаем массивы:

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

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

Во избежание путаницы, я нумерую массивы с 1, (а не с 0) - как и разделы.

Копирование системы на массивы RAID

Форматируем разделы:

mkfs.ext3 /dev/md1
mkfs.ext3 /dev/md5
mkswap /dev/md6

Так как утилита mkfs.vfat отсутствует в XenServer 7.6 я просто скопировал раздел EFI с помощью dd:

dd if=/dev/sda4 of=/dev/md4 bs=512

Монтируем новые разделы:

mount /dev/md1 /mnt
mkdir -p /mnt/var/log
mount /dev/md5 /mnt/var/log

Если в результате выполнеения следующих команд (монтирования /dev/md4) происходит ошибка - вероятно EFI-партиция просто пустая, потому что вы загружаетесь с помощью Legacy BIOS. Не обращаем на это внимания.

mkdir -p /mnt/boot/efi/
mount /dev/md4 /mnt/boot/efi/

Копируем систему:

cp -xR --preserve=all / /mnt

Настраиваем mdadm:

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

Настраиваем fstab:

 
sed -i 's/LABEL=root-[a-zA-Z\-]*/\/dev\/md1/' /mnt/etc/fstab
sed -i 's/LABEL=logs-[a-zA-Z\-]*/\/dev\/md5/' /mnt/etc/fstab
sed -i 's/LABEL=swap-[a-zA-Z\-]*/\/dev\/md6/' /mnt/etc/fstab
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:

chroot /mnt  /bin/bash

Так как я скопировал EFI-раздел с помощью dd, то ставить grub нужды нет. В chroot нужно пересобрать ram-диск dracut.

dracut --mdadmconf --fstab --add="mdraid" --add-drivers="raid1 raid456" --force /boot/initrd-$(uname -r).img $(uname -r) -M

Меняем некоторые параметры grub:

sed -i 's/quiet/rd.auto rd.auto=1 rhgb quiet/' /boot/efi/EFI/xenserver/grub.cfg
sed -i 's/LABEL=root-[a-zA-Z\-]*/\/dev\/md1/' /boot/efi/EFI/xenserver/grub.cfg
sed -i '/search/ i\   insmod gzio' /boot/efi/EFI/xenserver/grub.cfg
sed -i '/search/ i\   insmod part_msdos' /boot/efi/EFI/xenserver/grub.cfg
sed -i '/search/ i\   insmod diskfilter mdraid09' /boot/efi/EFI/xenserver/grub.cfg
sed -i '/search/ c\   set root=(md/md1)' /boot/efi/EFI/xenserver/grub.cfg

Выходим из chroot и перезагружаемся:

exit
reboot

Отключаем первый диск и загружаемся со второго диска (того, который мы уже добавили в RAID). Если что-то пошло не так - можно опять загрузиться с первого и сделать все заново. У меня всё раработало с первого раза.
После загрузки смотрим:

cat /proc/mdstat
mount | grep md

И убеждаемся, что мы работаем на RAID.

Добавление второго диска в массивы

Теперь - добавляем в рейд разделы первого диска (за исключением раздела №3), делаем на RAID новую Storage Repository и переносим виртуалки с sda3 на md3.
Чтобы не лазить в биос я просто отключил первый диск на время загрузки, а потом подключил его hot swap'ом, поэтому первый диск (на котором, кстати, живые виртуалки) у меня стал /dev/sdb. Так как таблицы разделов на дисках одинаковые, нам нужно сейчас только поменять типы для свех разделов первого диска, за исключением третьего раздела со Storage Repository.

sgdisk --typecode=1:fd00 /dev/sdb
sgdisk --typecode=2:fd00 /dev/sdb
sgdisk --typecode=4:fd00 /dev/sdb
sgdisk --typecode=5:fd00 /dev/sdb
sgdisk --typecode=6:fd00 /dev/sdb

И добавляем эти диски в массивы:

mdadm -a /dev/md1 /dev/sdb1
mdadm -a /dev/md2 /dev/sdb2
mdadm -a /dev/md4 /dev/sdb4
mdadm -a /dev/md5 /dev/sdb5
mdadm -a /dev/md6 /dev/sdb6

Теперь создаем новую Storage Repository на md3.

xe sr-create content-type=user device-config:device=/dev/md3 host-uuid=__HOST_UUID__ name-label="RAID1 Local" shared=false type=lvm

Виртуалки я переношу с помощью XenCenter: VM → Move VM…, Важно понимать, что при таком способе переноса, процессом управляет XenCenter. Процесс двухстадийный. На первой стадии делаются копии дисков, а потом вносятся изменения в конфигурацию VM и удаляются копии на прежней SR. Если при переносе XenCenter закрывается или теряет связь с хостом, то в XenCenter будут ошибки, а задачи с переносом Async.VDI.copy будут видны на хосте в xe task-list состоянии pending.
Эта ситуация может привести в ступор, однако не все так плохо. Состояние задач pending означает лишь, что задача ждет ответа от подсистемы хранения, которая как раз занимается копированием. В результате диски нормально скопируются, но в конфигурации VM будут прописаны старые диски (на прежней SR). Чтобы все было правильно нужно будет удалить диски на новой SR и повторить процесс.
Поэтому - я рекомендую запускать XenCenter из виртуалки, работающей на этом хосте. Таким образом можно избежать проблем со связью между XenCenter и хостом XenServer.

После переезда виртуалок на новую Storage Repository отлючаем от старой SR её pdb(/dev/sda3) и добавляем его в зеркало:

xe pbd-list
xe pbd-unplug uuid=~~~pdb_uuid~~~
xe sr-destroy uuid=~~~sr_uuid~~~
sgdisk --typecode=3:fd00 /dev/sda
mdadm -a /dev/md3 /dev/sda3

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

cat /proc/mdstat 

Система не загружается, если массив degraded

Если просто физически выдернуть один диск из массива и попытаться загрузиться - система не загрузится. Она скажет:

Started dracut premount hook
A start job is running for dev-md1.device

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

mdadm /dev/md1 -f /dev/sdb1
mdadm /dev/md2 -f /dev/sdb2
mdadm /dev/md3 -f /dev/sdb3
mdadm /dev/md4 -f /dev/sdb4
mdadm /dev/md5 -f /dev/sdb4
mdadm /dev/md5 -f /dev/sdb5
mdadm /dev/md6 -f /dev/sdb6

https://www.centos.org/forums/viewtopic.php?t=50893

http://man7.org/linux/man-pages/man7/dracut.cmdline.7.html

, 2019/01/27 20:23

mdadm -a /dev/md1 /dev/sdb1

mdadm: Cannot open /dev/sda1: Device or resource busy

mdadm -a /dev/md5 /dev/sdb5

mdadm: Cannot open /dev/sda5: Device or resource busy

Остальные все зацепились, можешь подсказать в чем загвоздка?

, 2019/01/28 07:41

Довольно странно. ты добавляешь раздел с диска /dev/sdb, а ругается он на /dev/sda. ну для начала я бы посмотрел не смонтированы ли разделы диска /dev/sda:

mount | grep sda

и посмотрел бы какие разделы в массивах уже:

cat /proc/mdstat
, 2019/03/04 15:54

Пытаюсь установить xenserver 7.6 по инструкции после перезапуска xen не грузиться пишет first boot kernel загрузки как bios он не видит md в чем могу ошибаться спасибо

Enter your comment. Wiki syntax is allowed:
 
  • citrix/software_raid_xenserver_7.6.txt
  • Last modified: 2019/02/11 09:13
  • by 127.0.0.1