Home » Виртуализация » Hyper-V » Перенос виртуальных машин с XenServer на Hyper-V

Перенос виртуальных машин с XenServer на Hyper-V

Мне всегда нравился бесплатный гипервизор Xenserver, часто его использовал. Но недавно принял решение постепенно переходить на другой гипервизор. Какой именно — еще не решил окончательно. О причинах отказа от Xenserver и общих мыслях по поводу современных гипервизоров расскажу подробнее далее. В статье рассмотрю подробно вопрос переноса виртуальных машин с Xenserver на Hyper-v.

Если у вас есть желание научиться работать с роутерами микротик и стать специалистом в этой области, рекомендую по программе, основанной на информации из официального курса MikroTik Certified Network Associate. Курс стоящий, все подробности читайте по ссылке. Есть бесплатные курсы.

Введение

Статью изначально хотел написать на тему установки 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.

Rescue a CentOS system

Чтобы выбрать этот раздел, необходимо в главном меню выбрать Troubleshooting. Дожидаемся загрузки и выбираем первый предложенный вариант.

Загрузка в режиме rescue linux

Сразу чрутимся в нашу восстанавливаемую систему. Первым делом надо обновить систему и установить стандартное ядро. Скорее всего через 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, чтобы он выбрал при загрузке именно эту версию ядра.

Редактирование загрузчика grub

Параметр 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

Редактирование inittab

Теперь можно перезагружать виртуалку. Она должна благополучно загрузиться. По крайней мере у меня было так.

К сожалению, указанный выше способ не смог заставить загрузиться эту же виртуальную машину на гипервизоре KVM. Не знаю почему. После выбора в загрузчике версии ядра, система просто зависает в таком положении.

Не загружается vm на kvm

И дальше ничего не происходит. Никаких ошибок при этом нет. У меня даже нет идей из-за чего это может быть и в каком направлении двигаться, чтобы запустить виртуалку. Если у кого-то есть идеи как это сделать, прошу совета. Мне бы очень хотелось перенести виртуальные машины с centos 5 на kvm. Я пробовал переносить уже восстановленные виртуалки с hyper-v на kvm, конвертировал диск с vhd в qсow2, но все без результата. Они все равно зависают точно так же, как если бы я их переносил напрямую с xenserver.

Заключение

Перенос виртуальных машин хорошо работает в рамках одного гипервизора. В случае, если переносите с одного на другой, с большой долей вероятности получите некоторые проблемы. Я с этим частенько сталкиваюсь, особенно с linux и freebsd. Чаще всего начинаются проблемы с дисками и загрузчиком. То буквы дисков поменяются, приходится править fstab, то загрузчик не стартует. Иногда сеть может не работать. Везде приходится по месту разбираться и решать возникающие проблемы.

Если у кого-то есть опыт или советы в рассматриваемых в статье проблемах, прошу поделиться в комментариях. Больше всего меня интересует вопрос установки XenServer на mdadm и перенос виртуалок с xenserver на kvm.

Онлайн курс по Linux

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «Администратор Linux» в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и установке Linux на виртуалку. Обучение длится 5 месяцев, после чего успешные выпускники курса смогут пройти собеседования у партнеров. Что даст вам этот курс:
  • Знание архитектуры Linux.
  • Освоение современных методов и инструментов анализа и обработки данных.
  • Умение подбирать конфигурацию под необходимые задачи, управлять процессами и обеспечивать безопасность системы.
  • Владение основными рабочими инструментами системного администратора.
  • Понимание особенностей развертывания, настройки и обслуживания сетей, построенных на базе Linux.
  • Способность быстро решать возникающие проблемы и обеспечивать стабильную и бесперебойную работу системы.
Проверьте себя на вступительном тесте и смотрите подробнее программу по .

Помогла статья? Есть возможность отблагодарить автора

Автор Zerox

Zerox
Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству.

4 комментария

  1. Аватар

    Для того чтобы ВМ запустилась под KVM, нужно пересобрать initrd с поддержкой Virtio, а также удалить исходники ядра касающиеся Xen и установить исходники обычного ядра

    mkinitrd —with virtio_pci —with virtio_blk -f /boot/initrd-$(uname -r).img $(uname -r)

  2. Аватар

    Прошу автора статьи обратить внимание на то, что в названии темы написано «Перенос виртуальных машин с XenServer на Hyper-V», а внутри статьи выделен раздел под названием «Перенос виртуальной машины с xenserver на kvm», в котором идёт рассказ (я так понимаю) о переносе ВМ-ок с xenserver на Hyper-V, а не «KVM» !!!

  3. Аватар

    Прошу прощения, в теме у Вас указано перенос на гиперВи, но дальше ввесь разговор о КВМ. Это просто ошибка?
    Сейчас вот стал актуальным вопрос о переносе с XEN на Hyper-V. решил подготовится информативно и попал на Вашу статью

    • Zerox

      В общем-то в статье все написано. Я пытался перенести и на hyper-v и на kvm. Принцип один и тот же. На hyper-v перенес и все заработало, а на kvm — нет. С тех пор не разбирался с этой проблемой, так как отпала необходимость.

Добавить комментарий

Ваш e-mail не будет опубликован.

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.