2026-09-049 min de leitura

Por que WSL2 e Docker enchem o disco: como reduzir o ext4.vhdx

O disco virtual cresce e nunca encolhe sozinho

Resposta curta: o WSL2 guarda todo o seu sistema de arquivos Linux em um disco virtual chamado `ext4.vhdx`. Esse arquivo cresce conforme a necessidade, mas NÃO diminui quando você apaga arquivos lá dentro. Para recuperar espaço, limpe primeiro dentro da distribuição, depois execute `wsl --shutdown` e compacte o arquivo com o `diskpart`.

É a causa mais comum do «meu disco C está cheio e não encontro o que está ocupando» em uma máquina de desenvolvimento. As ferramentas de análise mostram um único arquivo de 80 GB e você hesita em mexer nele — com razão, porque apagá-lo levaria junto todo o seu ambiente Linux. Este guia explica o que é esse arquivo, como reduzi-lo com segurança e como evitar que inche de novo.

Pontos principais

  • O WSL2 guarda todo o sistema de arquivos Linux em um único disco virtual `ext4.vhdx` que cresce, mas nunca encolhe automaticamente.
  • O arquivo costuma ficar em `%LOCALAPPDATA%\Packages\<distribuição>\LocalState\ext4.vhdx`; o Docker Desktop usa seu próprio `docker_data.vhdx`.
  • A ordem importa: apague primeiro os dados DENTRO da distribuição e só depois compacte o disco virtual.
  • No Docker, `docker system prune -a --volumes` sozinho costuma liberar dezenas de gigabytes.
  • `wsl --shutdown` é obrigatório antes de compactar: um arquivo em uso não pode ser reduzido.
  • A partir do WSL 2.0, incluir `sparseVhd=true` no `.wslconfig` faz o disco encolher sozinho com o tempo.

Por que ele cresce e nunca encolhe

O WSL2 é uma máquina virtual de verdade e guarda todo o sistema de arquivos Linux do lado do Windows em um único arquivo: `ext4.vhdx`. É um disco virtual de expansão dinâmica. Com 5 GB de dados dentro, o arquivo ocupa cerca de 5 GB; ao escrever 60 GB, ele cresce para 60 GB.

O problema surge no sentido contrário. Apague lá dentro uma imagem Docker de 50 GB e o Linux informará o espaço como livre — mas o arquivo VHDX no Windows continua exatamente do mesmo tamanho. O formato apenas marca os blocos liberados como não usados, sem encurtar fisicamente o arquivo. Resultado: `df -h` mostra bastante espaço dentro enquanto o Windows acusa disco C cheio.

O Docker Desktop com backend WSL2 dobra o efeito. O Docker instala a própria distribuição e guarda imagens, camadas e volumes em um `docker_data.vhdx` separado. Em uma máquina de desenvolvimento usada por alguns anos, os dois arquivos juntos passam facilmente de 100 GB.

Primeiro por dentro: o que apagar antes de compactar

Compactar não faz mágica; só devolve blocos que estão realmente livres lá dentro. Por isso o primeiro passo é sempre limpar a distribuição. Em sistemas baseados em Debian e Ubuntu, `sudo apt clean` remove o cache de pacotes baixados e `sudo apt autoremove --purge` tira as dependências de que nenhum pacote precisa mais.

Se você usa Docker, é ali que está o ganho real. `docker system df` detalha quanto ocupam imagens, contêineres, volumes e cache de build. `docker system prune -a --volumes` remove tudo o que não está em uso — atenção, isso também apaga volumes não utilizados: exporte antes qualquer banco de dados que queira manter.

O cache de build costuma ser o maior item e o mais fácil de esquecer. `docker builder prune -a` atinge somente esse cache e deixa suas imagens intactas. Em projetos Node.js, as pastas `node_modules` dentro do WSL mais `~/.npm` e `~/.cache` somam outras dezenas de gigabytes.

Compactar: devolver o espaço ao Windows

Com o interior limpo, resta encurtar fisicamente o disco virtual. O pré-requisito é que o WSL esteja totalmente parado: execute `wsl --shutdown` no PowerShell e feche o Docker Desktop. Se algum processo ainda segurar o arquivo, a compactação falha com erro de acesso negado.

