Comment gérer l’espace disque WSL

Ce guide explique comment gérer l’espace disque utilisé par les distributions Linux installées à l’aide de WSL 2, notamment :

Le Sous-système Windows pour Linux (WSL 2) utilise une plateforme de virtualisation pour installer des distributions Linux en même temps que le système d’exploitation Windows hôte, en créant un disque dur virtuel (VHD) pour stocker des fichiers pour chacune des distributions Linux que vous installez. Ces VHD utilisent le type de système de fichiers ext4 et sont représentés sur votre disque dur Windows sous la forme d’un fichier ext4.vhdx.

WSL 2 redimensionne automatiquement ces fichiers VHD pour répondre aux exigences de stockage. Par défaut, chaque fichier VHD utilisé par WSL 2 reçoit initialement une quantité maximale d’espace disque de 1 To (avant la version WSL 0.58.0, cette valeur par défaut était définie sur un maximum de 512 Go et 256 Go auparavant).

Si l’espace de stockage requis par vos fichiers Linux dépasse cette taille maximale, des erreurs apparaîtront, indiquant que vous n’avez plus d’espace disque. Pour corriger cette erreur, suivez les instructions ci-dessous : Comment étendre la taille de votre disque dur virtuel WSL 2.

Comment vérifier l’espace disque disponible

Vérifiez la quantité d’espace disque disponible dans le VHD pour une distribution Linux installée avec WSL 2 à l’aide de la commande Linux Df.

Pour vérifier l’espace disque disponible, ouvrez une ligne de commande PowerShell et entrez cette commande (en remplaçant <distribution-name> par le nom de distribution réel) :

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

Si cette commande ne fonctionne pas, veuillez effectuer une mise à niveau vers la version Microsoft Store de WSL à l’aide de la commande wsl --update, ou essayez wsl df -h /.

La sortie inclura :

  • Système de fichiers : identificateur du système de fichiers VHD
  • Taille : taille totale du disque (quantité maximale d’espace allouée au VHD)
  • Utilisé : quantité d’espace actuellement utilisée dans le VHD
  • Disponible : quantité d’espace restant dans le VHD (taille allouée moins la quantité utilisée)
  • % utilisation : pourcentage d’espace disque restant (taille utilisée/allouée)
  • Monté sur : chemin d’accès du répertoire où le disque est monté

Si vous constatez que vous êtes sur le point d’atteindre la quantité d’espace disque disponible allouée à votre VHD ou que vous avez déjà reçu une erreur en raison de l’absence d’espace disque restant, consultez la section suivante pour connaître les étapes à suivre pour étendre la quantité maximale d’espace disque allouée au VHD associé à votre distribution Linux. La quantité d’espace disque allouée à votre VHD par WSL affichera toujours la quantité maximale par défaut (1 To dans la version la plus récente de WSL), même si la quantité d’espace disque sur votre appareil Windows effectif est inférieure à celle-ci. WSL monte un disque dur virtuel qui va s’étendre en taille à mesure que vous l’utilisez, de sorte que votre distribution Linux voit qu’il peut atteindre la taille maximale allouée de 1 To. 

Comment étendre la taille de votre disque dur virtuel WSL 2

