環境
| 項目 | 内容 |
|---|---|
| OS | Windows 11 Home |
| WSLディストリビューション | Debian, Ubuntu |
| 問題 | CドライブにVHDXが占有(計46GB)、残り46GB |
| 解決策 | VHDXをDドライブへ移動(SSD 151GB空き) |
背景知識:WSL2 VHDXの特性
| 項目 | 内容 |
|---|---|
| 初期サイズ | 1GB程度 |
| 最大サイズ(上限) | デフォルト 1TB(1007GB) |
| 拡張タイミング | WSL内でファイルが増えた瞬間 |
| 拡張単位 | ブロック単位(数MB)で自動拡張 |
| 縮小 | 自動では行われない(手動が必要) |
VHDXは動的拡張方式のため、増えるのは自動、減るのは手動。
VHDXファイルの場所
# Debian
C:\Users\<ユーザー名>\AppData\Local\Packages\TheDebianProject.DebianGNULinux_76v4gfsz19hv4\LocalState\ext4.vhdx
# Ubuntu
C:\Users\<ユーザー名>\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx
注意: Store版WSLの場合、%LOCALAPPDATA%\Packages\ 配下に格納される。
実施手順
Step 1:実使用量の確認
wsl -d Debian df -h /
wsl -d Ubuntu df -h /
Step 2:エクスポート
wsl --export Debian "D:\WSL\Debian_export.tar"
wsl --export Ubuntu "D:\WSL\Ubuntu_export.tar"
Step 3:既存ディストリビューションを削除
wsl --unregister Debian
wsl --unregister Ubuntu
Step 4:Dドライブへインポート
wsl --import Debian "D:\WSL\Debian" "D:\WSL\Debian_export.tar"
wsl --import Ubuntu "D:\WSL\Ubuntu" "D:\WSL\Ubuntu_export.tar"
インポート完了時に以下の警告が出るが正常終了:
wsl: スパース VHD のサポートは、データの破損の可能性があるため、現在無効になっています。
この操作を正しく終了しました。
Step 5:デフォルトユーザーの修正
wsl -d Ubuntu cat /etc/passwd | grep -v nologin | grep -v false
ubuntu config --default-user <ユーザー名>
debian config --default-user <ユーザー名>
Step 6:不要なtarファイルを削除
Remove-Item "D:\WSL\Debian_export.tar"
Remove-Item "D:\WSL\Ubuntu_export.tar"
結果
| ディストリ | 移動前 | 移動後 | 削減 |
|---|---|---|---|
| Debian | 28.14GB | 24.17GB | -3.97GB |
| Ubuntu | 18.15GB | 15.20GB | -2.95GB |
| 合計 | 46.29GB | 39.37GB | -6.92GB |
- CドライブからDドライブへ約46GB分を移動
- エクスポート→インポートにより約7GBのデータ圧縮効果
補足:Windows 11 Homeでの制限事項
| 手段 | 結果 |
|---|---|
| Optimize-VHD | Hyper-Vツール未対応(Home版不可) |
| diskpart compact | WSL2のVHDXは認識されない |
| wsl --manage --set-sparse true | データ破損リスクのため無効化 |
| wsl --manage --set-sparse true --allow-unsafe | 効果なし(ほぼ変化なし) |
Windows 11 HomeでのWSL2 VHDX縮小は wsl --export / --import が唯一の実用的手段。
参考コマンド:VHDXサイズ確認
Get-Item "D:\WSL\Debian\ext4.vhdx" | Select-Object @{N="GB";E={[math]::Round(.Length/1GB,2)}}
Get-Item "D:\WSL\Ubuntu\ext4.vhdx" | Select-Object @{N="GB";E={[math]::Round(.Length/1GB,2)}}