Перенос установленного XenServer 6.2 на программный RAID на компьютере с UEFI (GPT)
Создано на основе: CodeAddict’s Blog и http://pastebin.com/buBHcfxU, а также http://wysotsky.info/?p=106&lang=ru и http://habrahabr.ru/post/179825/.
Сначала установите XenServer на первый диск (/dev/sda) и НЕ настраивайте локальное хранилище.
После инсталяции /dev/sda должен содержать три раздела, проверьте это:
sgdisk -p /dev/sda
Второй раздел используется для бекапа во время обновления XenServer. Для существующей методики обновления он не используется.
мы будем использовать /dev/sdb в качестве зеркала. Для начала, очистите таблицу разделов на диске
sgdisk --zap-all /dev/sdb
и установите GPT на нем
sgdisk --mbrtogpt --clear /dev/sdb
Следующие команды создают разделы на диске /dev/sdb и зависят от инсталяции XenServer. Разделы должны быть такие же как и на диске /dev/sda. Последний третий раздел на диске должен иметь заканчиваться на секторе РАзмер_диска - 34.
sgdisk --new=1:2048:8388641 /dev/sdb sgdisk --typecode=1:fd00 /dev/sdb sgdisk --attributes=1:set:2 /dev/sdb sgdisk --new=2:8390656:16777249 /dev/sdb sgdisk --typecode=2:fd00 /dev/sdb sgdisk --new=3:16779264:$(expr $(sgdisk -p /dev/sdb | awk '/Disk \// {print($3)}') - 34) /dev/sdb sgdisk --typecode=3:fd00 /dev/sdb
Перегрузите сервер
после перезагрузки, создайте устроства RAID:
mknod /dev/md0 b 9 0 mknod /dev/md1 b 9 1 mknod /dev/md2 b 9 2 mdadm --create /dev/md0 --level=1 --raid-devices=2 missing /dev/sdb1 mdadm --create /dev/md1 --level=1 --raid-devices=2 missing /dev/sdb2 mdadm --create /dev/md2 --level=1 --raid-devices=2 missing /dev/sdb3
Отформатируйте корневой диск RAID, смонтируйте его в /mnt и скопируйте на него все файлы
mkfs.ext3 /dev/md0 mount /dev/md0 /mnt cp -vxpR / /mnt
Измените /mnt/etc/fstab – замените корневую фалйловую систему на /dev/md0.
sed -i 's/LABEL=[a-zA-Z\-]*\s\(.*\)/\/dev\/md0 \1/' /mnt/etc/fstab
Создайте новый загрузочный образ и разархивируйте его:
mkdir /mnt/root/initrd-raid mkinitrd -v --fstab=/mnt/etc/fstab /mnt/root/initrd-raid/initrd-`uname -r`-raid.img `uname -r` cd /mnt/root/initrd-raid zcat initrd-`uname -r`-raid.img | cpio -i
Отредактируйте файл init – вставьте raidautorun …:
sed -i 's/raidautorun \/dev\/md0/raidautorun \/dev\/md0\nraidautorun \/dev\/md1\nraidautorun \/dev\/md2/' init
Скопируйте новый загрузочный образ в каталог /mnt/boot и измените загрузочное меню
find . -print | cpio -o -Hnewc | gzip -c > /mnt/boot/initrd-`uname -r`-raid.img rm /mnt/boot/initrd-2.6-xen.img cd /mnt/boot ln -s initrd-`uname -r`-raid.img initrd-2.6-xen.img
замените в /mnt/boot/extlinux.conf строку root=LABEL=root-… на root=/dev/md0 во всех пунктах меню
sed -i 's/LABEL=[a-zA-Z\-]*/\/dev\/md0/' extlinux.conf
Настройте MBR для GPT на /dev/sdb
cat /mnt/usr/share/syslinux/gptmbr.bin > /dev/sdb cd /mnt extlinux --raid -i boot/
Перезагрузите сервере (ВНИМАНИЕ: загрузка должна происходить со ВТОРОГО диска, а НЕ с /dev/sda)
Когда XenServer загрузится, добавьте разделы с /dev/sda в массивы:
sgdisk --attributes=1:set:2 /dev/sda sgdisk --typecode=1:fd00 /dev/sda sgdisk --typecode=2:fd00 /dev/sda sgdisk --typecode=3:fd00 /dev/sda mdadm -a /dev/md0 /dev/sda1 mdadm -a /dev/md1 /dev/sda2 mdadm -a /dev/md2 /dev/sda3
Массивы RAID нуждаются в синхронизации, это может занять какое-то время. Вы можете отслеживать процесс синхронизации:
watch -n 1 cat /proc/mdstat
Когда все три массива синхронизируются, скопируйте настройки RAID в /etc/mdadm.conf
mdadm --detail --scan >> /etc/mdadm.conf
В конце добавьте /dev/md2 как локальное хранилище в XenServer (если вам это нужно).
xe sr-create content-type=user device-config:device=/dev/md2 host-uuid= name-label="Local Storage" shared=false type=lvm
Тип также может быть ext: type=ext
PS: Обновление установленной системы: Обновление XenServer, установленного на софт-RAID (с 6.1 до 6.2) - http://wysotsky.info/?p=145
Перенос установленного XenServer 6.2 на программный RAID на компьютере с BIOS
На компьютере с UEFI на диске должна быть таблица GPT, а на компе с BIOS - обычный MBR.
Копируем таблицу разделов с диска на который установлен XenServer на диск, который будет зеркалом:
dd if=/dev/sda of=/dev/sdb bs=512 count=1
После этого я перезагрузил сервер, так как partprobe в XenServer 6.2 не оказалось.
Потом назначим партиции (она там одна) правильный тип - Linux RAID
echo -e "\nt\nfd\nw\nx" | fdisk /dev/sdb
Создаем программный массив на втором зеркальном диске
mknod /dev/md1 b 9 0 mdadm --create /dev/md1 --level=1 --raid-devices=2 missing /dev/sdb1 mdadm --grow /dev/md1 -b internal
Правда после перезагрузки у меня массив сам определился как /dev/md0
Создаем файловую систему и монтируем root.
mkfs.ext3 /dev/md1 mount /dev/md1 /mnt
И хорошо бы проверить, что оно смонтировалось командой mount. У меня почему-то в первый раз не смонтировалось, хотя ошибку не показало.
Копируем корневую файловую систему.
cp -vxpR / /mnt
Меняем корень в /mnt/etc/fstab на /dev/md1.
То есть редактируем строку
LABEL=root-fmlzvoid / ext3 defaults 1 1
Чтобы она была
/dev/md1 / ext3 defaults 1 1
Прописываем массивы в /mnt/etc/mdadm/mdadm.conf:
cp /mnt/etc/mdadm/mdadm.conf /mnt/etc/mdadm/mdadm.conf_orig mdadm --examine --scan >> /mnt/etc/mdadm/mdadm.conf
Устанавливаем загрузчик.
mount --bind /dev /mnt/dev mount -t sysfs none /mnt/sys mount -t proc none /mnt/proc chroot /mnt /sbin/extlinux --install boot dd if=/mnt/usr/share/syslinux/gptmbr.bin of=/dev/sdb
Создаем новый образ initrd, содержащий драйвер для новой корневой файловой системы на программном RAID-массиве.
chroot /mnt mkinitrd -v -f --theme=/usr/share/splash --without-multipath /boot/initrd-`uname -r`.img `uname -r`
Отредактируем /mnt/boot/extlinux.conf, заменив все ссылки на старую файловую систему (root=LABEL=xxx) на root=/dev/md1.
Размонтируем /dev/sdb1, перезагружаем сервер, указываем в BIOS грузиться со второго диска.
Проверяем что загрузились с /dev/md1.
mount
14. Добавляем /dev/sda в массивы.
sgdisk --typecode=1:fd00 /dev/sda mdadm -a /dev/md1 /dev/sda1
Повторяем то же самое для всех разделов.
15. Дожидаемся завершения процесса перестроения массива, наслаждаясь видом прогрессбаров.
watch -n 1 cat /proc/mdstat
16. Для надежности перезагружаем сервер.
Далее нам потребуется создать репозиторий для хранения дисков виртуальных машин и установить обновления (начиная с XenServer 6.2, Citrix решила усложнить жизнь в этом вопросе), но об этом я расскажу в следующих записях.
Discussion