Install XenServer 7 on software RAID


Список разделов теперь выглядит вот так

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

После дефолтной установки XenServer на диск sda, удалим метаинформацию предыдущих массивов, предварительно их остановив

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

Если при установке по умолчанию был создан SR, удалим его, при этом заменяя UID томов и разделов на свои

xe sr-list
xe pbd-list sr-uuid=<local storage-uuid>
xe pbd-unplug uuid=<uuid>
xe sr-forget uuid=<local storage-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

Очищаем таблицу разделов на диске sdb и переносим её с диска sda

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

Выставляем типа разделов (fd00 - это raid)

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

Подгружаем модуль ядра для работы с массивом

modprobe raid1
mknod /dev/md0 b 9 0
mknod /dev/md1 b 9 1
mknod /dev/md2 b 9 2
mknod /dev/md3 b 9 3

Создаем массив уровня 1, состоящий из двух дисков. Для раздела /dev/md0 указываем версию метаданных 0.90 - с этого раздела будет загружаться система

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

Форматируем созданные разделы под ext3 и временно монтируем их

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

Изменяем /etc/fstab подставляя вместо LABEL и UUID свои значения, которые возвращают две следующие команды

cat /etc/fstab | grep ^LABEL | grep -w root | awk {'print $1'}
blkid | grep ^/dev/md0 | awk {'print $2'} | sed s/\"//g
sed -i "s|LABEL=root-ozxqte|UUID=3ae2196e-3b9b-4e9b-9133-3cd9c11335d1|" /mnt/etc/fstab

Аналогичные действия для раздела /var/logs

cat /etc/fstab | grep ^LABEL | grep -w logs | awk {'print $1'}
blkid | grep ^/dev/md3 | awk {'print $2'} | sed s/\"//g
sed -i "s|LABEL=logs-ozxqte|UUID=6976e3ae-fb3c-475b-87de-3349944cc963|" /mnt/etc/fstab

И для раздела подкачки

cat /etc/fstab | grep ^LABEL | grep -w swap | awk {'print $1'}
blkid | grep LABEL | grep swap | awk {'print $3'} | sed s/\"//g
sed -i "s|LABEL=swap-ozxqte|UUID=bba2d55e-f5ba-4723-b628-c1768d4f29fa|" /mnt/etc/fstab

Swap будет храниться не в массиве, а на каждом из дисков, поэтому подключаем раздел подкачки на втором жестком диске

mkswap /dev/sdb6
blkid | grep /dev/sdb6 | awk {'print $2'} | sed s/\"//g
echo "UUID=99a7b36d-c61c-4217-ba5b-b429242d538e          swap      swap   defaults   0  0" >> /mnt/etc/fstab

Монтируем окружение

mount -o bind /dev /mnt/dev
mount -t sysfs none /mnt/sys
mount -t proc none /mnt/proc
mount --bind /run /mnt/run

Генерируем конфигурационный файл /etc/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

И копируем его

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

Указываем, что теперь система будет загружаться с массива

cat /etc/fstab | grep ^LABEL | grep -w root | awk {'print $1'}
blkid | grep ^/dev/md0 | awk {'print $2'} | sed s/\"//g

В grub.cfg изменяем LABEL на UUID

sed -i "s|LABEL=root-ozxqte|UUID=3ae2196e-3b9b-4e9b-9133-3cd9c11335d1|" /mnt/boot/grub/grub.cfg
sed -i "/search --label --set root $(echo LABEL=root-ozxqte| cut -d= -f2)/d" /mnt/boot/grub/grub.cfg
sed -i "s|quiet|rd.auto rd.auto=1 rhgb quiet|" /mnt/boot/grub/grub.cfg

Делаем chroot в будущую систему и генерируем initrd с учетом всех предыдущих настроек

chroot /mnt /bin/bash
/usr/sbin/dracut --mdadmconf --fstab --add="mdraid" --filesystems "ext3" --add-drivers="raid1 raid10" --force /boot/initrd-$(uname -r).img $(uname -r) -M
exit

Устанавливаем grub на второй жесткий диск

chroot /mnt /bin/bash
/usr/sbin/grub-install /dev/sdb
exit

Отмонтируем разделы

umount /mnt/dev
umount /mnt/sys
umount /mnt/proc
umount /mnt/var/log
umount /mnt

Перезагружаемся и в SETUP выбираем загрузку со второго жесткого диска

Изменяем тип разделов на sda

sgdisk --typecode=1:fd00 /dev/sda
sgdisk --typecode=2:fd00 /dev/sda
sgdisk --typecode=3:fd00 /dev/sda
sgdisk --typecode=5:fd00 /dev/sda

И добавляем sda в наш 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

Переустанавливаем grub на sda

grub-install /dev/sda

Добавляем локальное хранилище для виртуальных машин

xe host-list | grep ^uuid | cut -d: -f2 | awk {'print $1'}
xe sr-create content-type=user host-uuid=5a0603f8-e2cc-4f26-a6c9-730283d4e139 type=lvm device-config:device=/dev/md2 shared=false name-label="Local storage"