この記事は IPFactory Advent Calendar 2022 の 1 日目の記事です。
こんにちは、futabatoです。
WSL2をメインの作業場にしているのですが、ストレージがパンパンになって不要な docker image などを削除してもスペースが空いてくれない問題があったので解決策のメモを残しておきます。
ストレージの余裕は心の余裕 pic.twitter.com/r3DdID3nXY
— ふたばと (@01futabato10) 2022年10月7日
まずは管理者権限で 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>
から始めるインタプリタに切り替わります。
まずは .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 日目の記事です。
2日目は n01e0による 花金です。
今年も IPFactory の Advent Calendar がありますが、ほとんど埋まっておらずピンチです。命のリレーをしていきます。よろしくどうぞ。