【ITニュース解説】The Friendly Guide: "Why WSL is Eating My C: Drive (and How to Get it Back)"

2025年09月07日に「Dev.to」が公開したITニュース「The Friendly Guide: "Why WSL is Eating My C: Drive (and How to Get it Back)"」について初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

ITニュース概要

WSL利用時、Cドライブの容量が圧迫される問題は、kcoreの表示が誤解を招くことが原因。実際には、WSLの仮想ハードディスク(.vhdx)が肥大化し、削除しても自動で縮小されない。解決策は、WSL内で不要なファイルを削除後、管理者権限でPowerShellからdiskpartを起動し、.vhdxファイルをcompactすることで、Cドライブの空き容量を回復できる。

ITニュース解説

Windows Subsystem for Linux(WSL)を利用していると、Cドライブの空き容量が急激に減少することがある。一見すると、\\wsl.localhost\Ubuntu\proc\kcore というファイルが異常な容量(例えば120TB)を占有しているように見えるかもしれない。しかし、これは誤解を招きやすい現象だ。

実際には、kcore ファイルはLinuxカーネルのメモリマップを表す仮想ファイルであり、そのサイズは64ビットシステムの理論上の上限を示すもので、実際のディスク使用量ではない。問題の根本原因は、WSLの仮想ハードディスクファイル(.vhdx)にある。WSLで使用するすべてのデータ(Linuxファイル、Dockerイメージ、npmパッケージなど)は、Cドライブ上の単一の大きな仮想ハードディスクファイルに保存される。このファイルは、データを追加するにつれてサイズが大きくなるが、ファイルを削除しても自動的に縮小することはない。そのため、WSL内でDockerの system prune を実行して空き容量を増やしても、WindowsのCドライブの空き容量には反映されない。

この問題を解決するには、以下の2つのステップが必要となる。まず、WSL環境内の不要なファイルを削除し、次に仮想ハードディスクファイルを圧縮して、解放されたスペースをWindowsに返す必要がある。

ステップ1では、WSL環境内で不要なファイルを削除する。Dockerを使用している場合は、まずDockerイメージのサイズを確認する。docker images -a --format "{{.ID}}\t{{.Repository}}\t{{.Tag}}\t{{.Size}}" | sort -k4 -h コマンドを実行すると、すべてのDockerイメージがサイズ順に表示される。不要な大きなイメージがあれば、docker rmi <image_id> コマンドで削除する。

Node.jsプロジェクトを扱っている場合は、node_modules フォルダが大きな容量を占めていることが多い。古いプロジェクトの node_modules フォルダは、rm -rf node_modules コマンドで削除できる。

さらに、ncdu というコマンドラインツールを使用すると、ファイルシステム全体をスキャンして、最も大きなディレクトリを効率的に見つけることができる。sudo apt install ncdu コマンドで ncdu をインストールした後、sudo ncdu / コマンドを実行すると、ファイルシステム全体がスキャンされる。スキャンが完了すると、矢印キーでディレクトリを移動し、大きなフォルダを特定して、不要なファイルを削除できる。

ステップ2では、仮想ハードディスクファイルを圧縮する。まず、WSLのディスクファイル(ext4.vhdx)の場所を特定する。通常、C:\Users\<YourUsername>\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_...\LocalState\ にある。CanonicalGroupLimited.UbuntuonWindows_ の後の文字列は、システムによって異なる。

次に、すべてのWSLプロセスを停止する必要がある。管理者権限でPowerShellまたはコマンドプロンプトを開き、wsl --shutdown コマンドを実行する。

その後、diskpartユーティリティを使用してディスクファイルを圧縮する。管理者ウィンドウで diskpart コマンドを実行し、select vdisk file="<FULL_PATH_TO_YOUR_EXT4.VHDX>" コマンドでWSLのディスクファイルを選択する。<FULL_PATH_TO_YOUR_EXT4.VHDX> は、先ほど特定したext4.vhdxファイルのフルパスに置き換える。最後に、compact vdisk コマンドを実行すると、ディスクファイルの圧縮が開始される。このプロセスには数分かかる場合がある。完了後、Cドライブの空き容量が増加しているはずだ。

これらの手順により、WSLが消費しているように見えるディスク容量を効率的に回復させることができる。kcore ファイルの誤解を解き、仮想ハードディスクファイルの特性を理解し、適切な手順を踏むことで、Cドライブの容量不足を解消できる。

関連コンテンツ