WSLで使っているvhdxファイルのサイズを削減する

WSLで使用されているvhdxファイルのサイズを縮小する。

実行は自己の責任で

失敗しても責任は取れません。よく確認し、バックアップをとり、実行すべきです。

調べる

最初にヒットしたページのOptimize-VHDは使えない。

windowsのproエディション専用らしい。

もう少し見ていると、こちらのページのコマンドそのままでOKであることがわかった。感謝

[wsl2] ディスク容量が満タンで困った!><でも、Optimize-VHDなんて存在しないとき - Qiita
Summary(概要)wsl2を使っていると、ホストOSディスク容量がだんだん圧迫されていきます。特に顕著なのは、大きなファイルをアップロードしたり大容量データを生成した後。そして、wsl上の…

準備

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ドキュメント:

diskpart
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でも使えてほしい。公式ページは以下:

BittenBaum - smdn.jp
BittenBaumはフォルダやファイルの容量を円グラフにして視覚的に見るためのツールです。フォルダやファイルがどれくらいの容量を占めているかを簡単に把握することができ、不要なファイルや巨大なファイルを簡単に探しだすことができます。

またimageをビルドしていくたびに増えるんだろうなあと思うと若干面倒さがある。VirtualBoxで拡張はした覚えがあるが縮小も必要なのだなと実感。

以上です。お読みいただきありがとうございました。

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