Como gerenciar o espaço em disco WSL

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

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 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 é inicialmente alocado uma quantidade máxima de 1 TB de espaço em disco (antes da versão 0.58.0 do WSL , esse padrão foi 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 está sem espaço em disco. Para corrigir esse erro, siga as diretrizes abaixo sobre Como expandir o tamanho do disco rígido virtual do 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 Linux Df .

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 de distribuição real):

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

A saída incluirá:

  • Sistema de arquivos: identificador para o sistema de arquivos VHD
  • Tamanho: tamanho total do disco (a quantidade máxima de espaço alocado para o VHD)
  • Usado: quantidade de espaço atualmente sendo usada no VHD
  • Avail: quantidade de espaço restante no VHD (tamanho alocado menos quantidade usada)
  • Use%: Porcentagem de espaço em disco restante (Tamanho usado/alocado)
  • Montado em: caminho do diretório em que o disco está montado

Se você vir que está perto de atingir a quantidade disponível de espaço em disco alocada para seu VHD ou já recebeu um erro devido a nenhum espaço em disco restante, consulte a próxima seção para ver as etapas sobre como expandir a quantidade máxima de espaço em disco alocada 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 em seu dispositivo Windows real seja menor do que isso. O WSL monta um VHD que será expandido em tamanho à medida que você o usar, para que sua distribuição do Linux veja que ele pode aumentar para o tamanho máximo alocado de 1 TB. 

Como expandir o tamanho do 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á uma solicitação DISKPART> . Insira o comando a seguir, substituindo <pathToVHD> pelo caminho do diretório para o ext4.vhdx arquivo 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, converta-o em 512000. O novo valor que inserir deve ser maior que esse valor original. Por exemplo, para dobrar o tamanho virtual de 512 GB para 1024 GB, você converteria em MB e inseriria o valor: 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 do Prompt DISKPART> de Comando do Windows:

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

    exit
    
  9. Inicie essa distribuição do Linux. (Verifique se ele está em execução no WSL 2. Você pode confirmar isso usando o comando : wsl.exe -l -v. Não há suporte para o WSL 1).

  10. Lembre-se de que o WSL pode expandir o tamanho do sistema de arquivos para essa distribuição executando esses comandos da 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 êxito para o novo tamanho.

Importante

Recomendamos que você não modifique, mova ou acesse os arquivos relacionados ao WSL localizados dentro de sua AppData pasta usando ferramentas ou 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 reparar um erro de montagem VHD

Se você encontrar um erro relacionado à "montagem do disco de distribuição", isso pode ser devido a um desligamento repentino ou 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 e2fsck comando 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 refere-se a esses discos rígidos como "dispositivos de bloco" e você pode exibir informações sobre eles usando o lsblk comando .

Para localizar os nomes dos dispositivos de bloco que estão sendo usados atualmente 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 será semelhante a esta:

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:

  • NOME: 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. 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/Interface do Sistema de Computador Pequeno).
  • RM: vamos saber se o dispositivo é removível (1) ou não (0).
  • TAMANHO: tamanho total do volume.
  • RO: vamos saber se o dispositivo é somente leitura (1) ou não (0).
  • TIPO: refere-se ao tipo de dispositivo (disco neste caso).
  • 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 para que 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 reparar um erro de montagem de disco no WSL e restaurá-lo novamente para um estado utilizável/gravável, você pode usar o wsl.exe --mount comando para montar novamente o disco com as seguintes etapas:

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

    wsl.exe --shutdown
    
  2. Abra o PowerShell como administrador (em um prompt de comando 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 wsl.exe lsblk comando 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 e2fsck comando verifica os sistemas de arquivos ext4 (o tipo usado pelas distribuições instaladas com o WSL) quanto a erros e os repara adequadamente.

    wsl.exe sudo e2fsck -f /dev/<device>
    
  4. 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 serão na memória e, portanto, serão perdidas quando a distribuição for reiniciada. Recomendamos 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 %LOCALAPPDATA%\Packages\<PackageFamilyName>\LocalState\<disk>.vhdxa . Por exemplo:

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

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