Pourquoi WSL2 et Docker saturent le disque : réduire ext4.vhdx
Le disque virtuel grossit et ne rétrécit jamais tout seul
Réponse courte : WSL2 conserve tout son système de fichiers Linux dans un disque virtuel nommé `ext4.vhdx`. Ce fichier grossit à la demande mais NE diminue PAS quand vous supprimez des fichiers à l'intérieur. Pour récupérer l'espace, nettoyez d'abord la distribution, puis exécutez `wsl --shutdown` et compactez le fichier avec `diskpart`.
C'est la cause la plus fréquente du « mon disque C est plein et je ne trouve pas ce qui l'occupe » sur une machine de développement. Les outils d'analyse montrent un unique fichier de 80 Go et vous hésitez à y toucher — à raison, car le supprimer emporterait tout votre environnement Linux. Ce guide explique ce qu'est ce fichier, comment le réduire sans risque et comment éviter qu'il regonfle.
À retenir
- WSL2 stocke tout votre système de fichiers Linux dans un seul disque virtuel `ext4.vhdx` qui grossit mais ne rétrécit jamais automatiquement.
- Le fichier se trouve en général dans `%LOCALAPPDATA%\Packages\<distribution>\LocalState\ext4.vhdx` ; Docker Desktop utilise son propre `docker_data.vhdx`.
- L'ordre compte : supprimez d'abord les données À L'INTÉRIEUR de la distribution, puis compactez le disque virtuel.
- Pour Docker, `docker system prune -a --volumes` libère souvent à lui seul des dizaines de gigaoctets.
- `wsl --shutdown` est obligatoire avant le compactage : un fichier en cours d'utilisation ne peut pas être réduit.
- Depuis WSL 2.0, ajouter `sparseVhd=true` dans `.wslconfig` permet au disque de se réduire de lui-même.
Pourquoi il grossit sans jamais rétrécir
WSL2 est une véritable machine virtuelle et conserve tout le système de fichiers Linux côté Windows dans un seul fichier : `ext4.vhdx`. C'est un disque virtuel à expansion dynamique. Avec 5 Go de données à l'intérieur, le fichier occupe environ 5 Go ; écrivez 60 Go et il monte à 60 Go.
Le problème apparaît dans l'autre sens. Supprimez une image Docker de 50 Go à l'intérieur et Linux signale l'espace comme libre — mais le fichier VHDX côté Windows garde exactement la même taille. Le format marque simplement les blocs libérés comme inutilisés sans raccourcir physiquement le fichier. Résultat : `df -h` affiche beaucoup de place à l'intérieur tandis que Windows annonce un disque C plein.
Docker Desktop sur le moteur WSL2 double l'effet. Docker installe sa propre distribution et conserve images, couches et volumes dans un `docker_data.vhdx` distinct. Sur une machine de développement utilisée depuis deux ans, ces deux fichiers dépassent facilement 100 Go à eux deux.
D'abord l'intérieur : que supprimer avant de compacter
Le compactage ne fait pas de miracle ; il ne rend que les blocs réellement libres à l'intérieur. La première étape est donc toujours le nettoyage de la distribution. Sur les systèmes Debian et Ubuntu, `sudo apt clean` supprime le cache des paquets téléchargés et `sudo apt autoremove --purge` retire les dépendances dont plus aucun paquet n'a besoin.
Avec Docker, c'est là que se trouve le vrai gain. `docker system df` détaille l'espace occupé par les images, les conteneurs, les volumes et le cache de construction. `docker system prune -a --volumes` supprime tout ce qui n'est pas utilisé — attention, cela efface aussi les volumes inutilisés : exportez d'abord toute base de données à conserver.
Le cache de construction est souvent le poste le plus lourd et le plus facile à oublier. `docker builder prune -a` ne vise que ce cache et laisse vos images intactes. Sur les projets Node.js, les dossiers `node_modules` à l'intérieur de WSL ainsi que `~/.npm` et `~/.cache` ajoutent leurs propres dizaines de gigaoctets.
Compacter : rendre l'espace à Windows
Une fois l'intérieur nettoyé, il faut raccourcir physiquement le disque virtuel. La condition préalable est que WSL soit totalement arrêté : exécutez `wsl --shutdown` dans PowerShell et fermez Docker Desktop. Si un processus tient encore le fichier, le compactage échoue avec une erreur d'accès refusé.
Dans une PowerShell administrateur, lancez `diskpart` et exécutez ces étapes dans l'ordre : `select vdisk file="C:\Users\nom\AppData\Local\Packages\...\ext4.vhdx"`, puis `attach vdisk readonly`, puis `compact vdisk`, et enfin `detach vdisk`. Le montage en lecture seule est important ; monté en écriture, le compactage ne s'exécute pas.
Sur les systèmes disposant des composants Hyper-V, il existe une alternative en une ligne : `Optimize-VHD -Path "chemin\ext4.vhdx" -Mode Full`. Cette applet manque dans les éditions Home de Windows, ce qui fait de `diskpart` le choix par défaut le plus sûr. À la fin, la taille du fichier doit être proche de l'occupation réelle à l'intérieur.
Éviter que cela recommence
Avec WSL 2.0, Microsoft a ajouté la prise en charge des disques virtuels creux (sparse). Ajoutez `sparseVhd=true` sous une section `[experimental]` dans `%USERPROFILE%\.wslconfig`, exécutez `wsl --shutdown`, et les disques créés ensuite commencent à se réduire seuls dès que de l'espace se libère à l'intérieur. Pour convertir une distribution existante, utilisez `wsl --manage <distribution> --set-sparse true`.
Deux habitudes aident en plus. D'abord, purger régulièrement le cache de construction Docker — `docker builder prune -a` une fois par mois suffit sur la plupart des machines. Ensuite, garder les gros jeux de données côté Windows et y accéder via `/mnt/c` plutôt que de les stocker dans le système de fichiers WSL, pour que ces données ne gonflent jamais le disque virtuel.
Repérer ces fichiers est un problème en soi, car ils apparaissent comme un fichier unique et ne ressortent pas dans les outils qui raisonnent par taille de dossier. Le module Gros fichiers (Large Files) de Disk Mop classe les plus gros fichiers d'un disque par taille, et `ext4.vhdx` figure généralement dans les trois premiers. La vue Disk Treemap montre ce même fichier comme un rectangle occupant une large part de l'écran.
Questions fréquentes
Puis-je simplement supprimer ext4.vhdx ?
Non. Ce fichier EST votre distribution WSL : paquets installés, projets et bases de données s'y trouvent tous. Le supprimer retire complètement la distribution. La bonne méthode consiste à nettoyer le contenu puis à compacter le disque.
Le compactage met-il mes données en danger ?
Non. `compact vdisk` ne fait qu'écarter les blocs inutilisés du fichier de disque virtuel ; il ne touche pas aux données du système de fichiers. Il reste toutefois prudent d'arrêter proprement WSL avec `wsl --shutdown` et de disposer d'une sauvegarde des projets critiques.
Où se trouve le fichier de Docker Desktop ?
Dans les versions actuelles, à l'emplacement `%LOCALAPPDATA%\Docker\wsl\disk\docker_data.vhdx`. Les versions plus anciennes installent une distribution WSL distincte `docker-desktop-data`, avec le fichier dans `%LOCALAPPDATA%\Docker\wsl\data\ext4.vhdx`.
Avec sparseVhd activé, faut-il encore compacter ?
Le plus souvent non, mais les disques creux récupèrent l'espace progressivement et non instantanément. Après une suppression très volumineuse, un compactage manuel reste plus rapide. Notez aussi que `sparseVhd` ne s'applique automatiquement qu'aux disques créés après son activation.
Verdict
Que WSL2 et Docker remplissent le disque n'est pas un défaut : c'est le comportement des disques virtuels. La règle est simple : nettoyer l'intérieur, arrêter WSL, compacter le disque. Ces trois étapes récupèrent 20 à 60 Go d'un coup sur la plupart des machines de développement.
Pour une solution durable, activez `sparseVhd=true` et purgez régulièrement le cache de construction. Si vous voulez voir ce qui s'est accumulé ailleurs, les modules Gros fichiers et Disk Treemap de Disk Mop révèlent ce genre de situation en quelques secondes.
Découvrez quels autres fichiers géants occupent votre disque
Paiement unique pour un accès à vie à toutes les fonctionnalités. Pas d'abonnement, pas de frais cachés.
Téléchargez Disk Mop maintenant