Hyper v включить kvm

Обновлено: 05.07.2024

Добрый день! Цель сегодняшней статьи — рассказать о реализации вложенной виртуализации на платформе 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 и связано с физическим процессором.

Перейдем ко вложенной виртуализации.


Из рисунка видно, что необходимо пробрасывать флаг, связанный с виртуализацией, в гостевую ОС. То есть, в общем случае, мы должны сообщить гипервизору на первом уровне, что необходимо включить поддержку виртуализации в разделяемом процессоре для виртуальной машины. Для этого необходимо запустить скрипт, который изменяет некоторые свойства виртуальной машины. Одно из основных свойств, которое изменяет скрипт, это поведение процессора виртуальной машины. // Set-VMProcessor -VMName $vmName -ExposeVirtualizationExtensions $true //. Про остальные параметры поговорим чуть позже. Проиллюстрируем поведение параметров процессора, связанных с виртуализацией, на виртуальной машине. В таблице выведены первые несколько строк работы утилиты CoreInfo.


Из таблицы видно, что виртуальная машина «понимает», что работает из-под гипервизора. Но до запуска скрипта флаг, связанный с виртуализацией, не передаётся. Далее отработал скрипт, который изменил свойства нашей виртуальной машины и ее процессора и флаг, связанный с виртуализацией, появился. Далее мы включили роль Hyper-V, после этого возник тонкий слой виртуализации и наша операционная система переместилась в свой корневой раздел, флаг виртуализации исчез. Также обратим внимание на значение Microprocessor signature, которое в нашем случае стало FFFFFFFF, что указывает на виртуализацию процессора. Далее мы создали виртуальную машину внутри виртуальной машины и для чистоты эксперимента запустили утилиту CoreInfo.


В общем-то, ожидаемый результат — присутствие гипервизора и отсутствие флага виртуализации на первом этапе и присутствие флага виртуализации на втором. В итоге имеем вот такое решение.


Спасибо за внимание,
Михаил Комаров
MVP — Cloud and Datacenter Management

Вложенная виртуализация — это компонент, который позволяет запускать Hyper-V в виртуальной машине (ВМ) Hyper-V. Это полезно для запуска эмулятора телефона Visual Studio на виртуальной машине и для тестирования конфигураций, для которых обычно требуется несколько узлов.


Предварительные условия

  • Узел Hyper-V и виртуальная машина должны быть размещены в Windows Server 2016, Windows 10 Anniversary Update или более поздней версии.
  • Версия конфигурации ВМ 8.0 или более поздняя.
  • Процессор Intel с технологией Intel VT-x и EPT (вложение сейчас поддерживается только для процессоров Intel).
  • Существуют некоторые различия между виртуальными сетями для виртуальных машин второго уровня. См. раздел «Сети на вложенных виртуальных машинах».

Настройка вложенной виртуализации

  1. Создание виртуальной машины. Необходимые версии ОС и виртуальных машин см. в предварительных требованиях выше.
  2. Пока виртуальная машина находится в отключенном состоянии, запустите следующую команду на физическом узле Hyper-V. В виртуальной машине будет включена вложенная виртуализация.
  1. запустите ее.
  2. Установите Hyper-V в виртуальной машине так же, как на физическом сервере. Дополнительные сведения об установке Hyper-V см. в разделе Установка Hyper-V.

Отключение вложенной виртуализации

Вы можете отключить вложенную виртуализацию в остановленной виртуальной машине следующей командой PowerShell:

Изменение размера динамической памяти и памяти для среды выполнения

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

Обратите внимание, что само включение вложенной виртуализации не повлияет на изменение размера динамической памяти или памяти для среды выполнения. Несовместимость происходит, только если Hyper-V выполняется в виртуальной машине.

Параметры сетей

Существуют два параметра для сетей со вложенными виртуальными машинами:

Спуфинг MAC-адресов

Чтобы сетевые пакеты перенаправлялись через два виртуальных коммутатора, необходимо включить спуфинг MAC-адресов на первом уровне (L1) виртуального коммутатора. Это можно сделать с помощью следующей команды PowerShell.

Преобразование сетевых адресов (NAT)

Второй параметр связан с преобразованием сетевых адресов (NAT). Этот подход рекомендуется для случаев, когда спуфинг MAC-адресов невозможен, например в общедоступной облачной среде.

Сначала необходимо создать виртуальный коммутатор NAT в виртуальной машине узла ("средняя" виртуальная машина). Обратите внимание, что IP-адреса приведены только в качестве примера и будут разниться в зависимости от сред:

