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

Igor Abade

Igor Abade V. Leite ([email protected]) é Microsoft MVP (Most Valuable Professional) de Visual Studio ALM desde 2006. Palestrante em diversos eventos da comunidade de desenvolvimento de software (TechEd Brasil, The Developers’ Conference, DevOps Summit Brasil, Agile Brazil, Visual Studio Summit, QCON e outros), é também autor de artigos em revistas e sites como o MSDN Brasil. Desde março de 2011 é um dos sócios da Lambda3, uma consultoria especializada em ALM, desenvolvimento de software e treinamentos. Siga-o no Twitter @igorabade.