В одной из тестовых задач понадобилось установить компонент виртуализации Hyper-V на виртуальной машине с ОС Windows 10 (применимо и к Windows Server 2016), запущенной на гипервизоре VMWare ESXi. Т.е. нужно организовать вложенную виртуализацию Hyper-V на VMWare ESXi.
Сначала пару слов в вложенной виртуализации. Вложенная виртуализация (Nested Virtualization) – возможность запускать гипервизор внутри виртуальной машины на другом гипервизоре. В Hyper-V полноценная поддержка вложенной виртуализации появилась Windows Server 2016 / Windows 10 Anniversary Update, в VMWare технология вложенной виртуализации работает уже давно (появилась еще в ESXi 5.0).
Имеем: хост виртуализации VMWare ESXi 6.0, на нем запущена виртуальная машина с Windows 10 1709.
При попытке установить роль гипервизор Hyper-V (компонент называется Низкоуровневая оболочка Hyper-V) с помощью функции включения/ отключения компонентов в классической панели управления Windows 10, данная опция оказалась недоступна. В качестве причины указывается:
Невозможно установить Hyper-V: у процессора отсутствуют необходимые возможности виртуализации
Hyper-V cannot be installed: The processor does not have the required virtualization capabilities
Чтобы включить вложенную виртуализацию для данной ВМ, откройте настройки виртуальной машины с помощью веб клиента vSphere (ВМ должна быть выключена). В разделе CPU включите опцию «Expose hardware assisted virtualization to the guest OS» (эта опция не доступна в “тяжелом” C# клиенте vCenter)
hypervisor.cpuid.v0 = “FALSE”
mce.enable = “TRUE”
vhv.enable= "TRUE"
В клиенте vSphere данные опции можно добавить в настройках ВМ. Вкладка Options-> General -> Configure parameters. Добавьте две новые строки с данными параметрами (кнопка Add Row).
Включаем виртуальную машину с Windows 10 и еще раз пытаемся установить роль Hyper-V. Система теперь перестала определять, что она работает внутри другого гипервизора, но теперь появилась другая ошибка:
Не удается установить Hyper-V: у процессора отсутствуют возможности преобразования адресов второго уровня (SLAT)
Hyper-V cannot be installed: the processor dose not support second level address translation (SLAT).
Т.е. процессор виртуальной машины помимо поддержки виртуализации должен поддерживать технологию SLAT — возможность виртуализации страниц памяти и передачи их под прямой контроль гостевой ОС. В терминологии Intel эта фича называется Еxtended Page Tables (EPT), у AMD — Rapid Virtualization Indexing (RVI).
Проверим поддержку SLAT процессором с помощью команды:
systeminfo
Команда в разделе «Требования Hyper-V» должна вернуть, что отсутствует поддержка SLAT.
Second Level Address Translation: No
Преобразование адресов второго уровня: Нет
В этом случае нужно изменить параметры процессора виртуальной машины. В веб клиенте в секции CPU/MMU Virtualization нужно выбрать Hardware CPU and MMU.
В «классическом» клиенте аналогичная опция находится на вкладке Options в секции CPU/MMU Virtualization и называется ”Use Intel VT-x/AMD-V for instruction set virtualization and Inet EPT/AMD RVI for MMU virtualization”.
Запустите виртуальную машину Windows 10 и убедитесь, что ее процессор теперь поддерживает SLAT. Теперь можно установить все компоненты роли Hyper-V и запускать внутри виртуалки Win10 собственные виртуальные машины.