Faça VirtualBox e Hyper-V coexistirem no Windows 8

(Mais um post na minha (quase) extensa série sobre VirtualBox)

Como já comentei anteriormente, sou usuário (e fã ardoroso) do VirtualBox. Isso não quer dizer, entretanto, que tenha algo contra o Hyper-V. Pelo contrário! Somos usuários de carteirinha do Hyper-V aqui na Lambda3; nossos ambientes de produção, testes e até mesmo nosso laboratório de treinamento são todos baseados em Hyper-V.

Mas para meu dia-a-dia acho o Hyper-V desnecessariamente pesado. Para o uso que faço em meu computador pessoal (rodar VMs de desenvolvimento e de demonstração) o VirtualBox é mais leve e mais rápido – em especial na parte gráfica. E olha que nem vou mencionar o fato de que o VirtualBox suporta USB e o Hyper-V não Alegre. Com isso, ainda que o Windows 8 suporte Hyper-V nativamente prefiro continuar usando o VirtualBox.

Só que tudo mudou no dia que decidi instalar o Windows Phone 8 SDK. O recém-lançado SDK trouxe uma novidade indesejada: ele requer o Hyper-V.

Você poderia dizer “isso não é um problema; use o VirtualBox no seu dia-a-dia e instale o Hyper-V apenas para o WP8 SDK. É só não usar o Hyper-V.

Mas você não achou que seria tão simples assim, achou? Alegre Dê uma olhada no gráfico abaixo:

Arquitetura do Hyper-V

Repare que, logo acima do hardware, temos uma camada chamada hypervisor. Essa camada é o coração do Hyper-V, responsável pela virtualização do hardware. Acima dela temos as partições: ambientes virtualizados e isolados, onde rodam os sistemas operacionais propriamente ditos. As partições são, de maneira simplificada, aquilo que convencionamos chamar de máquinas virtuais.

Só tem um pequeno detalhe: notou que a primeira partição tem um nome diferente? É a parent partition. Essa é a partição onde está instalado o sistema operacional que gerencia o ambiente do Hyper-V. É o SO que você dá boot quando liga um computador com Hyper-V. Ou seja, mesmo quando você não está rodando uma VM – mesmo quando você está apenas usando o Windows – se o Hyper-V estiver ativado é como se seu Windows também fosse uma VM!

“E daí?”, você pode perguntar. Bom, é simples: não é possível rodar máquinas virtuais dentro de ambientes virtualizados. Os sistemas de virtualização (como VirtualBox, Hyper-V, VMware e outros) dependem de recursos específicos do hardware para suportarem o modelo de isolamento necessário para a virtualização. Quando você ativa o Hyper-V ele “toma conta” desses recursos. Ao tentar rodar o VirtualBox num Windows com Hyper-V (ou seja, na parent partition do Hyper-V) o VirtualBox não conseguirá acessar esses recursos de hardware – afinal, ele está num ambiente virtualizado!

Chegamos, finalmente, ao nosso problema: se ativarmos o Hyper-V o VirtualBox parará de funcionar pois não terá mais acesso direto ao hardware, já que agora estará rodando num ambiente virtualizado.

Como resolver então?

Configurando o Windows para rodar com (e sem) Hyper-V

O “truque”, aqui, é criar duas opções de boot no Windows – uma com Hyper-V, outra sem. Dessa forma posso deixar o Hyper-V instalado (mas desligado) a maior parte do tempo, ficando livre para usar o VirtualBox. Quando quiser desenvolver aplicativos para Windows Phone 8 (ou usar qualquer outra coisa que dependa de Hyper-V) basta dar um boot para religar o Hyper-V.

Passo-a-passo:

Vamos partir de um sistema que tenha o Hyper-V já instalado. Se você ainda não instalou o Hyper-V, faça-o agora. Importante: Depois da instalação do Hyper-V seu VirtualBox parará de funcionar. Isso é esperado. Vamos consertar isso depois.

Agora abra um prompt elevado e digite:

bcdedit /copy {current} /d "Windows 8 (com Hyper-V)"

Criando uma nova opção de boot com bcdedit

Com isso, criamos uma nova opção de boot idêntica à configuração atual. Assim podemos manter o Hyper-V ligado nessa nova opção enquanto desligamos o Hyper-V na opção padrão de boot.

Agora, para desligar o Hyper-V na opção padrão de boot do Windows, digite:

bcdedit /set {current} hypervisorlaunchtype off

Desligando o hypervisor na opção padrão de boot do Windows

Por fim, precisamos que o Windows espere um tempinho a cada boot para dar tempo de selecionar qual a opção queremos. Para um tempo de espera de 3 segundos a cada boot (para que você tenha tempo de selecionar uma opção), digite:

bcdedit /timeout 3

Configurando o timeout do menu de boot do Windows

O resultado disso é que agora, sempre que você quiser usar o VirtualBox, basta dar um boot e selecionar a opção “Windows 8” (que será selecionada por padrão, automaticamente, depois de três segundos). Se, por outro lado, quiser usar o Hyper-V, basta dar um boot e selecionar a opção “Windows 8 (com Hyper-V)”.

Tela de boot do Windows 8, mostrando as duas opções de boot depois de prontas

 

Um abraço,
Igor