WSL2 Parou de Funcionar? Diagnóstico e Correção do Erro HCS_E_HYPERV_NOT_INSTALLED#
Um guia para resolver causa-raiz, não sintoma.
Quando o WSL2 falha com esse erro, o problema não está na distro Linux. O erro está na camada de virtualização do host Windows.
Não há suporte para WSL2 com a configuração atual do computador.
Código de erro: Wsl/Service/CreateInstance/CreateVm/HCS/HCS_E_HYPERV_NOT_INSTALLED
Esse retorno é direto: o Host Compute Service (HCS) tentou provisionar a VM leve do WSL2 e não encontrou hypervisor ativo no kernel.
⚠️ IMPORTANTE: Quase todas as etapas e comandos a seguir requerem elevação de privilégios. Certifique-se de executar o PowerShell como Administrador (clique com o botão direito no ícone do PowerShell e selecione "Executar como administrador").
1) Pré-requisitos mínimos do Windows#
Antes de tentar qualquer correção técnica, certifique-se de que seu sistema operacional atende aos requisitos mínimos exigidos pelo WSL2:
- Windows 10: Versão 1903 ou superior, com a Build 18362 ou superior.
- Windows 11: Compatível em todas as versões.
- Edição do SO: Home, Pro, Enterprise ou Education.
- Nota: Versões do Windows em S Mode não suportam a execução do WSL.
Para verificar rapidamente a versão e a build do seu Windows pelo PowerShell, execute:
[System.Environment]::OSVersion.Version
2) Diagnóstico rápido (sanity check)#
2.1 verificar virtualização no processador (BIOS/UEFI)#
Antes do Windows, o hardware precisa cooperar.
- Abra o Gerenciador de Tarefas (
Ctrl + Shift + Esc). - Vá na aba Desempenho e clique em CPU.
- No canto inferior direito, confirme se Virtualização: Habilitado (ou Virtualization: Enabled) está ativo.
Se estiver "Desabilitado", reinicie a máquina, acesse a BIOS/UEFI e ative a tecnologia de virtualização (Intel VT-x/Vanderpool ou AMD-V/SVM).
2.2 confirmar status do hypervisor no BCD (boot configuration data)#
O Windows precisa saber que deve iniciar o hypervisor do Hyper-V durante o boot. Para checar:
bcdedit | findstr hypervisorlaunchtype
Se o comando não retornar nada ou mostrar hypervisorlaunchtype Off, o hypervisor está desativado no kernel.
2.3 validar features obrigatórias do Windows#
Execute os seguintes comandos para verificar se as features essenciais estão ativas:
dism.exe /online /get-featureinfo /featurename:VirtualMachinePlatform
dism.exe /online /get-featureinfo /featurename:Microsoft-Windows-Subsystem-Linux
O estado esperado para ambas é State : Enabled.
3) Comandos de correção e ativação#
Se o diagnóstico rápido identificou falhas, aplique as correções abaixo:
3.1 habilitar as features do Windows#
Você pode ativar os recursos obrigatórios usando o DISM:
# Habilitar o subsistema de forma persistente
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
# Habilitar a plataforma de máquina virtual
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
Ou usando cmdlets modernos nativos do PowerShell:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux -NoRestart
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform -NoRestart
⚠️ REINÍCIO OBRIGATÓRIO: Após habilitar as features, reinicie o computador para carregar as alterações no kernel: ``powershell Restart-Computer ``
3.2 forçar a inicialização do hypervisor no boot#
Se a virtualização está ativa na BIOS, mas o BCD não carrega o hypervisor:
bcdedit /set hypervisorlaunchtype auto
Após executar este comando, reinicie o computador para que o kernel do Hyper-V seja devidamente carregado.
3.3 configurar e iniciar serviços essenciais do host#
Se as features e o boot estão corretos, o problema pode estar nos serviços associados que não iniciaram:
# Verificar status dos serviços
Get-Service vmcompute,vmms,lxssmanager | Select-Object Name, Status, StartType
Se algum serviço estiver com status Stopped, inicie-o e configure-o para iniciar automaticamente:
# Iniciar os serviços de computação de VM, gerenciamento virtual e WSL
Start-Service vmcompute
Start-Service vmms
Start-Service lxssmanager
# Configurar inicialização automática
Set-Service vmcompute -StartupType Automatic
Set-Service vmms -StartupType Automatic
Set-Service lxssmanager -StartupType Automatic
4) Troubleshooting avançado#
Se o WSL2 ainda se recusar a subir após as correções básicas, investigue as seguintes possibilidades:
4.1 comandos de gerenciamento e reset do WSL#
Em alguns casos, a pilha do WSL precisa ser reiniciada ou atualizada manualmente:
# Desligar forçadamente todas as instâncias em execução
wsl --shutdown
# Atualizar o kernel do WSL2 para a versão mais recente
wsl --update
# Checar a versão instalada do WSL
wsl --version
# Listar distros instaladas e a versão de arquitetura ativa (deve ser 2)
wsl --list --verbose
4.2 virtualização aninhada (nested virtualization)#
Se você está rodando o Windows dentro de uma Máquina Virtual (ex: em um lab no VMware, VirtualBox, Azure ou Hyper-V do Windows Server) e tentando usar o WSL2 lá dentro, você precisa habilitar a virtualização aninhada.
Primeiro, valide se o seu Windows reconhece que está rodando dentro de um Hypervisor virtual:
Get-CimInstance -ClassName Win32_ComputerSystem | Select-Object Model, Manufacturer
Se você estiver rodando em uma VM Hyper-V, execute este comando no host físico (com a VM desligada):
Set-VMProcessor -VMName "NomeDaSuaVM" -ExposeVirtualizationExtensions $true
4.3 conflitos com hypervisors de terceiros (VirtualBox / VMware)#
A execução conjunta do Hyper-V com outros gerenciadores de máquinas virtuais pode gerar conflitos de barramento:
- VirtualBox: Versões anteriores à 6.1 possuem sérios problemas de compatibilidade com o Hyper-V ativado. Atualize para a versão mais recente do VirtualBox.
- VMware Workstation: Requer versão 15.5.6 ou posterior para coexistir pacificamente com a plataforma de hipervisor do Windows.
- Docker Desktop: Garanta que o Docker esteja configurado para usar a arquitetura baseada em WSL2 (nas configurações do Docker Desktop).
Para verificar via PowerShell se o VirtualBox está instalado:
Get-CimInstance -ClassName Win32_Product | Where-Object {$_.Name -like "*VirtualBox*"}
4.4 filtrar logs de eventos do Windows (event viewer)#
Se o erro persistir, a causa exata estará registrada nos logs de diagnóstico do sistema. Em vez de navegar manualmente no eventvwr.msc, você pode buscar erros específicos pelo PowerShell:
# Logs operacionais do subsistema Linux (WSL)
Get-WinEvent -LogName "Microsoft-Windows-Lxss-Operational" -MaxEvents 20 | Format-Table -Wrap
# Logs operacionais do serviço Host Compute Service (Hyper-V)
Get-WinEvent -LogName "Microsoft-Windows-Hyper-V-Compute-Operational" -MaxEvents 20 | Format-Table -Wrap
# Mensagens do sistema geral com a palavra 'Hyper'
Get-WinEvent -LogName System -MaxEvents 50 | Where-Object {$_.ProviderName -like "*Hyper*"} | Format-Table TimeCreated, Id, Message -Wrap
5) Scripts automatizados de diagnóstico e correção#
Para agilizar o processo em várias estações de trabalho, utilize os scripts abaixo. Eles consolidam todas as validações discutidas neste guia.
5.1 script de diagnóstico completo (wsl2-diagnostic.ps1)#
Crie o arquivo abaixo e execute no PowerShell administrativo para mapear o status de todas as camadas:
# wsl2-diagnostic.ps1 - Diagnóstico completo do WSL2
# Execute como Administrador
Write-Host "=== Diagnóstico WSL2 ===" -ForegroundColor Cyan
Write-Host ""
# 1. Verificar versão do Windows
Write-Host "[1] Verificando versão do Windows..." -ForegroundColor Yellow
$osVersion = [System.Environment]::OSVersion.Version
$build = $osVersion.Build
Write-Host " Build: $build"
if ($build -lt 18362) {
Write-Host " ❌ Build muito antigo. WSL2 requer Build 18362+" -ForegroundColor Red
} else {
Write-Host " ✅ Build compatível" -ForegroundColor Green
}
# 2. Verificar virtualização na BIOS
Write-Host ""
Write-Host "[2] Verificando virtualização..." -ForegroundColor Yellow
$hypervisor = (Get-CimInstance -ClassName Win32_ComputerSystem).HypervisorPresent
if ($hypervisor) {
Write-Host " ✅ Hypervisor ativo no hardware" -ForegroundColor Green
} else {
Write-Host " ❌ Hypervisor inativo - verifique BIOS/UEFI" -ForegroundColor Red
}
# 3. Verificar BCD
Write-Host ""
Write-Host "[3] Verificando BCD..." -ForegroundColor Yellow
$bcd = bcdedit | Select-String "hypervisorlaunchtype"
if ($bcd -match "Auto") {
Write-Host " ✅ Hypervisor configurado para Auto no BCD" -ForegroundColor Green
} else {
Write-Host " ❌ Hypervisor não configurado para Auto no BCD" -ForegroundColor Red
Write-Host " Correção recomendada: bcdedit /set hypervisorlaunchtype auto" -ForegroundColor Yellow
}
# 4. Verificar features
Write-Host ""
Write-Host "[4] Verificando features do Windows..." -ForegroundColor Yellow
$features = @("Microsoft-Windows-Subsystem-Linux", "VirtualMachinePlatform")
foreach ($feature in $features) {
$status = Get-WindowsOptionalFeature -Online -FeatureName $feature -ErrorAction SilentlyContinue
if ($status.State -eq "Enabled") {
Write-Host " ✅ $feature: Enabled" -ForegroundColor Green
} else {
Write-Host " ❌ $feature: Disabled" -ForegroundColor Red
Write-Host " Correção recomendada: dism.exe /online /enable-feature /featurename:$feature /all /norestart" -ForegroundColor Yellow
}
}
# 5. Verificar serviços
Write-Host ""
Write-Host "[5] Verificando serviços do host..." -ForegroundColor Yellow
$services = @("vmcompute", "vmms", "lxssmanager")
foreach ($svc in $services) {
$service = Get-Service -Name $svc -ErrorAction SilentlyContinue
if ($service) {
$color = if ($service.Status -eq "Running") { "Green" } else { "Red" }
Write-Host " $($service.Status): $svc (Inicialização: $($service.StartType))" -ForegroundColor $color
} else {
Write-Host " ❌ $svc: Não encontrado no sistema" -ForegroundColor Red
}
}
# 6. Verificar WSL
Write-Host ""
Write-Host "[6] Verificando integridade do WSL..." -ForegroundColor Yellow
$wsl = wsl --list --verbose 2>&1
if ($LASTEXITCODE -eq 0) {
Write-Host " ✅ WSL funcional" -ForegroundColor Green
Write-Host " $wsl"
} else {
Write-Host " ❌ WSL com erro de execução" -ForegroundColor Red
}
Write-Host ""
Write-Host "=== Fim do diagnóstico ===" -ForegroundColor Cyan
5.2 script de correção automática (wsl2-fix.ps1)#
Este script força a ativação de todos os recursos essenciais detectados como inativos ou desconfigurados:
# wsl2-fix.ps1 - Correção automática do WSL2
# Execute como Administrador
Write-Host "=== Aplicando Correções do WSL2 ===" -ForegroundColor Cyan
# 1. Habilitar features
Write-Host ""
Write-Host "[1] Habilitando optional features (DISM)..." -ForegroundColor Yellow
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
# 2. Habilitar hypervisor no boot
Write-Host ""
Write-Host "[2] Habilitando hypervisor no BCD..." -ForegroundColor Yellow
bcdedit /set hypervisorlaunchtype auto
# 3. Iniciar e habilitar serviços
Write-Host ""
Write-Host "[3] Configurando e iniciando serviços..." -ForegroundColor Yellow
$services = @("vmcompute", "vmms", "lxssmanager")
foreach ($svc in $services) {
Set-Service -Name $svc -StartupType Automatic -ErrorAction SilentlyContinue
Start-Service -Name $svc -ErrorAction SilentlyContinue
}
# 4. Atualizar WSL
Write-Host ""
Write-Host "[4] Baixando atualização do kernel do WSL..." -ForegroundColor Yellow
wsl --update
Write-Host ""
Write-Host "✅ Todas as correções locais foram aplicadas!" -ForegroundColor Green
Write-Host "⚠️ IMPORTANTE: REINICIE O COMPUTADOR para carregar os recursos do Hyper-V." -ForegroundColor Yellow
6) Plano de contingência: converter para WSL1#
Se você está em um ambiente corporativo com restrições extremas de segurança (compliance GPO) onde o Hyper-V é terminantemente bloqueado e nenhuma exceção administrativa é concedida, você pode rebaixar sua distro Linux para o WSL1 como contingência temporária.
O WSL1 não depende de virtualização de hardware ou hypervisor (ele faz a tradução das chamadas de sistema Linux diretamente para o kernel NT do Windows).
# Converter a distro instalada para a versão 1
wsl --set-version <NomeDaDistro> 1
Trade-offs técnicos do WSL1:
- I/O substancialmente mais lento ao interagir com sistemas de arquivos do host Windows.
- Incompatibilidade parcial com workloads modernos (como Docker nativo ou softwares que exigem chamadas de sistema Linux puras não mapeadas).
Considerações práticas#
O erro HCS_E_HYPERV_NOT_INSTALLED não é um defeito na distribuição Linux escolhida. Trata-se de uma interrupção de orquestração na camada de infraestrutura de virtualização do Windows.
Investigar a cadeia de dependências de forma lógica (BIOS -> BCD -> Features -> Serviços) reduz significativamente o MTTR (Mean Time To Recovery) e elimina a má prática de reinstalar sistemas operacionais em busca de uma "solução mágica".
Infraestrutura previsível e resiliente começa com diagnósticos claros e correções aplicadas cirurgicamente nas camadas adequadas.
Este artigo foi útil?
Deixe uma reação rápida para apoiar o conteúdo:
Este post está licenciado sob CC BY-NC.



Comentários
Participe da discussão abaixo.
0 comentários