Миграция Xenserver 7 на linux raid
Среди бросающихся в глаза плюшек (помимо миграции на 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=
естественно, 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:
Меняем конфигурацию 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.