アルゴリズム弱太郎

Twitter @01futabato10

【WSL2】容量が圧迫されているのでディスクスペースを解放したい

この記事は IPFactory Advent Calendar 2022 の 1 日目の記事です。

qiita.com


こんにちは、futabatoです。

WSL2をメインの作業場にしているのですが、ストレージがパンパンになって不要な docker image などを削除してもスペースが空いてくれない問題があったので解決策のメモを残しておきます。

github.com

まずは管理者権限で PowerShell を開いて WSL をシャットダウンします。

PS: > wsl --shutdown

次に、WSL の .vhdx ファイルの Path を確認します。

WSL2はファイルシステム.vhdx ファイルに格納しているようですが、WSL内のファイルを削除しても .vhdx の解放された領域を再利用せずにどんどん肥大化していくようです。
この .vhdx ファイルを最適化することがディスクスペースの解放の目標になります。

PS: > ls $HOME\AppData\Local\Packages\

上記コマンドを実行すると、Canonical から始まるディレクトリが存在すると思います。
なお、ディレクトリ名はディレクトリビューションごとに若干違い、私は Ubuntu-20.04 をインストールしているので、CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgscという名前でした。
Ubuntu をインストールしている人は少なくとも Ubuntu-20.04 ではなく Ubuntu でしょうし、Kali Linux をインストールしている人は Kali Linux かもしれません。
PowerShell は Tab 補完が効くので、ca を入力した時点で補完してくれると思います。

Canonical から始めるディレクトリの中に LocalState というディレクトリがあるのでそこまで移動しましょう。

PS: > cd $HOME\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\

ここで ls コマンドを叩くと .vhdx ファイルが存在しているはずです。 pwd コマンドで Path を出力しておきましょう。

diskpartコマンドで DISKPART コマンド インタプリタを起動します。

PS: > diskpart

上記コマンドを実行して数秒待つと、DISKPARTT> から始めるインタプリタに切り替わります。

diskpart interpreter

まずは .vhdx ファイルを選択します。Path には先ほど pwd コマンドで出力した Path を貼り付けるとよいでしょう。

DISKPART> select vdisk file=<path/to/.vhdx>

上記コマンド実行後、.vhdx ファイルが選択できている旨を確認してください。

DiskPart により、仮想ディスク ファイルが選択されました。

以下の3つのコマンドを順に実行します。

1. Attach

DISKPART> attach vdisk readonly

正常に実行が完了すれば以下のような出力が得られます。

  100% 完了しました

DiskPart により、仮想ディスク ファイルがアタッチされました。

2. Compact

DISKPART> compact vdisk

正常に実行が完了すれば以下のような出力が得られます。

  100% 完了しました

DiskPart により、仮想ディスク ファイルは正常に圧縮されました。

3. Detach

DISKPART> detach vdisk

正常に実行が完了すれば以下のような出力が得られます。

DiskPart により、仮想ディスク ファイルがデタッチされました。

.vhdxファイルを最適化したのち detach すれば、exit コマンドで DISKPART コマンドインタプリタを終了しましょう。

DISKPART> exit

Windows の設定よりストレージを確認すると、WSL2で圧迫されていたディスクスペースが解放されているでしょう。


最後までご覧いただきありがとうございました。

この記事は IPFactory Advent Calendar 2022 の 1 日目の記事です。

qiita.com

2日目は n01e0による 花金です。

feneshi.co

今年も IPFactory の Advent Calendar がありますが、ほとんど埋まっておらずピンチです。命のリレーをしていきます。よろしくどうぞ。