概要
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 ドライブの容量が減ってきたときは一度確認してみるとよいと思います。


コメント