WSL の ext4.vhdx が 100GB 超えたので DiskPart で圧縮した(111GB → 60GB)

VSCode
スポンサーリンク

概要

WSL(Windows Subsystem for Linux)を日常的に使っていると、気づかないうちに Ubuntu の仮想ディスクである ext4.vhdx が肥大していることがあります。

私の環境でも、以下のファイルが 100GB を超えていました。

C:\Users\xxxxx\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_xxxxxxxxxxxxx\LocalState\ext4.vhdx

WSL は Linux 側でファイルを削除しても、Windows 上の ext4.vhdx が自動では小さくならないことがあります。
今回は DiskPart を使って ext4.vhdx を圧縮し、111GB → 60GB まで削減できたので、その手順を備忘としてまとめました。

流れについて

先に結論を書くと、以下の流れで圧縮できます。

  • WSL を完全に停止する
  • DiskPart で ext4.vhdx を readonly で attach
  • compact vdisk を実行
  • 最後に detach

今回の結果は以下の通りです。

  • 圧縮前: 111,429,025,792 bytes(約111GB)
  • 圧縮後: 60,842,573,824 bytes(約60GB)

およそ 50GB 以上削減できました。

ext4.vhdx のサイズを確認

まずは PowerShell で対象ファイルのサイズを確認します。

dir C:\Users\xxxxx\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_xxxxxxxxxxxxx\LocalState\ext4.vhdx

実行結果は以下でした。

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        2026/03/06     16:46   111429025792 ext4.vhdx

この時点で、WSL の仮想ディスクがかなり大きくなっていることが分かります。

Optimize-VHD が使えなかった

最初は PowerShell の Optimize-VHD を使おうとしましたがエラーになりました

Optimize-VHD -Path C:\Users\xxxxx\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_xxxxxxxxxxxxx\LocalState\ext4.vhdx -Mode Full
Optimize-VHD : 用語 'Optimize-VHD' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。

今回は DiskPart を使う方法で対応しました。

DiskPart で ext4.vhdx を圧縮

まず WSL を停止します。

wsl --shutdown
wsl -l -v

停止後、以下のように Stopped になっていることを確認します。

NAME      STATE           VERSION
* Ubuntu    Stopped         2

その後、DiskPart を起動します。

diskpart

対象の VHDX を選択します。

select vdisk file="C:\Users\xxxxx\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_xxxxxxxxxxxxx\LocalState\ext4.vhdx"

読み取り専用で attach します。

attach vdisk readonly

その後、圧縮します。

compact vdisk

最後に detach して DiskPart を抜けます。

detach vdisk
exit

圧縮結果

圧縮後に再度サイズを確認します。

dir C:\Users\xxxxx\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_xxxxxxxxxxxxx\LocalState\ext4.vhdx
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        2026/03/06     16:55    60842573824 ext4.vhdx

圧縮前後は以下の通りです。

状態 サイズ
圧縮前 111GB
圧縮後 60GB
削減量 約50GB

まとめ

WSL の ext4.vhdx は Linux 側でファイルを削除しても自動では縮小されないことがあります。

そのため、ディスク容量が増えてきた場合は DiskPart の compact vdisk を使うことで、未使用領域を回収できます。

WSL を長く使っている環境では数十GB以上削減できることもあるため、C ドライブの容量が減ってきたときは一度確認してみるとよいと思います。

VSCode小技
スポンサーリンク
インフラエンジニア|パイナップル星人 ブログ

コメント

タイトルとURLをコピーしました