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

公開日:
目次

WSL(Windows Subsystem for Linux)や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というファイルがある場合、DockerやWSLのディスク容量が原因です。
Image from Gyazo

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

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

以下のコマンドで不要なものを一掃しましょう。

docker system prune -a --volumes

これにより、不要なデータを一気に削除できます。

ただしこれだけだと先ほどのdiskの容量が減らない場合があります。

その場合は、下記の仮想ドライブのサイズを最適化する必要があります。

DockerおよびWSLのディスク容量不足の対処法

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

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

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

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

WSLを停止する

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

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

wsl --shutdown

Hyper-Vの確認

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

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

Hyper-Vが使えるか確認します。
Image from Gyazo

もしHyper-Vのチェックボックスがオンになっていない場合は、オンにしてください(再起動が必要です)。

ない場合、あるいはHyper-Vを使いたくない場合は「Diskpartを使って仮想ドライブのサイズを最適化する」に進んでください。

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

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

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

{仮想ドライブのパス}は、先ほど確認したdocker_data.vhdxまたはext4.vhdxのパスを指定してください。

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

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

Hyper-Vを使わない場合は、Diskpartを使って仮想ドライブのサイズを最適化します。

下記コマンドをPowershellの管理者権限で実行して、Diskpartを起動します。

diskpart

次に、以下のコマンドを実行して、仮想ドライブのサイズを最適化します。

select vdisk file="{仮想ドライブのパス}"
attach vdisk readonly
compact vdisk
detach vdisk
exit

{仮想ドライブのパス}は、先ほど確認したext4.vhdxのパスを指定してください。

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

参考