WindowsのwslとDockerで容量不足になったときにやること

Tech

Hyper-VでWSLの仮想ドライブのサイズを最適化する

業務でWindows PCでWSLやDockerを使っていると容量不足になることがあります。

毎回対処法を忘れるので備忘録として書きます。


容量不足の原因がWSL / Docker由来なのか確認する

まず、現在のディスク使用状況を確認します。

powershellで以下のコマンドを使用して、ディスク使用量を確認できます。

Get-ChildItem C:\ -Recurse -Force -ErrorAction SilentlyContinue | 
    Sort-Object Length -Descending | 
    Select-Object FullName, @{Name="Size(GB)";Expression={[math]::round($_.Length /1GB, 2)}} -First 20

このコマンドは、Cドライブのファイルをサイズ順に上位20個表示します。

ここにdocker_data.vhdxまたはext4.vhdxというファイルがある場合、WSLやDockerのディスク容量が原因です。
両方ある場合もあります。

Docker内の不要なデータを削除する

Dockerでは、使用していないイメージやコンテナが貯まっていくことがあります。

以下のコマンドで不要なものを一気に削除します。

docker system prune -a --volumes

これだけでも容量を減らすことができますが、減らない場合は、次のステップの 仮想ドライブのサイズを最適化する 必要があります。

WSLの仮想ドライブのサイズを最適化する

下記の引用にある通り、WSL(DockerもWSLを利用)では使い方に合わせて仮想ドライブのサイズが自動的に増えていきます。

WSL 2 では、ストレージのニーズに合わせてこれらの VHD ファイルのサイズが自動的に変更されます。 - Microsoft

一方で、増えてしまったサイズは自動的に減らすことができません。

そのため、手動でサイズを減らす必要があります。

WSLを停止する

WSLの仮想ドライブのサイズを変更するためには、まずWSLを停止する必要があります。

下記コマンドをPowershellの管理者権限で実行して、WSLを停止します。

wsl --shutdown

Hyper-Vの確認

次に Hyper-V が使えるか確認します。

検索バーに「Windowsの機能の有効化または無効化」と入力し、Windowsの機能の有効化または無効化を開きます。

そしてHyper-Vが使えるか(チェックが入っているか)確認します。

Hyper-Vのチェックボックスがオフになっていて、オンに変更した場合は再起動が必要です。

Hyper-Vを使って仮想ドライブのサイズを最適化する

PowerShellを管理者権限で起動し、以下のコマンドを実行して仮想ドライブのサイズを最適化します。

Optimize-VHD -Path "{仮想ドライブのパス}" -Mode Full

仮想ドライブのパスは、最初に確認したdocker_data.vhdxまたはext4.vhdxのパスを指定してください。

これで、仮想ドライブのサイズが最適化され、ディスク容量を節約できます。

(数ヶ月放置してから実行したら200ギガ以上減った...)


参考

https://learn.microsoft.com/ja-jp/windows/wsl/disk-space
https://dev.classmethod.jp/articles/windows-virtual-disk-compression/
https://zenn.dev/haretokidoki/articles/49dacc3516c441