WSLで使用されているvhdxファイルのサイズを縮小する。
実行は自己の責任で
失敗しても責任は取れません。よく確認し、バックアップをとり、実行すべきです。
調べる
最初にヒットしたページのOptimize-VHDは使えない。
windowsのproエディション専用らしい。
もう少し見ていると、こちらのページのコマンドそのままでOKであることがわかった。感謝
準備
3点くらいの準備が必要かと思う。
必要なファイルのバックアップの作成。不要ならばしなくてもいい。
vhdxのサイズを縮小できるようにそもそもこの中身の不要ファイルを削除する。docker system df
で何が容量を占拠しているか確認する。自分の場合はBuild Cache
が20GBほどたまっていた。
なので、docker builer prune
でこれらを削除した。docker system prune
が最も削減できるが、volume, image, containerなどで使っていないものすべてが削除されるので、使う際は注意が必要。
PCでvhdxファイルを使っているソフトウェアを終了させる。ほとんどWSLなはずなので、次のコマンドをPowerShellで実行してWSLを終了させる:
wsl --shutdown
以降はPowerShellで実行していく。
diskpartを使う
diskpartはWindowsに付属しているPCのドライブ管理に使うインタープリター。
diskpart
コマンドをパラメータなしで起動すると、新しいウィンドウでそのインタープリターが起動する。
# 新しく開かれたdiskpartウィンドウで行う
select vdisk file="C:\path\to\file.vhdx"
attach vdisk readonly
compact vdisk
detach vdisk
exit
file=
の右側にサイズを縮小したいvhdxファイルのフルパスを指定すればいい。ダブルクォーテーションで挟む。
あとの4行は順番に行っていけばいい。compactが時間がかかるかもしれない。自環境では5分くらいかかった気がする。
diskpartドキュメント:
PC再起動
サイズを縮小できたーと思ってDockerを起動させるとisocache ...中略... the network name cannot be found
といったエラーで起動しなくなった。
なぜそんなメッセージ?と思い、これはやばいかもと思ったが、ファクトリーリセットする前に一応PC再起動してみるかと思い、PCを再起動してもう一度Dockerを起動させたところ、起動に成功した!
ファクトリーリセットはimageの再ビルドが必要になるし全て消えるしで行いたくないので非常に安心した。
おわり
PC再起動の前にWSLで動いているubuntuのvhdxファイルもサイズを縮小を行った。結果としては2つのファイルの合計で100GBほどサイズが縮小されたので満足いく結果となった。Dockerのエラーが出たときはファクトリーリセット案件か?と思ったが再起動で直ってよかった。原因があまりはっきりしてないのは悔やまれる。
PCのストレージ容量の確認はBittenBaumというフリーソフトを使った。Windows10でも使えて非常に助かっている。11でも使えてほしい。公式ページは以下:
またimageをビルドしていくたびに増えるんだろうなあと思うと若干面倒さがある。VirtualBoxで拡張はした覚えがあるが縮小も必要なのだなと実感。
以上です。お読みいただきありがとうございました。