Запуск виртуальных машин с Hyper-V Server 2012R2 на хостах ESXi 5.5

Автор: vik_kr Дата: . Категория: Статьи

Не секрет, что Windows 2012 (особенно версия R2) принес с собой большое количество фишек и плюшек, в особенности корпоративного уровня. И так как деятельность моя связана непосредственно с эксплуатацией систем виртуализации, то выход Hyper-V Server 2012 R2 вызвал логичное желание — покопаться в нем руками, ведь читать статьи хорошо, но пощупать конечностями еще лучше! Особенно учитывая тот факт, что Hyper-V Server 2012R2 абсолютно бесплатен для коммерческой эксплуатации (к слову, бесплатна именно версия Hyper-V Server 2012 R2, т.е. редакция работающая в режиме Core).


Но вот незадача, большая часть функционала гипервизоров подразумевает под собой наличие нескольких хостов и их взаимодействие между собой (различные миграции, отказоустойчивые кластера и т.д.). Ковыряться с несколькими железками желания у меня не было никакого, тем более что уже имелся небольшой тестовый стенд с ESXi 5.5. После непродолжительного раздумья было решено развернуть на нем несколько виртуальных машин под управлением Hyper-V Server 2012 R2. Тут-то я и столкнулся с проблемами. После разворачивания гипервизора он отлично имитировал свою бурную деятельность, позволял создавать виртуальные машины и копаться в настройках, но как только я попытался запустить виртуальную машину, то неожиданно получил сообщение о том, что сделать это невозможно, что какой-то сервис hyper-v не работает, либо железка моя не поддерживает виртуализацию.

Вспомнив, что в ESXi для работы виртуализации в виртуализации надо включать определенную опцию, я сразу решил ее проверить, но к моему удивлению опция эта была включена. К слову, опция эта называется Virtual Hardware Virtualization, наверняка многие пытались запустить ESX на виртуальной машине в ESX и уже сталкивались с такой проблемой. Для этого необходимо:

1. Подключиться по SSH к хосту ESXi
2. Добавить в файл /etc/vmware/config строку:
vhv.allow = «TRUE» 
3. Перезагрузить хост

Было решено посоветоваться с гуглом. Первое, что мне попалось — это сообщения, где говорится, что запустить Hyper-V Server 2012 R2 в виртуальной среде невозможно. Слегка расстроившись, но не теряя надежду, я продолжил поиск и обнаружил, что для этого необходимо задать всего лишь две настройки в виртуальной машине — дополнительный параметр hypervisor.cpuid.v0 и указать тип гостевой ОС WindowsHyperVGuest. 
Настройка hypervisor.cpuid.v0 задается следующим образом:

1. Открываем окно редактирования виртуальной машиной (правой кнопкой мыши по ВМ, пункт Edit Settings);
2. Заходим на вкладку Options;
3. Выбираем раздел General и нажимаем кнопку Configuration Parameters;
4. Жмем Add Row и указываем новую переменную с именем hypervisor.cpuid.v0и значением FALSE.

Далее необходимо указать тип гостевой ОС. Сразу оговорюсь что такого типа ОС в списке выбора нет. Более того, найденный тип WindowsHyperVGuest, как выяснилось в последствии, был некорректен, возможно, он указан для какой-то другой версии ESX, но у меня при указании данного типа ОС виртуальная машина не запускалась ругаясь на мои кривые руки. Верным значением является значениеwinhyperv. Для его задания делаем следующее:

1. Открываем VMX файл виртуальной машины (например, зайдя по SSH на хост и найдя директорию виртуальной машины, к слову, все они лежат в папке/vmfs/volumes/[имя datastore]).
2. Изменяем значение переменной guestOS следующим образом:
guestOS=«winhyperv»
3. Сохраняем изменения.

После этих действий можно запускать виртуальную машину c Hyper-V Server 2012R2 и виртуальные машины на нем должны нормально стартовать, во всяком случае у меня запускаются без проблем. 

Если этого не случилось, также рекомендуют сделать Upgrade Virtual Hardware виртуальной машины до версии 10 (к слову, у меня версии машин именно такие), а также зайти в свойства виртуальной машины и в разделе CPU/MMU Virtualization и принудительно выбрать пункт «Use Intel VT-x/AMD-V for instruction set virtualization and Intel EPT/AMD RVI for MMU virtualization».

Подведу итоги. У меня для запуска виртуальных машин на виртуальной машине hyper-v server 2012R2 запущенной на хосте ESXi 5.5 хватило следующих действий:
1. На хосте ESXi в файле /etc/vmware/config добавить строку vhv.allow = «TRUE» и перезагрузить хост
2. в настройках виртуальной машины в разделе Options\General\Configuration Parameters добавить переменную hypervisor.cpuid.v0 со значением FALSE
3. в VMX файле виртуальной машины изменить значение переменной guestOS таким образом:guestOS=«winhyperv»