← voltar

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:
docker volume ls
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):
docker system prune -a -f
Depois confere quanto sobrou:
docker system df

Passo 2 — Compactar o VHDX no Windows

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

wsl --shutdown
Espera uns 10 segundos pra garantir que o WSL desligou de verdade. Depois:
diskpart

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.

Comentários (0)

Nenhum comentário ainda. Seja o primeiro.

Continue lendo

Design Pattern Facade em PHP : Exemplo prático

Design Pattern Facade em PHP : Exemplo prático

O Design Pattern Facade é uma solução elegante para simplificar a interface de um subsistema complexo, tornando-o mais fácil de usar. Ele atua como uma fachada que esconde a complexidade de classes e interações…

Artigo, Iniciantes, Intermediários, php, Postgres, Tutorial
Código python para rodar arquivos .sql no postgres

Código python para rodar arquivos .sql no postgres

Nesta semana o Postgres vem me desafiando, e meu pc também, porque por algum motivo o PGADMIN está demorando uma eternidade para rodar o procedimento de restore de backups. Numa dessas situações do dia-a-dia com o…

Artigo, Intermediários, Postgres, Tutorial