WSL で利用されている vhd のファイルを最適化したときの備忘録です。
環境情報
- Windows 10 Pro (10.0.19045 N/A ビルド 19045)
- WSL 2.0.14.0
手順
事前の確認
事前に WSL 上のディストリビューションを停止させておきます。
PS > wsl --shutdown PS > wsl --list --verbose NAME STATE VERSION * Ubuntu Stopped 2
事前に WSL のバージョンを最新化しておきます。
PS > wsl --update PS > wsl --version WSL バージョン: 2.0.14.0 カーネル バージョン: 5.15.133.1-1 WSLg バージョン: 1.0.59 MSRDC バージョン: 1.2.4677 Direct3D バージョン: 1.611.1-81528511 DXCore バージョン: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp Windows バージョン: 10.0.19045.4046
ディスクの解放をしたい <distribution-name> を指定して、WSL の論理上で利用されているサイズを確認します。53 GB である。
PS > wsl --system -d <distribution-name> df -h /mnt/wslg/distro Filesystem Size Used Avail Use% Mounted on /dev/sdc 1007G 53G 904G 6% /mnt/wslg/distro
続いて、該当の <distribution-name> を指定して、利用されている vhd のファイルパスを確認します。
PS > (Get-ChildItem -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss | Where-Object { $_.GetValue("DistributionName") -eq '<distribution-name>' }).GetValue("BasePath") + "\ext4.vhdx" C:\Users\{user-name}\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx
Linux ディストリビューションの .vhdx ファイルとディスク パスを見つける方法
上記で取得したパスを指定して、ファイルサイズを確認します。254 GB である。
PS > (ls C:\Users\{user-name}\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx).Length / 1024 / 1024 / 1024 254.837890625
ディスク解放
Hyper-V の機能をインストールしている場合、Optimize-VHD という PowerShell のコマンドが利用できるようですが、僕の環境では利用できなかったため、昔ながらの DISKPART コマンドにて vhd ファイルの最適化を行います。
DISKPART のプロンプトを起動します。
PS > DISKPART
対象としたい vhd ファイルを選択します。
DISKPART> select vdisk file=C:\Users\{user-name}\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx DiskPart により、仮想ディスク ファイルが選択されました。
事前の確認。
DISKPART> detail vdisk デバイスの種類 ID: 0 (不明) ベンダー ID: {00000000-0000-0000-0000-000000000000} (不明) 状態: 追加済み 仮想サイズ: 1024 GB 物理サイズ: 254 GB ファイル名: C:\Users\{user-name}\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx 子: いいえ 親ファイル名: 関連付けられたディスク番号: 見つかりません。
最適化(ディスクの解放)。
DISKPART> compact vdisk 100% 完了しました DiskPart により、仮想ディスク ファイルは正常に圧縮されました。
実施後の確認。vhd ファイルが 64 GB になりました。
DISKPART> detail vdisk デバイスの種類 ID: 0 (不明) ベンダー ID: {00000000-0000-0000-0000-000000000000} (不明) 状態: 追加済み 仮想サイズ: 1024 GB 物理サイズ: 64 GB ファイル名: C:\Users\{user-name}\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx 子: いいえ 親ファイル名: 関連付けられたディスク番号: 見つかりません。
PS > (ls C:\Users\{user-name}\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx).Length / 1024 / 1024 / 1024 64.533203125