Como gerenciar o espaço em disco do WSL

Este guia aborda como gerenciar o espaço em disco usado pelas distribuições do Linux instaladas usando o WSL 2, incluindo:

O Subsistema do Windows para Linux (WSL 2) usa uma plataforma de virtualização para instalar distribuições do Linux junto com o sistema operacional host do Windows, criando um VHD (Disco Rígido Virtual) para armazenar arquivos para cada uma das distribuições do Linux instaladas. Esses VHDs usam o tipo de sistema de arquivos ext4 e são representados no disco rígido do Windows como um arquivo ext4.vhdx.

O WSL 2 redimensiona automaticamente esses arquivos VHD para atender às necessidades de armazenamento. Por padrão, cada arquivo VHD usado pelo WSL 2 recebe inicialmente uma quantidade máxima de 1 TB de espaço em disco (antes da versão 0.58.0 do WSL, esse padrão era definido como um máximo de 512 GB e um máximo de 256 GB antes disso).

Se o espaço de armazenamento exigido pelos arquivos do Linux exceder esse tamanho máximo, você verá erros informando que não há espaço em disco. Para corrigir esse erro, siga as diretrizes abaixo em Como expandir o tamanho do disco rígido virtual no WSL 2.

Como verificar o espaço em disco disponível

Verifique a quantidade de espaço em disco disponível no VHD para uma distribuição do Linux instalada com o WSL 2 usando o comando Df do Linux.

Para verificar o espaço em disco disponível, abra uma linha de comando do PowerShell e insira este comando (substituindo <distribution-name> pelo nome real da distribuição):

wsl.exe --system -d <distribution-name> df -h /mnt/wslg/distro

Se esse comando não funcionar para você, atualize para a versão de Armazenamento do WSL usando o wsl --update comando ou tente wsl df -h /.

A saída incluirá:

  • Filesustem: identificador do sistema de arquivos VHD
  • Size: tamanho total do disco (a quantidade máxima de espaço alocado para o VHD)
  • Used: quantidade de espaço atualmente sendo usada no VHD
  • Avail: quantidade de espaço restante no VHD (tamanho alocado menos a quantidade usada)
  • Use%: porcentagem de espaço em disco restante (tamanho usado/alocado)
  • Mounted on: caminho do diretório em que o disco está montado

Se estiver perto de atingir a quantidade de espaço disponível em disco alocado para seu VHD ou se já recebeu uma mensagem de erro devido a nenhum espaço em disco restante, consulte a próxima seção para acessar as etapas sobre como expandir a quantidade máxima de espaço em disco alocado para o VHD associado à distribuição do Linux. A quantidade de espaço em disco alocada ao VHD pelo WSL sempre mostrará a quantidade máxima padrão (1 TB na versão mais recente do WSL), mesmo que a quantidade de espaço em disco real em seu dispositivo Windows seja menor que isso. O WSL monta um VHD que se expandirá conforme você o usar, para que sua distribuição do Linux veja que ela pode crescer até o tamanho máximo alocado de 1 TB. 

Como expandir o tamanho do seu Disco Rígido Virtual do WSL 2