Pour étendre la taille du VHD d’une distribution Linux au-delà de la quantité d’espace disque allouée de 1 To au maximum par défaut, suivez les étapes ci-dessous. (Pour les versions WSL antérieures qui n’ont pas encore été mises à jour, cette valeur maximale par défaut peut être définie sur 512 Go ou 256 Go).

  1. Arrêtez toutes les instances WSL à l’aide de la commande : wsl.exe --shutdown

  2. Copiez le chemin du répertoire dans le fichier ext4.vhdx associé à la distribution Linux installée sur votre ordinateur. Pour obtenir de l’aide, consultez Comment localiser le fichier vhdx et le chemin du disque pour votre distribution Linux.

  3. Ouvrez l’invite de commandes Windows avec les privilèges d’administrateur, puis ouvrez l’interpréteur de commandes diskpart en entrant :

    diskpart
    
  4. Vous disposez maintenant d’une invite DISKPART>. Entrez la commande suivante, en remplaçant <pathToVHD> par le chemin du répertoire du fichier ext4.vhdx associé à la distribution Linux (copié à l’étape 2).

    Select vdisk file="<pathToVHD>"
    
  5. Affichez les détails associés à ce disque virtuel, y compris la taille virtuelle, représentant la taille maximale actuelle allouée au VHD :

    detail vdisk
    
  6. Vous devez convertir la taille virtuelle en mégaoctets. Par exemple, si la taille virtuelle est de 512 Go, elle est égale à 512 000 Mo. La nouvelle valeur que vous entrez doit être supérieure à cette valeur d’origine. Pour doubler la taille virtuelle de 512 Go à 1024 Go, vous devez entrer la valeur en Mo comme suit : 1024000. Veillez à ne pas entrer une valeur supérieure à celle que vous souhaitez réellement, car le processus de réduction de la taille d’un disque virtuel est beaucoup plus compliqué.

  7. Entrez la valeur de la nouvelle taille maximale que vous souhaitez allouer à cette distribution Linux à l’aide de l’invite de commandes Windows DISKPART> :

    expand vdisk maximum=<sizeInMegaBytes>
    
  8. Quittez l’invite DISKPART> :

    exit
    
  9. Lancez cette distribution Linux. (Vérifiez qu’elle est en cours d’exécution dans WSL 2. Vous pouvez le vérifier en utilisant la commande : wsl.exe -l -v. WSL 1 n’est pas pris en charge).

  10. Indiquez à WSL qu’il peut étendre la taille du système de fichiers pour cette distribution en exécutant ces commandes à partir de votre ligne de commande de distribution WSL. Vous pouvez voir ce message en réponse à la première commande mount : "/dev: none already mounted on /dev." Ce message peut être ignoré sans problème.

    sudo mount -t devtmpfs none /dev
    mount | grep ext4
    
  11. Copiez le nom de cette entrée, qui ressemble à ceci : /dev/sdX (X représentant tout autre caractère). Dans l’exemple suivant, la valeur de X est b :

   sudo resize2fs /dev/sdb <sizeInMegabytes>M

En utilisant l’exemple ci-dessus, nous avons remplacé la taille du disque dur virtuel par 2 048 000, donc la commande serait : sudo resize2fs /dev/sdb 2048000M.

Remarque

Vous devrez peut-être installer resize2fs. Dans ce cas, vous pouvez utiliser cette commande pour l’installer : sudo apt install resize2fs.

La sortie ressemble à l'exemple suivant :

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.

L’unité virtuelle (ext4.vhdx) de cette distribution Linux a maintenant été étendue à la nouvelle taille.

Important

Nous vous recommandons de ne pas modifier, déplacer ni accéder aux fichiers associés à WSL situés dans votre dossier AppData en utilisant les outils ou les éditeurs Windows. Cela pourrait entraîner la corruption de votre distribution Linux. Si vous souhaitez accéder à vos fichiers Linux à partir de Windows, vous pouvez le faire via le chemin \\wsl$\<distribution-name>\. Ouvrez votre distribution WSL et entrez explorer.exe . pour afficher ce dossier. Pour en savoir plus, consultez le billet de blog : Accessing Linux files from Windows.

Comment réparer une erreur de montage de VHD

Si vous rencontrez une erreur liée au « montage du disque de distribution », cela peut être dû à un arrêt soudain ou à une panne de courant et peut entraîner le basculement du VHD de la distribution Linux en lecture seule pour éviter la perte de données. Vous pouvez réparer et restaurer la distribution à l’aide de la commande Linux e2fsck en suivant les étapes ci-dessous.

Utilisez la commande lsblk pour identifier le nom du périphérique bloc

Lorsque WSL 2 installe une distribution Linux, il monte la distribution en tant que disque dur virtuel (VHD) avec son propre système de fichiers. Linux fait référence à ces disques durs en tant que « périphériques bloc » et vous pouvez afficher des informations les concernant à l’aide de la commande lsblk.

Pour rechercher les noms des périphériques bloc actuellement utilisés par WSL 2, ouvrez votre distribution et entrez la commande : lsblk. (Ou ouvrez PowerShell et entrez la commande : wsl.exe lsblk.) La sortie ressemblera à ceci :

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

