O disco do WSL mente
O df dentro da distro e o arquivo VHDX no Windows medem coisas diferentes. Um diz quanto o Linux está usando. O outro diz quanto o Windows reservou, e esse segundo número não desce só porque você apagou arquivo lá dentro.
Eu cansei de limpar cache, ver o df aliviado e o disco do Windows no mesmo lugar. A Oficina de disco nasceu desse desacordo. Ela mede primeiro. Aplicar pede a palavra do script. Sem a palavra, nada é apagado e nenhuma instância é desligada.
Dois tamanhos para o mesmo disco
O WSL 2 guarda a distro num VHDX. Apagar pacote, imagem ou cache no Linux libera bloco dentro do sistema de arquivos. O arquivo no NTFS continua do tamanho que chegou a ter, até alguém compactar.
O disco de dados do Docker Desktop segue a mesma regra. docker builder prune e docker image prune limpam o que o Docker enxerga. O VHDX do host só encolhe depois de desligar o WSL e rodar o diskpart. Esse desligamento para todas as distros, não só a que você estava usando. O Docker Desktop cai junto. Se tem container que não pode parar, a hora não é essa.
A documentação da Microsoft descreve o espaço em disco do WSL e a compactação do VHDX. Eu trato esse texto como a fonte, e o painel como o jeito de não executar o passo destrutivo no escuro.
O número que importa para o Windows é o do arquivo. O número que importa para o Linux é o do
df. Os dois podem divergir, e os dois podem estar certos ao mesmo tempo. — leitura prática de Manage WSL disk space, Microsoft
A palavra é o freio
Cada script, sem -Executar, só imprime. Com -Executar, ainda exige a palavra: SIM, DOCKER, MODELOS ou DESLIGAR. Palavra errada encerra sem alterar nada.
DESLIGAR é a compactação. Pede administrador. Se você cancelar a janela do UAC, o script para antes do diskpart. Eu prefiro esse atrito a um botão que compacta porque o mouse escorregou.
A limpeza do Cursor que apaga backup e cache pede o editor fechado. O banco state.vscdb entra só como leitura. Eu não mando VACUUM nele a partir deste painel. Banco grande com freelist vazia não devolve espaço, e o risco não paga o teatro.
O que dá para ver sem instalar
O repositório mostra a tela. Os grupos da sidebar recolhem na vertical. O nome de cada ação continua visível, com o resumo embaixo. Clicar numa ação leva o foco para a ficha, que diz o que mede, o que preserva e se o passo seguinte apaga alguma coisa.
A distro não está no código. Está no .env, com o nome que wsl -l -v imprime na sua máquina. O exemplo usa Ubuntu. A página escuta só em 127.0.0.1.
A simulação, quando você roda na sua máquina, imprime caminho e tamanho. Isso fica aí. O .gitignore deixa diagnóstico, log e a pasta de laboratório fora do Git. Issue com essa saída colada não ajuda ninguém e ainda publica o seu disco.
O que eu deixei de fora de propósito
Não tem botão para docker system prune, nem para apagar volume, nem para desregistrar distro. Não tem compactação marcada como insegura. A varredura do Windows que mexe em sombra de cópia e no cleanmgr existe no terminal e não aparece no painel.
Achei melhor um catálogo curto, chato de confirmar, do que uma oficina que promete liberar espaço e desliga o que você estava usando.
Comece
git clone https://github.com/araguaci/wsl-scripts.git
cd wsl-scripts
powershell -ExecutionPolicy Bypass -File .\instalar.ps1
Na primeira vez o instalador copia .env.example e abre o bloco de notas. Ajuste os nomes e rode de novo.
Código: github.com/araguaci/wsl-scripts
Texto no portfólio: artesdosul.com/devops/oficina-de-disco
Fontes
- Microsoft, Manage WSL disk space
- Docker, docker builder prune e docker image prune