Далее назначьте IP-адрес для сетевого адаптера:

Каждая вложенная виртуальная машина должна иметь назначенный IP-адрес и шлюз. Обратите внимание, что IP-адрес шлюза должен указывать на адаптер NAT из предыдущего действия. Можно также назначить DNS-сервер:

Принцип работы вложенной виртуализации

Современные процессоры поддерживают аппаратные функции, которые делают виртуализацию быстрее и надежнее. Hyper-V использует эти расширения процессора (например, Intel VT-x и AMD-V) для выполнения виртуальных машин. Как правило, после запуска Hyper-V другое программное обеспечение блокируется с помощью этих возможностей процессора. Это предотвращает запуск Hyper-V на гостевых виртуальных машинах.

Вложенная виртуализация предоставляет поддержку этих аппаратных функций гостевым виртуальным машинам.

На схеме ниже показана роль Hyper-V без вложения. Низкоуровневая оболочка Hyper-V полностью контролирует возможности аппаратной виртуализации (оранжевая стрелка) и скрывает их от операционной системы.


На следующей схеме показана роль Hyper-V с включенной вложенной виртуализацией. В этом случае Hyper-V предоставляет расширения аппаратной виртуализации виртуальным машинам. Если вложение включено, гостевая виртуальная машина может установить собственную низкоуровневую оболочку и запускать свои гостевые виртуальные машины.


Сторонние приложения виртуализации

Приложения виртуализации, отличные от Hyper-V, не поддерживаются в виртуальных машинах Hyper-V и скорее всего приведут к сбою. Сюда входит любое программное обеспечение, требующее расширений виртуализации оборудования.

hyper-v

Ни для кого не секрет, что в Windows Server 2016 появилась вложенная виртуализация Hyper-V. Несмотря на то, что на момент написания статьи доступна лишь версия Technical Preview 5, уже в ней можно очень близко познакомиться с новым функционалом, о котором я и постараюсь коротко рассказать в этой статье.

Хочу отметить, что все сказанное относится к предрелизной версии и может сильно отличаться от официального релиза.

Если вам интересна тематика Windows Server, рекомендую обратиться к тегу Windows Server на моем блоге.

Вложенная виртуализация Hyper-V

Архитектура

nesteddiagram

Раньше попытка развернуть роль Hyper-V внутри виртуальной машины непременно заканчивалась ошибкой:

vlozhennaya-virtualizatsiya-hyper-v-01

Теперь же архитектура изменилась таким образом, что появилась возможность передачи наборов аппаратных инструкций в гостевые ОС (по умолчанию этот функционал отключен):

nesteddiagram2

Все это открывает возможности для вложенной виртуализации, которая при этом не ограничена вторым уровнем (Level 2 на рис. вверху).

Примечание: в лабораторных условиях я совершенно спокойной развернул виртуальную машину с четвертой степенью вложенности.

Но как и у любой свежей технологии (в данном случае свежей именно для Microsoft), у неё есть некоторые ограничения, о которых ниже.

Ограничения

Условно можно разделить на аппаратные и программные.

Аппаратные

Аппаратные ограничения упираются в обязательную поддержку процессором Intel технологий VT-x 3 и EPT. Если наличие VT-x было стандартным требованиям и для ранних версий Hyper-V, то необходимость в EPT появилась только сейчас и только для вложенной виртуализации 4 :

vlozhennaya-virtualizatsiya-hyper-v-13

Примечание: Intel EPT предоставляет виртуальным машинам прямой доступ к памяти, минуя гипервизор 5 и по сути представляет из себя технологию виртуализации страниц памяти. Технология эта не нова и её можно встретить даже в давно устаревших Core 2 Quad.

И я ничего не забыл, не написав про процессоры AMD. Дело в том, что в Windows Server 2016 TP5 вложенная виртуализация на процессорах AMD пока что не поддерживается.

Программные

Программных ограничений значительно больше:

  1. Использование Windows Server 2016 или Windows 10 как в родительском, так и в гостевых разделах;
  2. Виртуальная машина с версией конфигурации 8.0 и выше;

Для вложенных виртуальных машин не поддерживается:

  1. Динамическая память;
  2. Динамическая миграция;
  3. Снимки виртуальных машин и состояния Save/Restore;

Применение

У тех, кто встретился с вложенной виртуализацией впервые, может возникнуть вопрос об области её применения. Остановимся на этом более подробно.