Para expandir o tamanho do VHD para uma distribuição do Linux além da quantidade máxima padrão de 1 TB de espaço em disco alocado, siga as etapas abaixo. (Para versões anteriores do WSL que ainda não foram atualizadas, esse padrão máximo pode ser definido como 512 GB ou 256 GB).

  1. Termine todas as instâncias do WSL usando o comando: wsl.exe --shutdown

  2. Copie o caminho do diretório para o arquivo ext4.vhdx associado à distribuição do Linux instalada em seu computador. Para obter ajuda, consulte Como localizar o arquivo vhdx e o caminho do disco para sua distribuição do Linux.

  3. Abra o Prompt de Comando do Windows com privilégios de administrador e abra o interpretador de comando diskpart inserindo:

    diskpart
    
  4. Agora você terá um prompt DISKPART>. Insira o comando a seguir, substituindo <pathToVHD> pelo caminho do diretório para o arquivo ext4.vhdx associado à distribuição do Linux (copiado na etapa nº 2).

    Select vdisk file="<pathToVHD>"
    
  5. Exiba os detalhes associados a esse disco virtual, incluindo o Tamanho virtual, representando o tamanho máximo atual que o VHD está alocado:

    detail vdisk
    
  6. Você precisará converter o Tamanho virtual em megabytes. Por exemplo, se Tamanho virtual: 512 GB, isso será equivalente a 512.000 MB. O novo valor que inserir deve ser maior que esse valor original. Para dobrar o tamanho virtual de 512 GB para 1024 GB, insira o valor em MB como: 1024000. Tenha cuidado para não inserir um valor maior do que você realmente deseja, pois o processo de redução de um tamanho de disco virtual é muito mais complicado.

  7. Insira o valor do novo tamanho máximo que você deseja alocar para essa distribuição do Linux usando o prompt DISKPART> do Prompt de Comando do Windows:

    expand vdisk maximum=<sizeInMegaBytes>
    
  8. Saia do prompt DISKPART>:

    exit
    
  9. Inicie esta distribuição do Linux. (Certifique-se de que ele esteja sendo executado em WSL 2. Você pode confirmar isso usando o comando: wsl.exe -l -v. Não há suporte para WSL 1).

  10. Informe ao WSL que ele pode expandir o tamanho do sistema de arquivos dessa distribuição executando esses comandos na linha de comando de distribuição do WSL. Você poderá ver esta mensagem em resposta ao primeiro comando mount: "/dev: none já foi montado em /dev." Essa mensagem pode ser ignorada com segurança.

    sudo mount -t devtmpfs none /dev
    mount | grep ext4
    
  11. Copie o nome dessa entrada, que terá a seguinte aparência: /dev/sdX (em que X representa qualquer outro caractere). No seguinte exemplo, o valor de X é b:

   sudo resize2fs /dev/sdb <sizeInMegabytes>M

Usando o exemplo acima, alteramos o tamanho do VHD para 2048000; portanto, o comando seria: sudo resize2fs /dev/sdb 2048000M.

Observação

Talvez você também precise instalar o resize2fs. Nesse caso, você pode usar este comando para instalá-lo: sudo apt install resize2fs.

A saída terá esta aparência:

resize2fs 1.44.1 (24-Mar-2021)
Filesystem at /dev/sdb is mounted on /; on-line resizing required
old_desc_blocks = 32, new_desc_blocks = 38
The filesystem on /dev/sdb is now 78643200 (4k) blocks long.

A unidade virtual (ext4.vhdx) para essa distribuição do Linux agora foi expandida com sucesso para o novo tamanho.

Importante

Recomendamos não modificar, mover ou acessar os arquivos relacionados ao WSL localizados dentro da sua pasta AppData usando as ferramentas ou os editores do Windows. Isso pode fazer com que a distribuição do Linux fique corrompida. Caso você queira acessar seus arquivos do Linux por meio do Windows, isso é possível por meio do caminho \\wsl$\<distribution-name>\. Abra sua distribuição do WSL e insira explorer.exe . para exibir essa pasta. Para saber mais, confira a postagem no blog: Acessando arquivos do Linux no Windows.

Como consertar um erro de montagem de VHD

Se você encontrar um erro relacionado à “montagem do disco de distribuição”, isso pode ser devido a um desligamento repentino ou uma interrupção de energia e pode fazer com que o VHD de distribuição do Linux seja alternado para somente leitura para evitar a perda de dados. Você pode reparar e restaurar a distribuição usando o comando e2fsck do Linux seguindo as etapas abaixo.

Use o comando lsblk para identificar o nome do dispositivo de bloco

Quando o WSL 2 instala uma distribuição do Linux, ele está montando a distribuição como um VHD (Disco Rígido Virtual) com seu próprio sistema de arquivos. O Linux se refere a esses discos rígidos como “dispositivos de bloco” e você pode exibir informações sobre eles usando o comando lsblk.

Para localizar os nomes dos dispositivos de bloco que estão sendo usados pelo WSL 2, abra sua distribuição e insira o comando: lsblk. (Ou abra o PowerShell e insira o comando: wsl.exe lsblk). A saída terá a seguinte aparência:

NAME MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda    8:0    0 363.1M  1 disk
sdb    8:16   0     8G  0 disk [SWAP]
sdc    8:32   0   1.5T  0 disk
sdd    8:48   0     1T  0 disk /mnt/wslg/distro

