Совместное использование Hyper-V и VirtualBox

vb_and_hyper_v_logo

После установки Microsoft Hyper-V Oracle VM VirtualBox при запуске виртуальной машины выдаёт сообщение как на скриншоте ниже.

Ошибка возникает из-за особенностей работы гипервизора от Microsoft с nested virtualization (вложенной виртуализацией).

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

https://docs.microsoft.com/ru-ru/virtualization/hyper-v-on-windows/user-guide/nested-virtualization

Для совместной, но не одновременной, работы обоих гипервизоров необходимо отключать Hyper-V. Делается это через настройку загрузчика Microsoft Windows — bcdedit.

Запустите командную строку Windows или PowerShell с правами администратора. И выполните команду:

bcdedit /set hypervisorlaunchtype off

Изменения вступят в силу после перезагрузки Windows. Чтобы вернуть в исходное состояние работоспособность Hyper-V выполните команду:

bcdedit /set hypervisorlaunchtype Auto

Изменения по прежнему вступят в силу после перезагрузки Windows.

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

Чтобы включить выполнение скриптов достаточно единожды выполнить в терминале PowerShell команду

Set-ExecutionPolicy Unrestricted

Теперь можно выполнять свои скрипты на PowerShell! Чтобы вернуть настройки выполнения скриптов в исходное состояние выполните команду:

Set-ExecutionPolicy Restricted

Если по каким-то причинам вы не хотите прибегать к данному способу, то попробуйте выполнить приведённый скрипт ниже при помощи нескольких ухищрений. Сохраните скрипт к себе на компьютер. В той директории, в которую вы сохранили скрипт, запустите PowerShell.

TYPE .\ваше_название_скрипта.ps1 | PowerShell.exe -noprofile -
PowerShell.exe -ExecutionPolicy UnRestricted -File .\ваше_название_скрипта.ps1
PowerShell.exe -ExecutionPolicy Bypass -File .\ваше_название_скрипта.ps1

Более обширно о альтернативных вариантах выполнения скриптов в этой статье https://www.securitylab.ru/analytics/461333.php

Скрипт для автоматического включения/выключения Hyper-V.

# Запускайте скрипт с правами администратора!
# Thanks for the solution https://stackoverflow.com/a/31602095

if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`"" -Verb RunAs; exit }

$hypervisor_status = Invoke-Expression "bcdedit /enum" | Select-String "hypervisorlaunchtype"
$reboot_timeout = 300; #Время в секундах до перезагрузки компьютера
$status_message = "Выключаем Hyper-V. Компьютер будет перезагружен через $reboot_timeout секунд.";
$message_displayed = 15; # How long the message will be displayed
$commentary_to_system_journal = @("Включаем Hyper-V","Выключаем Hyper-V");
$reboot_reason = "P:2:4";

If( $hypervisor_status -match "auto" )
{
    Write-Host $status_message;
    Start-Sleep -Seconds $message_displayed;
    bcdedit /set hypervisorlaunchtype off;
    shutdown -r -t $reboot_timeout /c $commentary_to_system_journal[1] /d $reboot_reason;
} Else {
    Write-Host $status_message;
    Start-Sleep -Seconds $message_displayed;
    bcdedit /set hypervisorlaunchtype Auto;
    shutdown -r -t $reboot_timeout /c $commentary_to_system_journal[0] /d $reboot_reason;
}

Метки: , , , , , ,

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

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google photo

Для комментария используется ваша учётная запись Google. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.