そもそも、WSL2を使っている環境でなぜディスク容量が枯渇するのか
WSL2では、仮想HDDを使用して環境を立てています。この仮想HDDはHyper-Vに使われているものと同じ仕組みのもので、(使ったことある方は知っているかもしれませんが)ディスクの圧縮を手動で行わないとディスクを使った分だけ容量取られます。実際、自分のWSL環境の仮想HDDの容量は130GBにも膨らんでいました...
では、どのように圧縮するのか
まず、WSL2環境を終了
めんどくさい方はwsl --shutdown
(WSL環境をすべて終了)、きちんとやりたい方はwsl -l -v
で起動しているインスタンスを確認後、wsl -t Ubuntu-18.04
のような形でインスタンス名を指定して個別に終了させます。
この際、Explorerやターミナルが裏で働いて勝手にWSLインスタンスが再起動しちゃう、ということがあり得るので、注意しましょう。 (確実に終了されてないと次のステップで怒られます)
仮想ディスクの場所を探る
まず、Explorer等でC:\Users\hoge\AppData\Local\Packages\
(hogeを自分のユーザー名に変更してください)にアクセスします。その後、そのフォルダの中にWSLのLinux環境っぽいフォルダが入っているので (Ubuntuの場合、CanonicalGroupLimited
から始まるフォルダ、Debianの場合、TheDebianProject
から始まるフォルダ、Pengwinの場合、WhitewaterFoundryLtd.Co
から始まるフォルダ)、そのフォルダを開け、その中のLocalState
というフォルダに行くと.vhdx
という拡張子のファイルがあると思います。それが仮想HDDです。パスをメモしておきましょう。
DISKPARTを使って仮想ディスクを圧縮する
コマンドプロンプトを開き、DISKPART
と入力します。その後、select vdisk file="C:\Users\hoge\AppData\Local\Packages\hogehoge\LocalState\hoge.vhdx"
のような形式で仮想HDDのパスを登録します (file=
のあとは各自変更してください)。
そしたら、compact vdisk
と入力して、圧縮作業を行います。この際、DiskPart has encountered an error: The process cannot access the file because it is being used by another process.
のような形で別のプロセスに使用されているというエラーが出たら、WSL2インスタンスが正常に終了しているか再度確認してください。