Windows11 Proで、Docker Desktop は使わず、Ubuntu-20.04 上に docker を入れている。
docker image prune
docker volume prune
docker continer prune
docker system prune
上記諸々して、 docker system df をすると、減ってくれているはずが、
WSLの容量は引き続きパンパンと出る。
Docker Desktop だと、下記のOptimize-VHDの方法があるようだが、
apt-get で入れた Docker では使えなさそう。
DockerやWSLをすべて破壊するのも嫌過ぎる…。
という状況で、調べた結果、DiskPart 使った方法で無事うまく容量を空けることができた。
手順
WSLのシャットダウン
管理者権限でPowerShellを開く。
まずは、
PS > wsl --shutdown
で、WSLをシャットダウンする。
該当の .vsdx
ファイルを探す
PS > cd $HOME\AppData\Local\Packages\
PS > ls
Packages の配下に Canonical
から始まる Ubuntu
を含むディレクトリがあることを確認する
とりあえず Ca 補完すればOK
PS > cd CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc
ここの配下に、 LocalState
というディレクトリがあり、その中に、 .vhdx
ファイルがあることを確認。
PS > cd LocalState
PS > ls
Pathをコピーする
VHDファイルの物理サイズを減らす
Path をコピーしたら、 DISKPART を起動
PS > diskpart
起動したら、 select -> attach -> compact -> detach の順に行う。
DISKPART> select vdisk file="コピーした.vhdxのパス"
DiskPart により、仮想ディスク ファイルが選択されました。
DISKPART> attach vdisk readonly
100% 完了しました。
DiskPart により、仮想ディスク ファイルがアタッチされました。
DISKPART> compact vdisk
DiskPart により、仮想ディスク ファイルは正常に圧縮されました。
DISKPART> detach vdisk
DiskPart により、仮想ディスク ファイルがデタッチされました。
DISKPART> exit
容量が空いたことを確認
上記実行で、Cドライブの容量が空いたことを確認できた。
Activeなdocker ボリュームやイメージ等は吹っ飛んでいないことも確認できた。
補足
インストールされているアプリから確認すると、775GBもUbutu-20.04が使っている状態だったので、compact vdisk は30分ぐらい?待った。ひぃ。
docker system prune
とかで、dockerで使われたものの掃除自体はできているらしいが、
拡張されたものは、確保されたままになっちゃうということっぽい。。
Cドライブがパンパンになってからこれをしたけど、パンパンになるより前に、ある程度不要なイメージ、builder cache とかは適宜消してあげておく方がよいという感じっぽい。
参考