PauloRB.dev

Desenvolvedor de Software

Como liberar espaço em disco no WSL2 com Docker no Windows | PauloRB.dev Como liberar espaço em disco no WSL2 com Docker no Windows – PauloRB.dev
Como liberar espaço em disco no WSL2 com Docker no Windows

Como liberar espaço em disco no WSL2 com Docker no Windows

A ordem é: primeiro limpar o Docker, depois compactar o VHDX

O ext4.vhdx é o disco virtual do WSL. Ele cresce conforme você usa, mas não encolhe sozinho quando você apaga coisas dentro do WSL. Por isso, mesmo que você rode docker system prune e libere 80GB, o arquivo .vhdx no Windows continua com o mesmo tamanho. O diskpart + compact vdisk é o que devolve esse espaço pro Windows.

Se você rodar o compact vdisk antes de limpar o Docker, ele não vai liberar quase nada, porque o espaço ainda está ocupado de verdade.

Passo 1 — Limpar o Docker dentro do WSL

Olhando seus números: 57.92GB recuperáveis em imagens + 30.06GB em build cache. Tem quase 90GB pra recuperar aí.

bash# Remove build cache (os 30GB)
docker builder prune -a -f

# Remove imagens não usadas por nenhum container (os ~58GB)
docker image prune -a -f

# Remove containers parados
docker container prune -f

# Remove volumes órfãos (cuidado, veja abaixo)
docker volume prune -f

Atenção com volume prune: ele remove volumes que não estão anexados a nenhum container. Se você tem um volume com dados do banco do proseleta e o container está parado no momento, esse volume vai junto. Antes de rodar, confere:

Se tiver algum volume importante (tipo proseleta_mysql_data ou similar), pula o volume prune e remove só os que você sabe que são lixo:

docker volume rm nome_do_volume

Atalho que faz tudo de uma vez (menos volumes):

Depois confere quanto sobrou:

Passo 2 — Compactar o VHDX no Windows

Agora sim, no PowerShell do Windows como Administrador (não no WSL):

Espera uns 10 segundos pra garantir que o WSL desligou de verdade. Depois:

Vai abrir o prompt do diskpart. Antes de mais nada, você precisa achar o caminho real do seu ext4.vhdx. Aquele {seuUsuario} e {caminho_unico_por_maquina} são placeholders.

Abra o Explorer do Windows e navegue até:

C:\Users\<SeuUsuárioWindows>\AppData\Local\Packages\

Procure uma pasta que começa com CanonicalGroupLimited.Ubuntu... (o nome completo varia, algo tipo CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc). Dentro dela, vá em LocalState\ e confirme que tem o arquivo ext4.vhdx. Copia o caminho completo.

Se você usa Docker Desktop com o backend WSL2, o disco que cresce mais é geralmente o do Docker, não o do Ubuntu. Ele fica em:

C:\Users\<SeuUsuário>\AppData\Local\Docker\wsl\disk\docker_data.vhdx

ou em versões mais novas:

C:\Users\<SeuUsuário>\AppData\Local\Docker\wsl\data\ext4.vhdx

Vale compactar os dois.

De volta ao diskpart, com o caminho em mãos:

select vdisk file="C:\Users\paulo\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx"
attach vdisk readonly
compact vdisk
detach vdisk
exit

O attach vdisk readonly é importante — sem ele, o compact vdisk em versões mais recentes do Windows reclama. Algumas versões funcionam sem, mas com o readonly funciona sempre.

Pra compactar o disco do Docker, sai do diskpart, repete o wsl --shutdown (por garantia) e roda de novo com o outro caminho.

Alternativa mais simples: Optimize-VHD

Se você tem Windows Pro/Enterprise com Hyper-V habilitado, dá pra fazer tudo em uma linha no PowerShell admin:

wsl --shutdown
Optimize-VHD -Path "C:\Users\paulo\AppData\Local\Docker\wsl\disk\docker_data.vhdx" -Mode Full

No Windows Home não funciona porque não tem o módulo Hyper-V.

Verificando o resultado

Antes de começar, anota o tamanho atual do .vhdx (botão direito → propriedades). Depois de compactar, confere de novo. Você deveria ver uma redução considerável — provavelmente algo entre 60 e 80 GB no seu caso, dado o que o docker system df mostrou.

Se a compactação não reduzir muito, geralmente é porque (1) o Docker não foi limpo antes, ou (2) o WSL não foi totalmente desligado e o .vhdx ainda estava em uso. Roda wsl --list --running no PowerShell pra confirmar que nada está rodando antes do compact.

Mais Posts

Como Usar Between Entre Duas Colunas de Data no Laravel

Como Usar Between Entre Duas Colunas de Data no Laravel

Trabalhar com intervalos de datas é uma necessidade comum em aplicações web, especialmente em sistemas que lidam com eventos, agendamentos... Leia mais

Formas de Paginação de Dados no Laravel

Formas de Paginação de Dados no Laravel

No desenvolvimento de aplicações web, a paginação de dados é um recurso fundamental quando se trabalha com grandes volumes de... Leia mais

Construir array de texto a partir de um array.

Construir array de texto a partir de um array.

No dia de hoje(17/08/2022) me deparei com o seguinte problema onde recebiamos um array javascript contendo textos e cujas chaves... Leia mais

Como instalar o Docker no Linux(Ubuntu)

Como instalar o Docker no Linux(Ubuntu)

Para instalar o docker no ubuntu basta seguir os passos abaixo: Abra o terminal do Linux copie e cole os... Leia mais