WSLでDockerなどを使っていて、不要なイメージやボリュームを削除したのに、Windows上から見ても空き容量が増えていない場合、ディスクイメージを圧縮する必要があります。
そのためのノウハウはWeb上に散見しているのですが、説明されている場所にVHDXファイルが存在しなかったのでChatGPTに聞いたら無事見つけられて解決できたので備忘録として。
PowerShellにて
> Get-AppxPackage -Name "*Ubuntu*"
PackageFamilyName : CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc
これでPackageFamilyNameGetしたら下記フォルダにVHDXファイルがあるらしいが、私の環境にはLocalStateフォルダには何もなかった。
C:\Users\<user>\AppData\Local\Packages\<PackageFamilyName>\LocalState\
念のためWSLのバージョンも見てみるがしっかり「2」になっている
wsl --list --verbose
NAME STATE VERSION
* Ubuntu-20.04 Stopped 2
amzn Stopped 2
インストールされている Linux ディストリビューションの .vhdx ファイルとディスク パスを見つける方法などを参考に以下のコマンドを打ってみてもエラー
> (Get-ChildItem -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss | Where-Object { $_.GetValue("DistributionName") -eq 'Ubuntu20.04' }).GetValue("BasePath") + "\ext4.vhdx"
null 値の式ではメソッドを呼び出せません。
発生場所 行:1 文字:1
+ (Get-ChildItem -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\ ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) []、RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
ChatGPTに聞いてみると、別の場所にある可能性を指摘され、このコマンドを教えてもらった。ext4.vhdxというファイル名で再帰的に捜査するコマンドっぽい。
Get-ChildItem -Path "C:\Users" -Recurse -Force -Filter ext4.vhdx -ErrorAction SilentlyContinue
ディレクトリ: C:\Users\shipw\AppData\Local\Ubuntu-20.04
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2025/10/04 16:14 118602334208 ext4.vhdx
その結果、私の環境では「C:\Users\<user>\AppData\Local\」にext4.vhdxが入っているのが見つかった。
パスが分かればあとは最適化するだけ。
管理者権限のPowerShellで下記を実行。30分ぐらいかかったが、結果として無事容量が110GBから18GBまで劇的に減った。
optimize-vhd -Path "C:\Users\shipw\AppData\Local\Ubuntu-20.04\ext4.vhdx" -Mode Full
Comments