0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WSL でストレージ不足エラーが発生したときの対処方法:別マシンへ ext4.vhdx を移して復旧する手順

Last updated at Posted at 2025-09-30

はじめに

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

VirtualDiskComression.png

実行例(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 --shutdownStop-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 の肥大化は起こりやすいので、定期的なメンテナンスを推奨します。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?