tl;dr
WSLの使うvhdxファイルをdiskpartコマンドで圧縮すればよい。
以下の2つのファイルを同じフォルダに置いて、PowerShellで実行する。WSL環境をシャットダウンするので何か実行中は避ける。
背景とか
dockerイメージをビルドしまくっていたからか、Windows上のディスク容量を食いまくっていた。WSLから見ると全然使っていないので削減したかった。デフラグを思い出す。。。
- shrink_vhdx.diskpart
select vdisk file="C:\Users\%username%\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\ext4.vhdx" attach vdisk readonly detail vdisk compact vdisk detail vdisk detach vdisk
%username%
部分はそのままでよい。diskpartが読み替えてくれる模様
- shrink_vhdx.ps1
wsl --shutdown diskpart /s $PSScriptRoot\shrink_vhdx.diskpart wsl -l -v
- run
PS > & C:\path\to\shrink_vhdx.ps1
wslシャットダウン後にwsl起動すると以下のようなエラーが出る
Logon failure: the user has not been granted the requested logon type at this computer
vmcomputeサービスを再起動する必要がある。 管理者権限のPoworShellなどでサービスを再起動すれば再び利用できる
PS> restart-service vmcompute