結論
WSLを使ってる場合はdocker system purne
するだけだと本体ストレージに反映されないので、仮想ディスク(vhdx)を圧縮する必要がある!
実行環境
- Windows 11
- WSL2(Hyper-V付き)
- Docker Desktop
前提
-
docker system prune
等で不要なイメージなどを削除済み。
1. 容量圧迫しているファイルを探す
まずは、ストレージを圧迫しているファイルを特定します。DiskInfoが個人的に見やすかったです。
ここで、容量を大きく使っているファイルが .vhdx だった場合は、仮想ディスクが圧縮されていないことが原因です。
僕の場合はここにありました↓
C:\Users\ユーザー名\AppData\Local\Docker\wsl\disk\docker_data.vhdx
2. Docker DesktopとWSL2を停止する
WSL2やDocker Desktopが起動していると圧縮に失敗するので、事前に停止しておきます。
Docker Desktopはアプリから停止します。
左下の三点リーダーアイコン>Quit Docker Desktopで停止できます。
WSL2はPowerShellからwsl --shutdown
を実行します。
3.Optimize-VHDで圧縮を行う
PowerShellを管理者権限で実行します。
コンソールを開いたら、下記のようにOptimize-VHD
コマンドを実行します。
Optimize-VHD は、WSL2で使用されている .vhdx 仮想ディスクの空き領域を圧縮するためのPowerShellコマンドです。
圧縮対象のパスには、1で見つけたファイルのフルパスをメモっておいて貼り付けてください。
PS > Optimize-VHD {圧縮対象のパス} -Mode Full
このコマンドを実行すると対象の仮想ディスクが圧縮されます。
実際にDiskInfoでもう一度確認してみると、80GBもストレージを開けることに成功しました!