Seu arquivo de disco rígido virtual do WSL2, o vhdx, pode crescer além de 50 GB mesmo se você excluir arquivos dentro da distribuição Linux. O arquivo vhdx não diminui automaticamente quando você remove dados. Este artigo explica por que o arquivo vhdx continua crescendo e como recuperar espaço em disco reduzindo-o.
Principais conclusões: Reduzir um arquivo vhdx do WSL2 superdimensionado
- Comando diskpart
select vdisk file=C:\Users\e depois\AppData\Local\Packages\...\ext4.vhdx compact vdisk: Reduz o arquivo vhdx após você zerar o espaço livre dentro da distribuição Linux. - Comando WSL2
wsl --shutdown: Desliga todas as distribuições WSL2 para que o vhdx não fique bloqueado e possa ser compactado. - Comando Linux
sudo fstrim /: Marca todos os blocos não utilizados como livres dentro do sistema de arquivos ext4, o que o diskpart precisa antes de poder reduzir o vhdx.
Por que o arquivo vhdx do WSL2 cresce além de 50 GB
O WSL2 usa um disco rígido virtual de expansão dinâmica no formato vhdx. O arquivo começa pequeno e cresce à medida que você adiciona dados dentro da distribuição Linux. Quando você exclui arquivos, o sistema de arquivos ext4 marca esses blocos como livres, mas não informa ao arquivo vhdx subjacente para liberar o espaço. O arquivo vhdx permanece em seu tamanho máximo até que você o compacte manualmente.
O arquivo vhdx está localizado em C:\Users\. Se você executar várias distribuições WSL2, cada uma terá seu próprio arquivo vhdx. O tamanho máximo padrão de um vhdx do WSL2 é 256 GB, mas ele pode crescer até qualquer tamanho que seu disco permitir. Muitos usuários relatam que o vhdx atinge 50 GB, 100 GB ou mais mesmo após limpar arquivos dentro do WSL2.
A causa raiz é que o formato vhdx não recupera espaço automaticamente quando o sistema de arquivos interno libera blocos. Você deve executar explicitamente um processo de duas etapas: primeiro zerar o espaço livre dentro da distribuição Linux e depois compactar o arquivo vhdx usando a ferramenta diskpart do Windows.
Passos para reduzir o arquivo vhdx do WSL2 no Windows 11
Siga estas etapas em ordem. Você precisa de acesso de administrador para executar o diskpart. O processo leva alguns minutos, dependendo do tamanho do seu arquivo vhdx.
- Abra sua distribuição WSL2 e execute fstrim
Inicie seu terminal WSL2. Execute o comandosudo fstrim /. Isso instrui o sistema de arquivos ext4 a marcar todos os blocos não utilizados como livres. Talvez seja necessário inserir sua senha do Linux. O comando é concluído rapidamente se você não o executou recentemente. - Desligue todas as distribuições WSL2
Abra um Prompt de Comando ou PowerShell do Windows como administrador. Executewsl --shutdown. Isso interrompe todas as instâncias do WSL2 em execução e desbloqueia o arquivo vhdx para que o diskpart possa acessá-lo. - Abra o diskpart
No mesmo Prompt de Comando ou PowerShell como administrador, digitediskparte pressione Enter. A ferramenta diskpart inicia com um novo promptDISKPART>. - Selecione o arquivo vhdx
No prompt DISKPART, digiteselect vdisk file="C:\Users\. Substitua o caminho pelo local exato do seu arquivo vhdx do WSL2. Se você tiver várias distribuições, repita esta etapa para cada uma. Pressione Enter. O diskpart confirma com\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu..._ \LocalState\ext4.vhdx" DiskPart successfully selected the virtual disk file. - Compacte o arquivo vhdx
Digitecompact vdiske pressione Enter. O diskpart começa a compactar o arquivo vhdx. Isso pode levar vários minutos para arquivos grandes. Não feche a janela durante este processo. Quando terminar, o diskpart exibeDiskPart successfully compacted the virtual disk file. - Saia do diskpart
Digiteexite pressione Enter para fechar o diskpart. Agora você pode reiniciar sua distribuição WSL2. Executewslem um Prompt de Comando normal para iniciá-la.
Após a compactação, verifique o novo tamanho do arquivo vhdx no Explorador de Arquivos. O arquivo deve estar significativamente menor. Repita este processo a cada poucos meses ou sempre que excluir grandes quantidades de dados dentro do WSL2.
Problemas comuns ao reduzir o arquivo vhdx do WSL2
diskpart diz que o vdisk não está selecionado ou está em uso
Este erro ocorre se uma distribuição WSL2 ainda estiver em execução. Execute wsl --shutdown novamente e verifique com wsl --list --running se nenhuma distribuição está listada. Feche também qualquer janela do Explorador de Arquivos que mostre o arquivo vhdx ou sua pasta pai.
O comando fstrim retorna um erro ou não está disponível
Algumas distribuições WSL2 mais antigas podem não suportar fstrim. Atualize sua distribuição com sudo apt update && sudo apt upgrade no Ubuntu ou o equivalente para sua distribuição. Se fstrim ainda falhar, você pode executar sudo dd if=/dev/zero of=/tmp/zero bs=1M para preencher o espaço livre com zeros e depois excluir o arquivo com sudo rm /tmp/zero. Isso atinge o mesmo efeito que fstrim, mas leva mais tempo.
O arquivo vhdx não reduz após a compactação
Se você não executou fstrim antes de compactar, o vhdx pode não reduzir nada. O comando compact vdisk só recupera espaço que o sistema de arquivos marcou como livre. Execute fstrim novamente e repita as etapas de desligamento e diskpart. Certifique-se também de estar compactando o arquivo vhdx correto. Cada distribuição WSL2 tem seu próprio arquivo em uma pasta separada em LocalState.
WSL2 falha ao iniciar após a compactação
Isso é raro. Se o WSL2 não iniciar, execute wsl --shutdown e depois wsl novamente. Se o problema persistir, reinicie o Windows. A operação compact vdisk não modifica o sistema de arquivos dentro do vhdx, apenas o arquivo contêiner em si, portanto a corrupção de dados é improvável.
| Item | Antes da Compactação | Depois da Compactação |
|---|---|---|
| Tamanho do arquivo vhdx | 50 GB ou maior | Reduzido ao tamanho real dos dados |
| Dados dentro do WSL2 | Inalterados | Inalterados |
| Espaço livre dentro do WSL2 | Não recuperável pelo vhdx | Recuperável pelo vhdx após fstrim |
| Comandos necessários | Nenhum | fstrim, wsl –shutdown, diskpart compact vdisk |
Conclusão
Agora você pode reduzir um arquivo vhdx do WSL2 superdimensionado no Windows 11 executando fstrim dentro da distribuição Linux, desligando o WSL2 e usando o diskpart para compactar o vhdx. Esse processo recupera espaço em disco sem afetar seus dados. Para manutenção contínua, agende o fstrim para ser executado automaticamente usando um cron job ou um timer systemd dentro do WSL2. Execute a operação de compactação a cada três meses para manter o tamanho do arquivo vhdx sob controle.