WSL2の仮想ディスクサイズを減らしてWindowsのディスク容量を増やす方法

WSL2を利用して作業していると、Windowsのディスク容量が足りなくなってくる問題があります。特にDocker利用時はこの現象が顕著に現れます。不要なコンテナやイメージを削除してもディスク容量が回復しません。 これは、ディストリビューションの仮想ディスクファイル(.vhdxファイル)が動的にサイズを拡張する一方、仮想ディスク内のファイル削除をしてもファイルサイズを減らさないためです。

本記事では、仮想ディスクのファイルサイズを減らす方法を記載します。

仮想ディスクのファイルサイズを減らす方法

全て、管理者権限のPowerShellで操作します。

共通処理

  1. 以下のコマンドを実行し、WSL2の仮想ディスクファイルの場所を表示する
    (レジストリから取得して表示)

    Get-ChildItem -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss

    出力例
    BasePathにext4.vhdxファイル(仮想ディスクファイル)がある

    Hive: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss
    
    Name                           Property
    ----                           --------
    {a6991202-e6de-4062-abed-3b683 State              : 1
    7b246e4}                       DistributionName   : Ubuntu
                                  Version            : 2
                                  BasePath           : C:\Users\XXXX\AppData\Local\Packages\CanonicalGroupLimited.Ubuntuon
                                  Windows_79rhkp1fndgsc\LocalState
                                  Flags              : 7
                                  DefaultUid         : 1000
                                  PackageFamilyName  : CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc
                                  KernelCommandLine  : BOOT_IMAGE=/kernel init=/init
                                  DefaultEnvironment : {HOSTTYPE=x86_64, LANG=en_US.UTF-8, PATH=/usr/local/sbin:/usr/local
                                  /bin:/usr/sbin:/usr/bin:/sbin:/
                                                       bin:/usr/games:/usr/local/games, TERM=xterm-256color}
  2. 次のコマンドで対象のディストリビューションが停止していることを確認する
    wsl -l -v
  3. 起動中のものがあれば停止する
    終了直後はRunningになっていることがあるため、少し待ってみる
    次のコマンドは強制停止コマンド
    wsl --shutdown

Optimize-VHDによるファイルサイズの削減

次のコマンドを実行して仮想ディスクのファイルサイズを減らせます。

Optimize-VHD -Path <.vhdxファイルのフルパス> -Mode Full

ただし、Optimize-VHDコマンドはWindowsの機能でHyper-Vが有効になっていないと利用できません。

Hyper-V enabled

diskpartによるファイルサイズの削減

Optimize-VHDコマンドが有効になっていない場合は、こちらの方法で仮想ディスクのファイルサイズを減らせます。

diskpart
# diskpartが開始する

select vdisk file=".vhdxファイルのフルパス"
attach vdisk readonly
compact vdisk
detach vdisk

# diskpart終了
exit

Docker向けの作業

WSL2のディストリビューション内でDockerを使っている場合の追加作業です。

Dockerのディスク使用量確認

docker system df

不要なイメージの削除

次のコマンドを実行して、不要なイメージを削除します。

docker image prune

Dockerイメージのキャッシュの削除

Dockerはビルド時にイメージをキャッシュするため、ビルド時に使用されないイメージを削除することができます。

docker builder prune
この他にも不要なコンテナやボリュームの削除コマンドがあります。

実行結果

実際にdiskpartを実行した結果です。

実行前

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        2023/02/22     16:37                temp
-a----        2023/09/10     15:58    78635859968 ext4.vhdx
-a---l        2023/02/22     15:49              0 fsserver

diskpart実行後(docker image prune後)

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        2023/02/22     16:37                temp
-a----        2023/09/10     16:14    75848744960 ext4.vhdx
-a---l        2023/02/22     15:49              0 fsserver

diskpart実行後(docker builder prune後)

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        2023/02/22     16:37                temp
-a----        2023/09/10     16:26    26638024704 ext4.vhdx
-a---l        2023/02/22     15:49              0 fsserver
このエントリーをはてなブックマークに追加
にほんブログ村 IT技術ブログへ

コメント

メールアドレスが公開されることはありません。 が付いている欄は必須項目です