Corrigir vhdx do WSL2 crescendo acima de 50 GB e como reduzi-lo no Windows 11
🔍 WiseChecker

Corrigir vhdx do WSL2 crescendo acima de 50 GB e como reduzi-lo no Windows 11

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\\AppData\Local\Packages\...\ext4.vhdx e depois 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.

ADVERTISEMENT

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\\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu..._\LocalState\ext4.vhdx. 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.

  1. Abra sua distribuição WSL2 e execute fstrim
    Inicie seu terminal WSL2. Execute o comando sudo 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.
  2. Desligue todas as distribuições WSL2
    Abra um Prompt de Comando ou PowerShell do Windows como administrador. Execute wsl --shutdown. Isso interrompe todas as instâncias do WSL2 em execução e desbloqueia o arquivo vhdx para que o diskpart possa acessá-lo.
  3. Abra o diskpart
    No mesmo Prompt de Comando ou PowerShell como administrador, digite diskpart e pressione Enter. A ferramenta diskpart inicia com um novo prompt DISKPART>.
  4. Selecione o arquivo vhdx
    No prompt DISKPART, digite select vdisk file="C:\Users\\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu..._\LocalState\ext4.vhdx". 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 DiskPart successfully selected the virtual disk file.
  5. Compacte o arquivo vhdx
    Digite compact vdisk e 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 exibe DiskPart successfully compacted the virtual disk file.
  6. Saia do diskpart
    Digite exit e pressione Enter para fechar o diskpart. Agora você pode reiniciar sua distribuição WSL2. Execute wsl em 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.

ADVERTISEMENT

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.

ADVERTISEMENT