はじめに
WSL2 上で CodeX CLI と Podman を利用した開発を進めていたところ、ディスク領域が肥大化してエラーが発生しました。元のマシンでは空き容量が不足し、wsl --export も実行できない状況でしたが、ext4.vhdx を別マシンへ移動して開発を継続することができました。本記事ではその手順をまとめます。
なぜ起こりやすいのか
WSL2 の ext4.vhdx は「可変ディスク」で、ファイルを追加すると膨らみますが、削除しても自動的には縮まりません。そのため以下のような環境では肥大化しやすく、ストレージ不足エラーに直結します。
- Docker/Podman で大量のイメージやコンテナを扱う
- CodeX CLI などの AI 開発ツールで多くの依存関係やキャッシュを生成する
- 一時ファイルやログが蓄積する
特に開発用途では発生しやすいトラブルなので、定期的なメンテナンスや縮小処理が必要になります。
日常的に確認すべきコマンド
ストレージ不足を未然に防ぐために、以下のコマンドを定期的に実行すると良いです。
# ディスク使用量を確認
df -h /
# 大きいファイル/ディレクトリを調査
du -h --max-depth=1 /
# キャッシュ削除(APT 系)
sudo apt clean
# trim で未使用領域を解放
sudo fstrim -av
# ジャーナルログの整理
sudo journalctl --vacuum-time=7d
1. ext4.vhdx の確保
元マシンで WSL を完全に停止し、対象の VHDX をコピーします。
PS C:\> wsl --shutdown
対象ファイルの場所(例):
C:\Users\<ユーザー名>\AppData\Local\Packages\<GUID>\LocalState\ext4.vhdx
このファイルを外付け HDD / SSD や共有経由で移動先マシンへコピーします。
2. 移動先での登録
コピーした ext4.vhdx を格納するフォルダを作り、--import-in-place で登録します。
PS C:\> mkdir C:\WSL\CodexUbuntu
# ext4.vhdx をその直下に配置
PS C:\> wsl --import-in-place CodexUbuntu C:\WSL\CodexUbuntu\ext4.vhdx
この操作を正しく終了しました。
登録状況確認:
PS C:\> wsl --list --verbose
NAME STATE VERSION
* Ubuntu-24.04 Stopped 2
CodexUbuntu Stopped 2
3. ext4.vhdx の肥大化対策
コピー前後でサイズが大きすぎる場合は縮小を行います。
(1) Linux 側で空き領域をゼロ化
devuser@PC:~$ sudo apt autoremove --purge -y
devuser@PC:~$ sudo apt clean
devuser@PC:~$ sudo rm -rf /var/tmp/* ~/.cache/*
devuser@PC:~$ dd if=/dev/zero of=~/EMPTY bs=1M status=progress || true
dd: error writing '/home/devuser/EMPTY': No space left on device
devuser@PC:~$ rm ~/EMPTY
devuser@PC:~$ sync
devuser@PC:~$ sudo fstrim -av
/: 846.9 GiB (909304307712 bytes) trimmed on /dev/sdd
(2) Windows 側で最適化
PS C:\> wsl --shutdown
PS C:\> Optimize-VHD -Path "C:\WSL\CodexUbuntu\ext4.vhdx" -Mode Full
PS C:\> Get-Item "C:\WSL\CodexUbuntu\ext4.vhdx" | Select-Object Length
Length
------
150460170240
実行例(Before/After サイズ):
Before: 185,437,519,872 bytes
After : 150,460,170,240 bytes
4. トラブルと解決策
4.1 ERROR_SHARING_VIOLATION
エラー コード: Wsl/Service/RegisterDistro/MountDisk/HCS/ERROR_SHARING_VIOLATION
→ wsl --shutdown や Stop-Service LxssManager でサービスを止め、
Explorer/Defender/OneDrive などが ext4.vhdx を掴んでいない状態にする。必要ならコピーして別パスで import-in-place。
4.2 E_INVALIDARG
エラー コード: Wsl/Service/RegisterDistro/E_INVALIDARG
→ フォルダではなく ファイルパスを指定しているか確認。
正:
wsl --import-in-place CodexUbuntu C:\WSL\CodexUbuntu\ext4.vhdx
まとめ
-
--exportが使えなくても ext4.vhdx を直接移動すれば復旧可能。 - 登録には
--import-in-placeを使用。 - 縮小は Linux 側でゼロ埋め → Windows 側で Optimize-VHD の二段構え。
- 開発用途(Docker/Podman/CodeX CLI 等)では ext4.vhdx の肥大化は起こりやすいので、定期的なメンテナンスを推奨します。