Наиболее адекватными сценариями представляются тестирование и разработка. В продакшене вы конечно можете использовать полностью вложенную виртуальную инфраструктуру, но непременно столкнетесь с падением производительности вложенных экземпляров.

Мне стало интересно проверить на реальной среде падение производительности ЦП внутри виртуальных машин разной степени вложенности. Для этого я использовал Hot CPU Tester Pro. Хоть и тестирование получилось исключительно субъективное, но оно как минимум намекает на существенное падение отдачи CPU:

vlozhennaya-virtualizatsiya-hyper-v-02

Примечание: для измерения индекса производительности ЦП я просто запускал тест по очереди сначала на хосте (при этом все VM были заглушены), потом включал виртуальную машину и измерял индекс внутри неё, выделив максимально возможное количество vCPU. Следующим шагом был запуск VM внутри этой VM и измерение индекса производительности уже внутри виртуальной машины второй вложенности и т.д.

Моего терпения хватило только для развертывания экземпляра третьей вложенности.

Настройка

Для возможности использовать вложенную виртуализацию, необходимо выполнить ряд настроек на хостовой ОС. Приступаем.

Обновление версии VM

Если по каким-либо причинам ваша виртуальная машина имеет версию конфигурации ниже 7.1 (например она смигрировала на ваш Hyper-V с предыдущих версий Technical Preview), то обязательно обновляем конфигурацию вручную, нажав правой кнопкой по VM и выбрав Обновить версию конфигурации:

date

11.11.2021

directory

Hyper-V, PowerShell, Виртуализация

comments

Один комментарий

Статья посвящена особенностям управления виртуальными машинами Hyper-V из консоли PowerShell. Мы рассмотрим создание виртуальных коммутаторов и виртуальных машин, изменение настроек ВМ и управление ими. Вы сможете использовать рассмотренные команды для ручного управления своими ВМ или в PowerShell скриптах для автоматизации различных задачей.

Установка роли Hyper-V в Windows Server и Windows 10

Для установки роли Hyper-V хост должен иметь процессор, поддерживающий виртуализацию со SLAT. В Windows Server для установки роли Hyper-V используется команда:

Install-WindowsFeature -Name Hyper-V -IncludeManagementTools -Restart

В десктопных редакциях (Windows 10 и 11) роль Hyper-V устанавливается так:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V –All

Для управления хостом Hyper-V на компьютере должен быть установлен модуль Hyper-V. Полный список команд в модуле (зависит от версии Windows) можно вывести так:

Get-Command -Module hyper-v

powershell модулья для управления hyper-v

В Windows Server 2022 в модуле Hyper-V доступно 245 командлетов.

Вывести полный список настроек хоста Hyper-V можно с помощью команды:

Чтобы вывести только информацию о количестве доступных ядер и RAM:

Get-VMHost| select LogicalProcessorCount, MemoryCapacity

Get-VMHost вывести настройки сервера Hyper-V

Чтобы изменить настройки хоста Hyper-V используется командлет Set-VMHost. Следующая команда изменит пути по-умолчанию для хранения виртуальных дисков и конфигурационных файлов ВМ:

Set-VMHost -VirtualMachinePath D:\VM -VirtualHardDiskPath 'D:\VM\VHD'

Создаем виртуальный коммутатор Hyper-V с помощью PowerShell

Прежде всего на сервере Hyper-V нужно создать виртуальный коммутатор. Виртуальные машины смогут получать доступ к сети только через виртуальный коммутатор.

Выведем список доступных физических адаптеров на хосте Hyper-V:

Если ваш сервер поддерживает SR-IOV (Single-Root Input/Output (I/O) Virtualization), обратите внимание, что нужно включать эту опцию во время создания коммутатора. Включить SR-IOV для существующего vSwitch нельзя. Более подробно это описано в статье Включаем поддержку SR-IOV для виртуальных машин Hyper-V.

Создайте виртуальный внешний коммутатор:

New-VMSwitch -Name "ExtVMSwitch" -AllowManagementOS $True -NetAdapterName Ethernet0 -SwitchType External

создать виртуальный коммутотор New-VMSwitch

Создание и изменение настроек виртуальной машины Hyper-V с помощью PowerShell

Для создания новой виртуальной машины используется командлет New-VM. В этом примере мы создадим новую ВМ второго поколения с 1 ГБ RAM и vhdx диском размером 5 Гб.

