@peccul is peccu

(love peccu '(emacs lisp cat outdoor bicycle mac linux coffee))

WSLの占めるディスク容量を減らす

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

reference

superuser.com

github.com