Les informations sur le périphérique bloc comprennent :

  • NAME : le nom attribué au périphérique sera sd[a-z], faisant référence au disque SCSI avec une lettre de désignation pour chaque disque utilisé. sda est toujours la distribution du système.
  • MAJ:MIN : représente les nombres utilisés par le noyau Linux pour identifier en interne les périphériques dont le premier nombre représente le type de périphérique (8 est utilisé pour les disques SCSI/interface système de petite taille).
  • RM : nous permet de savoir si l’appareil est amovible (1) ou non (0).
  • SIZE : taille totale du volume.
  • RO : nous permet de savoir si l’appareil est en lecture seule (1) ou non (0).
  • TYPE : fait référence au type de périphérique (disque dans ce cas).
  • MOUNTPOINTS : fait référence au répertoire actif sur le système de fichiers où se trouve le périphérique bloc (SWAP est destiné à la mémoire inactive préconfigurée, donc pas de point de montage).

Erreur de secours en lecture seule

Si WSL rencontre une « erreur de montage » lors de l’ouverture d’une distribution Linux, la distribution peut être définie en lecture seule comme secours. Si cela se produit, la distribution peut afficher l’erreur suivante au démarrage :

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

Lorsqu’une distribution est démarrée en lecture seule, toute tentative d’écriture dans le système de fichiers échouera avec une erreur semblable à celle-ci :

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

Pour réparer une erreur de montage de disque dans WSL et le restaurer à nouveau à un état utilisable/accessible en écriture, vous pouvez utiliser la commande wsl.exe --mount pour remonter le disque en procédant comme suit :

  1. Arrêtez toutes les distributions WSL en ouvrant PowerShell et en entrant la commande :

    wsl.exe --shutdown
    
  2. Ouvrez PowerShell en tant qu’administrateur (dans une invite de commandes avec élévation de privilèges) et entrez la commande mount, en remplaçant <path-to-ext4.vhdx> par le chemin d’accès au fichier .vhdx de la distribution. Pour obtenir de l’aide sur la localisation de ce fichier, consultez Comment localiser le fichier VHD et le chemin du disque pour votre distribution Linux.

    wsl.exe --mount <path-to-ext4.vhdx> --vhd --bare
    
  3. Utilisez la commande wsl.exe lsblk depuis PowerShell pour identifier le nom du périphérique bloc pour la distribution (sd[a-z]), puis entrez la commande suivante pour réparer le disque (en remplaçant <device> par le nom de périphérique bloc correct, par exemple « sdc »). La commande e2fsck vérifie les erreurs des systèmes de fichiers ext4 (type utilisé par les distributions installées avec WSL) et les répare en conséquence.

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

Remarque

Si vous n’avez installé qu’une seule distribution Linux, vous pouvez rencontrer une erreur « ext file in use » et vous devrez installer une distribution supplémentaire pour pouvoir utiliser wsl.exe lsblk. Vous pouvez désinstaller la distribution une fois la réparation terminée.

  1. Une fois la réparation terminée, démontez le disque dans PowerShell en entrant :

    wsl.exe --unmount
    

Avertissement

Vous pouvez utiliser la commande : sudo mount -o remount,rw / pour retourner une distribution en lecture seule à un état utilisable/accessible en écriture, mais toutes les modifications seront en mémoire et seront donc perdues lors du redémarrage de la distribution. Nous vous recommandons plutôt de respecter les étapes ci-dessus pour monter et réparer le disque.

Comment localiser le fichier .vhdx et le chemin du disque pour votre distribution Linux

Pour localiser le fichier .vhdx et le chemin du répertoire d’une distribution Linux, ouvrez PowerShell et utilisez le script suivant, en remplaçant <distribution-name> par le nom de distribution réel :

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

Le résultat affiche un chemin d’accès semblable à %LOCALAPPDATA%\Packages\<PackageFamilyName>\LocalState\<disk>.vhdx. Par exemple :

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

Il s’agit du chemin d’accès au fichier ext4.vhdx associé à la distribution Linux que vous avez listée.