As informações sobre o dispositivo de bloco incluem:

  • NAME: o nome atribuído ao dispositivo será sd[a-z], referindo-se ao Disco SCSI com uma designação de letra para cada disco que está sendo usado. O sda é sempre a distribuição do sistema.
  • MAJ:MIN: representa os números usados pelo kernel do Linux para identificar internamente os dispositivos com o primeiro número que representa o tipo de dispositivo. 8 é usado para discos SCSI (Small Computer System Interface).
  • RM: vamos saber se o dispositivo é removível (1) ou não (0).
  • SIZE: tamanho total do volume.
  • RO: vamos saber se o dispositivo é somente leitura (1) ou não (0).
  • TYPE: refere-se ao tipo de dispositivo (nesse caso, disco).
  • MOUNTPOINTS: refere-se ao diretório atual no sistema de arquivos em que o dispositivo de bloco está localizado (SWAP é para memória inativa pré-configurada, portanto, nenhum ponto de montagem).

Erro de fallback somente leitura

Se o WSL encontrar um “erro de montagem” ao abrir uma distribuição do Linux, a distribuição poderá ser definida como somente leitura como um fallback. Se isso acontecer, a distribuição poderá exibir o seguinte erro durante a inicialização:

An error occurred mounting the distribution disk, it was mounted read-only as a fallback.

Quando uma distribuição é iniciada como somente leitura, todas as tentativas de gravação no sistema de arquivos falharão com um erro como este:

$ touch file
touch: cannot touch 'file': Read-only file system

Para consertar um erro de montagem de disco no WSL e restaurá-lo novamente para um estado utilizável/gravável, você pode usar o comando wsl.exe --mount para montar novamente o disco com as seguintes etapas:

  1. Desligue todas as distribuições WSL abrindo o PowerShell e inserindo o comando:

    wsl.exe --shutdown
    
  2. Abra o PowerShell como administrador (em um prompt de comandos com privilégios elevados) e insira o comando de montagem, substituindo <path-to-ext4.vhdx> pelo caminho para o arquivo .vhdx da distribuição. Para obter ajuda para localizar esse arquivo, consulte Como localizar o arquivo VHD e o caminho do disco para sua distribuição do Linux.

    wsl.exe --mount <path-to-ext4.vhdx> --vhd --bare
    
  3. Use o comando wsl.exe lsblk do PowerShell para identificar o nome do dispositivo de bloco para a distribuição (sd[a-z]) e, em seguida, insira o comando a seguir para reparar o disco (substituindo <device> pelo nome correto do dispositivo de bloco, como “sdc”). O comando e2fsck verifica se há erros nos sistemas de arquivos ext4 (o tipo usado pelas distribuições instaladas com o WSL) e os repara de acordo.

    wsl.exe sudo e2fsck -f /dev/<device>
    

Observação

Se você tiver apenas uma distribuição Linux instalada, poderá encontrar um erro "arquivo ext em uso" e precisará instalar uma distribuição adicional para executar wsl.exe lsblk. Você pode desinstalar a distribuição uma vez concluído o reparo.

  1. Depois que o reparo for concluído, desmonte o disco no PowerShell inserindo:

    wsl.exe --unmount
    

Aviso

Você pode usar o comando: sudo mount -o remount,rw / para retornar uma distribuição somente leitura para um estado utilizável/gravável, mas todas as alterações estarão na memória e, portanto, serão perdidas quando a distribuição for reiniciada. É recomendável usar as etapas listadas acima para montar e reparar o disco.

Como localizar o arquivo .vhdx e o caminho do disco para sua distribuição do Linux

Para localizar o arquivo .vhdx e o caminho do diretório para uma distribuição do Linux, abra o PowerShell e use o seguinte script, substituindo <distribution-name> pelo nome de distribuição real:

(Get-ChildItem -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss | Where-Object { $_.GetValue("DistributionName") -eq '<distribution-name>' }).GetValue("BasePath") + "\ext4.vhdx"

O resultado exibirá um caminho semelhante a %LOCALAPPDATA%\Packages\<PackageFamilyName>\LocalState\<disk>.vhdx. Por exemplo:

C:\Users\User\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\ext4.vhdx

Esse é o caminho para o arquivo ext4.vhdx associado à distribuição do Linux listada.