Em um PowerShell com privilégios de administrador inicie o `diskpart` e execute estes passos na ordem: `select vdisk file="C:\Users\nome\AppData\Local\Packages\...\ext4.vhdx"`, depois `attach vdisk readonly`, então `compact vdisk` e por fim `detach vdisk`. A montagem somente leitura é importante; montado para escrita, a compactação não roda.

Em sistemas com os componentes do Hyper-V instalados existe uma alternativa de uma linha: `Optimize-VHD -Path "caminho\ext4.vhdx" -Mode Full`. Esse cmdlet não existe nas edições Home do Windows, o que torna o caminho do `diskpart` o padrão mais seguro. Ao terminar, o tamanho do arquivo deve ficar perto do uso real interno.

Para não acontecer de novo

Com o WSL 2.0 a Microsoft acrescentou suporte a discos virtuais esparsos. Adicione `sparseVhd=true` sob um cabeçalho `[experimental]` em `%USERPROFILE%\.wslconfig`, execute `wsl --shutdown`, e os discos criados a partir daí começam a encolher sozinhos conforme o espaço é liberado por dentro. Para converter uma distribuição existente use `wsl --manage <distribuição> --set-sparse true`.

Dois hábitos ajudam além disso. Primeiro, limpar o cache de build do Docker com regularidade — `docker builder prune -a` uma vez por mês basta na maioria das máquinas. Segundo, manter conjuntos de dados grandes do lado do Windows e acessá-los por `/mnt/c` em vez de guardá-los no sistema de arquivos do WSL, para que esses dados nunca inflem o disco virtual.

Perceber esses arquivos já é um problema em si, porque aparecem como um único arquivo e não se destacam em ferramentas que raciocinam por tamanho de pasta. O módulo Arquivos grandes (Large Files) do Disk Mop ordena por tamanho os maiores arquivos de uma unidade, e o `ext4.vhdx` costuma ficar entre os três primeiros. A visão Disk Treemap mostra esse mesmo arquivo como um retângulo que ocupa boa parte da tela.

Perguntas frequentes

Posso simplesmente apagar o ext4.vhdx?

Não. Esse arquivo É a sua distribuição WSL: pacotes instalados, projetos e bancos de dados estão todos dentro dele. Apagá-lo remove a distribuição por completo. O caminho correto é limpar o conteúdo e depois compactar o disco.

Compactar coloca meus dados em risco?

Não. O `compact vdisk` apenas descarta blocos não utilizados do arquivo de disco virtual; ele não toca nos dados do sistema de arquivos. Ainda assim, é boa prática encerrar o WSL corretamente com `wsl --shutdown` antes e ter backup dos projetos críticos.

Onde fica o arquivo do Docker Desktop?

Nas versões atuais, em `%LOCALAPPDATA%\Docker\wsl\disk\docker_data.vhdx`. Versões mais antigas instalam uma distribuição WSL separada chamada `docker-desktop-data`, com o arquivo em `%LOCALAPPDATA%\Docker\wsl\data\ext4.vhdx`.

Com o sparseVhd ligado ainda preciso compactar?

Normalmente não, mas discos esparsos recuperam espaço de forma gradual, não instantânea. Depois de uma exclusão muito grande, compactar manualmente ainda é mais rápido. Além disso, o `sparseVhd` vale automaticamente apenas para discos criados após a ativação.

Veredito

O WSL2 e o Docker encherem o disco não é um defeito: é como discos virtuais funcionam. A regra é simples: limpe por dentro, encerre o WSL, compacte o disco. Esses três passos recuperam 20 a 60 GB de uma vez na maioria das máquinas de desenvolvimento.

Como solução duradoura, ative `sparseVhd=true` e limpe o cache de build com regularidade. Se quiser ver o que mais se acumulou, os módulos Arquivos grandes e Disk Treemap do Disk Mop revelam esse tipo de caso em segundos.

Veja quais outros arquivos gigantes estão no seu disco

Pagamento único para acesso vitalício a todos os recursos. Sem assinatura, sem taxas ocultas.

Baixe o Disk Mop Agora

Artigos Relacionados