Мне всегда нравился бесплатный гипервизор Xenserver, часто его использовал. Но недавно принял решение постепенно переходить на другой гипервизор. Какой именно - еще не решил окончательно. О причинах отказа от Xenserver и общих мыслях по поводу современных гипервизоров расскажу подробнее далее. В статье рассмотрю подробно вопрос переноса виртуальных машин с Xenserver на Hyper-v.
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Введение
Статью изначально хотел написать на тему установки Xenserver 7 на mdadm raid1. Мне всегда нравился xen именно за возможность установить его на mdadm. Это позволяло использовать гипервизор на любом железе с двумя хардами, обеспечивая простую отказоустойчивость на уровне дисков. Это удобно и бюджетно. То же самое можно сделать на kvm, но лично мне у xen больше нравится оснастка управления в виде приложения для windows. В нее можно удобно подключать множество серверов и управлять всем из одного места. Как плюс, в сравнении с kvm, проще и быстрее установить и настроить в работу, передать кому-нибудь на управление.
Собственно, черновик статьи по установке Xenserver на софтовый рейд я подготовил и протестировал. На первый взгляд все работает. Проблемы начались, когда я стал проверять отказоустойчивость и отключать один хард. Как оказалось, xenserver не может нормально загрузиться, если рейд mdadm уходит в состояние degreaded. Я был очень расстроен этим фактом и потратил непрерывно почти сутки на то, чтобы разобраться с ситуацией и попробовать решить проблему. Но у меня это не получилось. И в интернете рецепта по решению проблемы тоже не нашел, но нашел подтверждение этой проблемы.
Похоже, XenServer с версии 7 больше не поддерживает работу на mdadm. Об этом даже упомянуто в официальном FAQ:
- Does XenServer support a software-based RAID implementation?
- No, XenServer does not support software RAID.
Я проверил на версии 7.0 и 7.1. Результат один и тот же - система не загружается, если рейд развалился. Причем в интернете есть статьи, где рассказано, как перенести чистую установку xen 7 на mdadm. Похоже эти люди просто не тестировали отказ одного из дисков. Пока это не проверишь, кажется, что все в порядке. Проблема тут в том, что Xenserver 7 перешел на CentOS 7. А там много нововведений, в частности systemd. Я точно не смог определить в чем же конкретно проблема. Есть какая-то не совместимость в модулях загрузки, ядре xenserver и версии mdadm. На CentOS 7 был похожий баг в момент выхода, но он был оперативно исправлен. А на XenServer разработчики на это забили, так как поддержку mdadm и не обещали. В итоге гипервизор остался без возможности установки на mdadm. Для меня это неприемлемо, так как mdadm активно использую. Если выходит из строя любой диск, система в момент загрузки бесконечно висит с сообщением:
A Start Job is running for dev-md0.device
У меня до сих пор есть много виртуальных машин под управлением CentOS 5. Особенность этой версии в том, что для нормальной работы на XenServer на систему устанавливалось специальное ядро kernel-xen. В итоге, при переносе системы на другой гипервизор, она отказывалась работать. Необходимо серьезно поработать напильником, чтобы завести ее. Мне важно было отработать этот момент, так как в работе придется постепенно уходить от Xenserver в сторону либо Hyper-V, либо KVM. Пока еще не решил окончательно, так как на KVM у меня так и не получилось завести виртуальные машины с xen, а вот на Hyper-V удалось. Об этом и расскажу.
Перенос виртуальной машины с xenserver на kvm
Сам перенос виртуальной машины представляет из себя простое копирование диска с одного гипервизора на другой. Для бэкапа Xenserver я использую бесплатную версию программы Alike Free. К сожалению, ее больше нет в бесплатной редакции. Разработчики закрыли бесплатный проект, есть только триальная версия от платной. Но у меня остался и дистрибутив, и ключи для бесплатной версии. Я продолжаю ее использовать. Простая и удобная программа, которая позволяет делать инкрементные бэкапы виртуальных машин. Она же умеет выгружать бэкапы в vhd формате. Все что надо сделать для переноса виртуалки - создать такую же машину на hyper-v и в качестве диска указать перенесенный vhd образ с xenserver. Но если после этого просто запустить виртуалку, вы получите ошибку.
Error 13: invalid or unsupported executable format
Ничего удивительного в этом нет, модифицированное ядро для xen работает только на самом гипервизоре. Для работы в другой среде необходимо установить стандартное ядро linux. Вот этим я и займусь далее. Задача оказалась очень непростой, пришлось много ковыряться в различных нюансах. В первую очередь, чтобы не забыть приобретенный опыт, я и пишу эту статью. Хотя понимаю, что мало кому пригодится подобный опыт. Вряд ли найдется много людей, кто будет переносить уже снятую с поддержки систему CentOS 5 с гипервизора Xen куда-то в другое место. По-хорошему, системы надо переставлять, и я этим постепенно займусь. Но все равно необходимо иметь под рукой готовую инструкцию на случай всяких неожиданностей.
Описанный ниже способ восстановления загрузки виртуальной машины является универсальным средством для решения проблем с загрузкой linux сервера. Если у вас по какой-то причине не загружается linux сервер, сломался загрузчик или возникли проблемы после обновления ядра, рассказанные далее способы обновления и замены ядра и загрузчика могут помочь в решении этой проблемы.
Восстановление загрузки linux сервера
Для того, чтобы виртуальная машина заработала на hyper-v, как я уже сказал, необходимо установить стандартное ядро. Для этого загружаемся в виртуальной машине с загрузочного диска CentOS 7 и выбираем режим Rescue a CentOS system.
Чтобы выбрать этот раздел, необходимо в главном меню выбрать Troubleshooting. Дожидаемся загрузки и выбираем первый предложенный вариант.
Сразу чрутимся в нашу восстанавливаемую систему. Первым делом надо обновить систему и установить стандартное ядро. Скорее всего через yum у вас ничего не получится, так как ссылки на репозитории centos 5 стали неактивны, после того, как 31-го марта закончилась поддержка системы. Необходимо изменить файл /etc/yum.repos.d/CentOS-Base.repo, отредактировав пути соответствующих разделов на следующие:
baseurl=http://vault.centos.org/5.11/os/$basearch/ baseurl=http://vault.centos.org/5.11/updates/$basearch/ baseurl=http://vault.centos.org/5.11/addons/$basearch/ baseurl=http://vault.centos.org/5.11/extras/$basearch/ baseurl=http://vault.centos.org/5.11/centosplus/$basearch/ baseurl=http://vault.centos.org/5.11/contrib/$basearch/
Все строки с mirrorlist надо закомментировать, а baseurl изменить на указанные. После этого надо настроить сеть и запустить обновление системы.
# yum clean all # yum update
Теперь установим стандартное ядро linux, а от xen удалим.
# yum remove kernel-xen # yum install kernel
Дальше обновим initrd. Чтобы не было ошибок, необходимо в файле /etc/modprobe.conf закомментировать все строки, в которых есть упоминание xen.
Теперь проверяем версию имеющихся библиотек ядра в системе.
# ls -l /lib/modules/
Берем самую свежу версию и собираем образ initrd.
# mkinitrd -v -f /boot/initrd-2.6.18-419.el5.img 2.6.18-419.el5
Редактируем конфиг загрузчика /boot/grub/grub.conf, чтобы он выбрал при загрузке именно эту версию ядра.
Параметр default=1 соответствует второй строке меню, так как отсчет идет от 0. То есть как раз будет выбрано нужное обновленное ядро. Обновляем загрузчик на диске.
# grub-install /dev/sda
Если получите ошибку:
/dev/sda does not have any corresponding BIOS drive.
Используйте такую команду:
# grub-install --recheck /dev/sda
По идее, на этом можно было бы и завершить. Мы фактически выполнили полное восстановление поломанной загрузки linux сервера. Но так как речь идет о xenserver, есть еще один нюанс. Если сейчас попробовать загрузить виртуальную машину, то все пройдет гладко почти до самого конца загрузки, а потом вылезет ошибка.
init: Id ‘co’ respawning too fast: disabled for 5 minutes
Она будет висеть бесконечно. Связана с доступом к консоли виртуальной машины на xenserver. В другом окружении, параметр должен быть изменен. Чтобы исправить ошибку, надо отредактировать файл /etc/inittab. Найти в нем строку
co:123457:respawn:/sbin/agetty xvc0 9600 vt100-nav
Закомментировать ее, а вместо нее снять комментарий со строки
1:123457:respawn:/sbin/mingetty tty1
Теперь можно перезагружать виртуалку. Она должна благополучно загрузиться. По крайней мере у меня было так.
К сожалению, указанный выше способ не смог заставить загрузиться эту же виртуальную машину на гипервизоре KVM. Не знаю почему. После выбора в загрузчике версии ядра, система просто зависает в таком положении.
И дальше ничего не происходит. Никаких ошибок при этом нет. У меня даже нет идей из-за чего это может быть и в каком направлении двигаться, чтобы запустить виртуалку. Если у кого-то есть идеи как это сделать, прошу совета. Мне бы очень хотелось перенести виртуальные машины с centos 5 на kvm. Я пробовал переносить уже восстановленные виртуалки с hyper-v на kvm, конвертировал диск с vhd в qсow2, но все без результата. Они все равно зависают точно так же, как если бы я их переносил напрямую с xenserver.
Заключение
Перенос виртуальных машин хорошо работает в рамках одного гипервизора. В случае, если переносите с одного на другой, с большой долей вероятности получите некоторые проблемы. Я с этим частенько сталкиваюсь, особенно с linux и freebsd. Чаще всего начинаются проблемы с дисками и загрузчиком. То буквы дисков поменяются, приходится править fstab, то загрузчик не стартует. Иногда сеть может не работать. Везде приходится по месту разбираться и решать возникающие проблемы.
Если у кого-то есть опыт или советы в рассматриваемых в статье проблемах, прошу поделиться в комментариях. Больше всего меня интересует вопрос установки XenServer на mdadm и перенос виртуалок с xenserver на kvm.
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
переносил с виртуалбокс на esxi 6.5 - тот еще геморр но получилось с помощью ovftool и полуручным редактированием конфигов под линух или винду ...
Для того чтобы ВМ запустилась под KVM, нужно пересобрать initrd с поддержкой Virtio, а также удалить исходники ядра касающиеся Xen и установить исходники обычного ядра
mkinitrd --with virtio_pci --with virtio_blk -f /boot/initrd-$(uname -r).img $(uname -r)
Прошу автора статьи обратить внимание на то, что в названии темы написано "Перенос виртуальных машин с XenServer на Hyper-V", а внутри статьи выделен раздел под названием "Перенос виртуальной машины с xenserver на kvm", в котором идёт рассказ (я так понимаю) о переносе ВМ-ок с xenserver на Hyper-V, а не "KVM" !!!
Прошу прощения, в теме у Вас указано перенос на гиперВи, но дальше ввесь разговор о КВМ. Это просто ошибка?
Сейчас вот стал актуальным вопрос о переносе с XEN на Hyper-V. решил подготовится информативно и попал на Вашу статью
В общем-то в статье все написано. Я пытался перенести и на hyper-v и на kvm. Принцип один и тот же. На hyper-v перенес и все заработало, а на kvm - нет. С тех пор не разбирался с этой проблемой, так как отпала необходимость.