【保存版】WSL仮想ディスクをCドライブからDドライブへ移動する完全ガイド
〜C:容量圧迫を解消し、開発環境を最適化する手順〜
🧩 はじめに:WSLがCドライブを圧迫する理由とは?
WSL(特にWSL2)では、Linuxのファイルシステム全体を仮想ディスク(ext4.vhdx
)として保持しています。
この仮想ディスクは以下のようなパスに保存されます:
C:\Users\ユーザ名\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu...\LocalState\ext4.vhdx
✅ 問題点:
- 初期状態で2〜5GB前後ですが、プロジェクト・仮想環境(例:
venv
,node_modules
)を追加していくと 10GB〜50GB以上 に成長 - Windowsアップデートやキャッシュと競合し、C:\の空き容量がすぐに枯渇
✅ 解決策:Dドライブへの移行(wsl --export → wsl --import)
WSLには、ディストリビューションをエクスポート(.tar化)→再インポートする機能が標準で備わっています。
これを使えば、仮想ディスクをDドライブなど任意の場所に配置し直すことが可能です。
📋 ステップバイステップ手順
🔍 Step 1:現在のディストリ一覧と場所を確認
wsl -l -v
出力例:
NAME STATE VERSION
Ubuntu Running 2
また、仮想ディスクの場所とサイズ確認(PowerShell):
Get-ChildItem "$env:LOCALAPPDATA\Packages" -Recurse -Filter ext4.vhdx -ErrorAction SilentlyContinue |
Select-Object FullName, @{Name="Size(GB)";Expression={[math]::round($_.Length / 1GB, 2)}}
🛑 Step 2:WSLを安全にシャットダウン
wsl --shutdown
📦 Step 3:現在のWSLをエクスポート(バックアップ)
wsl --export Ubuntu D:\Backup\ubuntu.tar
🔒
.tar
ファイルとしてDドライブへ保存される
このファイルがLinux全体のバックアップ
🧼 Step 4:現在のUbuntuをWSLから削除(Cドライブから消す)
wsl --unregister Ubuntu
⚠️ この操作により、WSL環境が一度削除されます(必ずexport済であることを確認)
🚚 Step 5:Dドライブへ再インポート(新しい場所で再構築)
wsl --import Ubuntu D:\WSL\Ubuntu D:\Backup\ubuntu.tar --version 2
D:\WSL\Ubuntu
にext4.vhdx
が生成され、以降はDドライブで動作します
✅ Step 6:動作確認
wsl -l -v
→ Ubuntu が「Running / Version 2」として表示されれば成功です。
🎯 これで得られるメリット
効果 | 内容 |
---|---|
💽 Cドライブの容量確保 | 数GB〜数十GBの容量がC:から削減 |
🧠 複数WSL環境の整理 | D:配下にプロジェクトごとに分けて配置可能 |
🔁 .tar の再利用 | 別PCや別ディスクでも環境を複製可能 |
🔧 容易なバックアップ | .tar ファイルを定期保存すればOK |
🚀 SSDの寿命延命 | C:\への頻繁な書き込みを軽減 |
💡 補足:Optimize-VHDで仮想ディスクを圧縮(必要なら)
WSLの ext4.vhdx
は不要ファイルを削除しても縮小されません。
手動で縮小するには以下のようにします(Hyper-Vが必要):
diskpart
# または
Optimize-VHD -Path "D:\WSL\Ubuntu\ext4.vhdx" -Mode Full
⚠ 注意点と再設定項目
- 再インポート後、初回ログインは
root
になる →adduser
/passwd
でユーザー作成 .bashrc
、.ssh
、.venv
など個別にバックアップしておくと安全.wslconfig
でメモリ/CPU制限など調整するのもおすすめ
🧠 まとめ:こんな人は今すぐ移行しよう
✅ WSLを開発で多用しており
✅ Cドライブの空き容量が少なくなっていて
✅ SSDの書き込みを減らしたい or データ分離したい
→ Dドライブへの移行は最も効果的な最適化手段です。
📎 おまけ:自動バックアップ用PowerShellスクリプト
# WSLバックアップ(tar化)を定期実行
$timestamp = Get-Date -Format "yyyyMMdd-HHmm"
$dist = "Ubuntu"
$dest = "D:\Backup\$dist-$timestamp.tar"
wsl --export $dist $dest
🔚 おわりに
WSLは非常に強力な開発基盤ですが、仮想ディスクの肥大化には要注意です。
定期的な容量チェック+移行・バックアップ設計を組み合わせることで、長期的に安定した環境構築が可能になります。
コメント