Windows / WSL2 の容量を減らす方法

2022/07/12に公開

気になったアプリはつい入れちゃうワガママ生活を送っていたら no space left なるディスクエラーが出てくるようになってきたのでダイエットしていこうという記事です。

Windows の容量を削減

まずは Windows から削除していきましょう。行えることとしては次の 2 つになります。

  • アプリをアンインストール
  • 不要で容量を食うファイル群を削除する

アプリをアンインストールすることから始めましょう。設定を開き、「システム > 記憶域 > インストールされているアプリ」を開きます。

サイズ順にソートして容量を食っている不要なアプリを見つけ次第、アンインストールします。

次にアプリ以外にも削除できるものがありそうだったので、ディスク解析アプリを用いて容量を占有しているものを見つけます。今回はディスク解析アプリの中でも高速に解析してくれるWizTreeを使います。以下からインストールできます。
https://diskanalyzer.com

左上のスキャンを押すと解析を開始します。筆者の環境では約5秒でCドライブを解析してくれました。

色々削除してみたら WSL2 の仮想ディスクにかなり容量を取られていることが分かりました。それでは次は WSL のダイエットをしていきます。

WSL2 内の容量を削減

Docker の容量の削減

WSL で容量を食い荒らす筆頭として Docker があります。またビルドし直せばいいのでサクッと消してしまいましょう。

$ docker system df                # Docker の使用容量や割合の表示
$ docker ps -a                    # コンテナの表示
$ docker images                   # イメージの表示
$ docker image prune              # 使っていないイメージの削除
$ docker system prune             # すべてを全削除
$ docker builder prune            # ビルドキャッシュの全削除
$ docker rm $(docker ps -aq)      # コンテナの全削除
$ docker rmi $(docker images -q)  # イメージの全削除
$ docker rmi <Image ID>           # 各イメージの削除

ディスク解析ツールを使う

Linux には標準でディスクの使用量に関する情報を返す du コマンドがありますが、今回はより直感的に表示してくれる dust コマンドを使ってみます。
https://github.com/bootandy/dust

Rust の crate としてパッケージ配信されているので Rust が入っていれば以下のコマンドでインストールできます。

$ cargo install du-dust

dust と叩くだけでカレントディレクトリ下で容量を食ってるディレクトリをソートして表示してくれます。

これを使って不要でサイズの大きいものから削除していきます。

cargo-clean-all

Rust のプロジェクトでは target ディレクトリに各クレートがビルドされた結果が入っています。これが非常に莫大になりがちで私のは 30 GB もありました!

なので開発しなくなったプロジェクトは全て cargo clean で全部消したいところですが、あるディレクトリ以下で全部やってくれる cargo-clean-all というパッケージがあります。

https://github.com/dnlmlr/cargo-clean-all

$ cargo install cargo-clean-all
$ cargo clean-all

cargo clean-all でカレントディレクトリ以下のビルドを消せます。これで 30 GB も空いて大分ゆとりになりました!

WSL2 のディスクサイズを最適化する

実は WSL 内の容量を減らせても、Windows から見たら解放されていません。なのでディスクイメージに対して最適化して空き容量をゲットします。最適化するには PowerShell を起動して以下のようなコマンドを叩きます。

> wsl --shutdown
> diskpart
# Diskpart のウィンドウに移動する
# 各自で適切なディスクイメージへのパスを選択してください
> select vdisk file="C:\Users\ユーザー名\AppData\Local\Docker\wsl\data\ext4.vhdx"
> attach vdisk readonly
> compact vdisk
> detach vdisk
> exit

これで Windows のストレージの残り容量が増えていたら成功です!

WSL を C ドライブから移動する

それでもやはり WSL は大きいもの、私のは 210 GB くらいありました。そうなるとCドライブではなく他のドライブ上で管理した方がやりやすいときがあります。

やることとしては WSL のファイルシステムを tarball で固めてどこかに保存してから別の場所にファイルシステムを構築します。

$ wsl -l -v
$ wsl --export <DistributionName> <FileName>
$ wsl --unregister <DistributionName>
$ wsl --import <DistributionName> <InstallLocation> <FileName>
# デフォルトしか Docker が起動しないらしいので
$ wsl --setdefault <DistributionName>

他の選択肢: 爆破する

不要なアプリがたくさん入っていたり、謎な場所に何かをした残骸が残ってあったりすると、管理するのが大変になってきます。こんなとき、ちまちま消したり整理したりするより、1度クリーンインストールしてしまえば、1石で2羽を狩ることができるというものです。
必要なファイルなどはバックアップを取り、入れ直したいアプリはメモっておくことをおすすめします。

Windows を爆破する

クリーンインストールして、まっさらな気分でもう一度入れ直してみましょう!そういう方法もあります。
https://answers.microsoft.com/en-us/windows/forum/all/how-to-perform-a-clean-install-or-reinstall-of/bf72eda1-18f6-4839-9127-2b5389d9aa48

WSL を爆破する

アプリのアンインストールと同様にして WSL のイメージを削除することができます。再インストールすれば爆破完了です!WSL はこうやってお手軽に爆破できるのも良い点の1つだと思います。

参考文献

Discussion