Виртуализация внутри виртуальной машины
VirtualBox: как запустить виртуальную машину внутри другой виртуальной машины (вложенная виртуализация)
Функция вложенной виртуализации – Nested VT-x/AMD-v позволяет запускать виртуальные машины внутри других виртуальных машин. То есть используя вложенную виртуализацию можно установить тот же Virtualbox на уже имеющуюся виртуальную машину и запускать другие виртуальные машины уже внутри неё.
Начиная с версии 6.1, VirtualBox поддерживает функцию вложенной виртуализации на хост-системах с процессорами AMD и Intel (убедитесь, что у вас установлена последняя версия Virtualbox).
Для процессоров Intel вложенная виртуализация недоступна из графического интерфейса программы (опция «Включить Nested VT-x/AMD-v» недоступна в настройках Virtualbox), но её можно включить посредством командной строки. Далее и рассмотрим как это сделать.
Как включить вложенную виртуализацию Nested VT-x с помощью командной строки
В нашем примере вложенная виртуализация была подключена для виртуальной Windows 10.
Теперь, если мы перейдём в настройки VirtualBox (Настроить → Система → Процессор), то увидим, что опция «Включить Nested VT-x/AMD-v» теперь активна,
а значит и вложенная виртуализация теперь работает и следовательно данная виртуальная машина будет действовать как гипервизор, что позволит запускать другие виртуальные машины внутри неё.
Как включить вложенную виртуализацию Nested VT-x/AMD-v в VirtualBox
Вложенная виртуализация – это функция, которая позволяет запускать виртуальные машины внутри виртуальных машин. Например, допустим, есть необходимость в запуске виртуальной машины с операционной системой CentOS с использованием Oracle VirtualBox в вашей виртуальной системе Ubuntu Linux. Если в Ubuntu включена функция вложенной виртуализации – Nested VT-x/AMD-v, вы можете установить Virtualbox или KVM на виртуальной машине CentOS и запустить другие виртуальные машины внутри нее. Таким образом, в основном это метод запуска среды виртуализации в другой среде виртуализации.
Начиная с версии 6.1, Oracle VM VirtualBox поддерживает функцию вложенной виртуализации на хост-системах с процессорами AMD и Intel. Поэтому убедитесь, что у вас установлена последняя версия Virtualbox.
Для процессоров Intel вложенная виртуализация недоступна из графического интерфейса программы, но ее можно включить с помощью командной строки.
Как включить вложенную виртуализацию Nested VT-x VirtualBox в системах в Microsoft Windows
Вложенная виртуализация включается отдельно для каждой виртуальной системы.
Открываем Командую строку (cmd.exe) от имени Администратора и выполняем следующие команды.
Переходим в директорию установленной программы в Program Files:
Выводим список виртуальных систем с помощью команды:
Выбрав точное название виртуальной системы, подключаем вложенную виртуализацию:
В данном случае вложенная виртуализация была подключена для виртуальной системы Ubuntu 20.04.
Проверим включение вложенной виртуализации в графическом интерфейсе VirtualBox. Откройте VirtualBox, выберите виртуальную машину и перейдите в меню Настроить > Система > Процессор.
Отныне эта виртуальная машина будет действовать как гипервизор, так что вы можете запускать виртуальные машины внутри нее.
Как включить вложенную виртуализацию Nested VT-x/AMD-v в VirtualBox в системах GNU/Linux
Открываем Терминал и выполняем следующие команды.
Для отображения списка виртуальных систем:
Для включения вложенной виртуализации:
Теперь в виртуальной системе вы можете установить VirtualBox и в нем установить еще одну виртуальную машину.
Вложенная виртуализация Hyper-V — первый шаг
Автор статьи — Михаил Комаров, MVP — Cloud and Datacenter Management
Добрый день! Цель сегодняшней статьи — рассказать о реализации вложенной виртуализации на платформе Hyper-V. Не секрет, что Hyper-V не поддерживал вложенную виртуализацию в отличие от других производителей. С выходом сборки Windows Server 2016 Technical Preview 4 (TP4), которая предназначена для желающих попробовать новый функционал, ситуация изменилась. Демонстрации вложенной виртуализации можно увидеть в записи доклада «Один доклад, один ноутбук, один датацентр» мероприятия Microsoft TechDay 2015.
Все демонстрации были проведены на HP Blade Gen 8, с базовым процессором Intel Xeon E5 2670 и объёмом оперативной памяти 32 GB.
Выбор этой системы был обусловлен желанием показать, насколько невысоким может быть порог вхождения в технологии виртуализации. В общем обычная система по сегодняшним меркам, когда у большинства дома стоят Intel Core i3 и выше, и объем оперативной памяти стартует от 8GB. Это значит, что Вы при необходимости сможете использовать вложенную виртуализацию.
Архитектура
Напомним классический вариант виртуализации. Если у нас есть физический хост с поддержкой технологии виртуализации на уровне чипсета и процессора и включенными в BIOS необходимыми опциями, то получаем следующую картину:
На нулевом уровне здесь физический хост, а на первом уровне — тонкий слой программного обеспечения, называемый гипервизором. Также на первом уровне находится раздел с корневой операционной системой и разделы для виртуальных машин. Проиллюстрируем с использованием утилиты CoreInfo от Марка Руссиновича поведение параметров процессора, связанных с виртуализацией. В таблице приведены первые несколько строк работы утилиты CoreInfo.
До включения роли Hyper-V в операционную систему передавался параметр процессора, связанный с виртуализацией. Это видно по двум строкам в левой части таблицы. Первый параметр — отсутствие гипервизора, второй – флаг, ответственный за виртуализацию. После включения роли гипервизора посмотрим снова на свойства процессора в корневом разделе и увидим следующее: гипервизор включен, и флаг, связанный с виртуализацией, не транслируется в раздел корневой операционной системы. Также обратим внимание на значение Microprocessor signature, которое в нашем случае 0000710 и связано с физическим процессором.
Перейдем ко вложенной виртуализации.
Из таблицы видно, что виртуальная машина «понимает», что работает из-под гипервизора. Но до запуска скрипта флаг, связанный с виртуализацией, не передаётся. Далее отработал скрипт, который изменил свойства нашей виртуальной машины и ее процессора и флаг, связанный с виртуализацией, появился. Далее мы включили роль Hyper-V, после этого возник тонкий слой виртуализации и наша операционная система переместилась в свой корневой раздел, флаг виртуализации исчез. Также обратим внимание на значение Microprocessor signature, которое в нашем случае стало FFFFFFFF, что указывает на виртуализацию процессора. Далее мы создали виртуальную машину внутри виртуальной машины и для чистоты эксперимента запустили утилиту CoreInfo.
В общем-то, ожидаемый результат — присутствие гипервизора и отсутствие флага виртуализации на первом этапе и присутствие флага виртуализации на втором. В итоге имеем вот такое решение.
Настройки и ограничения
Ресурсы
Спасибо за внимание,
Михаил Комаров
MVP — Cloud and Datacenter Management
Run Hyper-V in a Virtual Machine with Nested Virtualization
Nested virtualization is a feature that allows you to run Hyper-V inside of a Hyper-V virtual machine (VM). This is helpful for running a Visual Studio phone emulator in a virtual machine, or testing configurations that ordinarily require several hosts.
Nested Virtualization is supported both Azure and on-premises. However, the nested virtual machines are not supported for production purposes. Labs, testing environments, demo environments, etc, are more of it’s purpose.
Prerequisites
Intel processor with VT-x and EPT technology
AMD EPYC/Ryzen processor or later
The guest can be any Windows supported guest operating system. Newer Windows operating systems may support enlightenments that improve performance.
Configure Nested Virtualization
Disable Nested Virtualization
You can disable nested virtualization for a stopped virtual machine using the following PowerShell command:
Dynamic Memory and Runtime Memory Resize
When Hyper-V is running inside a virtual machine, the virtual machine must be turned off to adjust its memory. This means that even if dynamic memory is enabled, the amount of memory will not fluctuate. For virtual machines without dynamic memory enabled, any attempt to adjust the amount of memory while it’s on will fail.
Note that simply enabling nested virtualization will have no effect on dynamic memory or runtime memory resize. The incompatibility only occurs while Hyper-V is running in the VM.
Networking Options
There are two options for networking with nested virtual machines:
MAC Address Spoofing
In order for network packets to be routed through two virtual switches, MAC address spoofing must be enabled on the first (L1) level of virtual switch. This is completed with the following PowerShell command.
Network Address Translation (NAT)
The second option relies on network address translation (NAT). This approach is best suited for cases where MAC address spoofing is not possible, like in a public cloud environment.
First, a virtual NAT switch must be created in the host virtual machine (the «middle» VM). Note that the IP addresses are just an example, and will vary across environments:
Next, assign an IP address to the net adapter:
Each nested virtual machine must have an IP address and gateway assigned to it. Note that the gateway IP must point to the NAT adapter from the previous step. You may also want to assign a DNS server:
How nested virtualization works
Modern processors include hardware features that make virtualization faster and more secure. Hyper-V relies on these processor extensions to run virtual machines (e.g. Intel VT-x and AMD-V). Typically, once Hyper-V starts, it prevents other software from using these processor capabilities. This prevents guest virtual machines from running Hyper-V.
Nested virtualization makes this hardware support available to guest virtual machines.
The diagram below shows Hyper-V without nesting. The Hyper-V hypervisor takes full control of the hardware virtualization capabilities (orange arrow), and does not expose them to the guest operating system.
In contrast, the diagram below shows Hyper-V with nested virtualization enabled. In this case, Hyper-V exposes the hardware virtualization extensions to its virtual machines. With nesting enabled, a guest virtual machine can install its own hypervisor and run its own guest VMs.
3rd Party Virtualization Apps
Virtualization applications other than Hyper-V are not supported in Hyper-V virtual machines, and are likely to fail. This includes any software that requires hardware virtualization extensions.
Настройка вложенной виртуальной машины в качестве узла
Поддержка этой версии Virtual Machine Manager (VMM) прекращена. Рекомендуем перейти на VMM 2019.
Вложенная виртуализация — это функция Windows Server 2016 и более поздних версий, которая позволяет запускать Hyper-V внутри виртуальной машины Hyper-V. Другими словами, теперь вы можете виртуализировать сам узел Hyper-V. Вложенную виртуализацию можно включить по внештатному каналу, используя PowerShell и конфигурацию узла Hyper-V.
Эта функция позволит вам снизить расходы на инфраструктуру при разработке и тестировании решений, так как вам не придется использовать дополнительное оборудование.
System Center — Virtual Machine Manager (VMM) 1801 и более поздних версий позволяет включать и отключать вложенную функцию виртуализации с помощью консоли VMM. В VMM можно настроить вложенную виртуальную машину в качестве узла и выполнять на этой виртуальной машине функции узла. Например, динамическая оптимизация VMM будет рассматривать вложенный узел для размещения виртуальных машин.
Включите на виртуальной машине вложенную виртуализацию, а затем настройте ее в качестве узла.
Приложения виртуализации, отличные от Hyper-V, не поддерживаются в виртуальных машинах Hyper-V и скорее всего приведут к сбою. Сюда входит любое программное обеспечение, требующее расширений виртуализации оборудования.
Перед началом работы
Выполните указанные ниже предварительные требования.
Выполните указанные ниже предварительные требования.
Включение виртуализации сетей
Администраторы и полномочные администраторы могут настроить вложенную виртуализацию с помощью VMM. Затем выполните следующие действия:
Включение вложенной виртуализации для существующей виртуальной машины
Найдите виртуальную машину, которая соответствует описанным выше предварительным условиям.
Убедитесь, что виртуальная машина находится в остановленном состоянии.
Откройте свойства выбранной виртуальной машины.
В разделе Общие установите флажок Включить вложенную виртуализацию.
Настройка вложенной виртуальной машины в качестве узла
На вложенной виртуальной машине, которую вы хотите использовать в качестве узла, включите следующие правила брандмауэра для входящего и исходящего трафика.
Правила брандмауэра для входящих соединений
Правила брандмауэра для исходящих соединений
Убедитесь, что виртуальная машина находится в состоянии Выполнение. Запустите виртуальную машину, если она не работает.
Щелкните правой кнопкой мыши виртуальную машину и выберите Настроить как узел. Откроется мастер добавления ресурсов.
Выполните инструкции мастера, выберите все нужные параметры и завершите работу мастера.
Отключение вложенной виртуализации
Выберите узел или виртуальную машину, для которых включена вложенная виртуализация.
Убедитесь, что виртуальная машина находится в остановленном состоянии. Остановите виртуальную машину, если она выполняется.
Откройте свойства виртуальной машины.
В разделе Общие снимите флажок Включить вложенную виртуализацию.
Прежде чем отключить вложенную виртуализацию, ознакомьтесь с примечанием в нижней части страницы мастера.
Вложенная виртуализация в 2019 UR1
В VMM 2019 UR1, помимо включения вложенной виртуализации на существующей виртуальной машине, также можно включить вложенную виртуализацию при создании виртуальных машин с помощью шаблонов виртуальных машин, шаблонов служб или мастера создания виртуальных машин в консоли VMM.
Включение вложенной виртуализации с помощью шаблонов виртуальных машин
Вы можете включить вложенную виртуализацию на виртуальных машинах, созданных с помощью шаблона виртуальной машины.
Убедитесь, что виртуальные машины, которые будут созданы с помощью этих шаблонов, соответствуют приведенным выше предварительным требованиям.
Чтобы включить вложенную виртуализацию, в пункте Мастер создания шаблонов виртуальных машин выберите Выбор источника а затем выберите Enable Nested Virtualization (Включение вложенной виртуализации) на правой панели мастера.
Включение вложенной виртуализации с помощью мастера создания виртуальных машин
Вы можете включить вложенную виртуализацию на виртуальных машинах, созданных с помощью мастера создания виртуальных машин.
Убедитесь, что виртуальные машины, которые будут созданы с помощью этого мастера, соответствуют приведенным выше предварительным требованиям.
Чтобы включить вложенную виртуализацию, в мастере создания виртуальных машин выберите Выбор источника а затем выберите Enable Nested Virtualization (Включить вложенную виртуализацию) в правой области мастера.
Включение вложенной виртуализации с помощью шаблонов служб
Вы можете включить вложенную виртуализацию на виртуальных машинах, созданных с помощью шаблона службы.
Убедитесь, что виртуальные машины, которые будут созданы с помощью этого шаблона, соответствуют приведенным выше предварительным требованиям.
Чтобы включить вложенную виртуализацию, выберите Single Tier Properties (Свойства одного уровня), Общие а затем Enable Nested Virtualization (Включить вложенную виртуализацию) в правой области мастера.