$VMName = "spb-dmz2"
$VM = @Name = $VMName
MemoryStartupBytes = 1Gb
Generation = 2
NewVHDPath = "C:\HV\$VMName\$VMName.vhdx"
NewVHDSizeBytes = 5Gb
BootDevice = "VHD"
Path = "C:\HV\$VMName"
SwitchName = "ExtVMSwitch"
>
New-VM @VM

New-VM создать виртуальную машину на hyper-v с помощью powershell

Рассмотрим команды, которые можно использовать для изменения настроек виртуальных машин.

Увеличить размер RAM для ВМ:

Get-VM -Name spb-dmz1| Set-VMMemory -StartupBytes 2Gb

Set-VMProcessor spb-dmz1 -Count 2

Get-VM –VMname spb-dmz1 | Set-VM –AutomaticStartAction Start

Чтобы подключить дополнительный виртуальный диск в ВМ, нужно сначала создать его:

New-VHD -Path 'C:\VM\test1.vhdx' -SizeBytes 2GB

А затем подключить к ВМ:

Add-VMHardDiskDrive -VMName spb-dmz1 -Path 'C:\VM\test1.vhdx'

Используем PowerShell для управления виртуальными машинами Hyper-V

Вывести список виртуальных машин на хосте Hyper-V:

Get-VM вывести список ВМ на хосте Hyper-V

Команда вернула список ВМ с несколькими базовыми характеристиками. Чтобы вывести все свойства ВМ, выполните:

Get-VM -Name spb-dmz1 | fl *

Вывести только включенные ВМ:

Запустить виртуальную машину:

Start-VM -Name spb-app01

Запустить все выключенные виртуальные машины:

Выключить ВМ (корректное выключение через гостевую ОС):

Stop-VM -Name spb-app01

Чтобы выключить ВМ по питанию используется ключ TurnOff:

Stop-VM -Name spb-app01 –TurnOff

Подключить ISO файл в виртуальное CD/DVD устройство:

Set-VMDvdDrive -VMName spb-app01 -Path c:\iso\WinSrv2022.iso

Прямой проброс USB диска с хоста Hyper-V в виртуальную машину описан в статье

Чтобы перенести все файлы ВМ на лету на другой диск, используйте команду:

Move-VMStorage spb-app01 -DestinationStoragePath D:\VM\spb-app01

Resize-VHD -Path 'C:\VM\fs01.vhdx' -SizeBytes 50Gb

Создать чекпоинт (снапшот) указанной ВМ:

Get-VM -Name spb-app01| Checkpoint-VM -SnapshotName "before install patch"

Вывести список доступных чекпоинтов:

управление снапшотами виртуальных машин hyper-v Checkpoint-VM

Вернуть состояние ВМ из предыдущему чекпоинту:

Restore-VMCheckpoint -Name "before install patch" -VMName spb-app01 -Confirm:$false

Remove-VMCheckpoint -VMName spb-app01 -Name "before install patch"

Экспорт, импорт и клонирование ВМ описаны подробно в статье по ссылке:

Export-VM -Name spb-app01 -Path 'C:\VHD\export' -CaptureLiveState CaptureCrashConsistentState

Для резервного копирования виртуальных машин Hyper-V можно использовать встроенный Windows Server Backup.

Получить IP адреса гостевых ОС виртуальных машин:

Get-VM | Select -ExpandProperty NetworkAdapters | Select VMName, IPAddresses, Status

Подключиться к консоли определенной виртуальной машины:

vmconnect.exe localhost spb-app01

vmconnect.exe утилита для подключения к консоли виртуальных машин hyper-v

Для подключения PowerShell сессией напрямую к гостевым ОС виртуальных машин через шину vmbus можно использовать PowerShell Direct (доступен для гостевых ОС Windows Server 2016, Windows 10 и новее). Можно использовать командлеты Invoke-Command (для запуска скриптов) и Enter-PSSession (для входа в интерактивную PowerShell сессию):

Invoke-Command -VMName spb-app01 -ScriptBlock
Enter-PSSession -VMName spb-app01

Для копирования файлов с хоста Hyper-V в виртуальную машину через PowerShell Direct используйте:

$PSSession1 = New-PSSession --VMName spb-app01 -Credential (Get-Credential)
Copy-Item -ToSession $PSSession1 -Path C:\iso\win10.iso -Destination D:\ISO\

Вы можете использовать PowerShell для локального или удаленного управления виртуальными машинами на хостах Hyper-V (как на Windows Server в режимах Full GUI или Core, так и на Free Windows Hyper-V Server, или Windows 10) как отдельно, так и в дополнении к графическим средствам управления Hyper-V Manager и Windows Admin Center.

Читайте также: