1
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内のファイル(Dockerイメージなど)を削除してもCドライブが空かない原因と対処法

1
Posted at

こんにちは、ダックスフントです。

WindowsPCでWSL上のDockerを使ってローカルLLMの検証をしていたところ、Cドライブの空き容量がカツカツになってしまいました。WSL内で不要なDockerイメージやモデルファイルを削除して整理したのですが、何度ファイルエクスプローラーを更新してもPC側のCドライブの空き容量がまったく変わりません。

調べてみると、WSL内でファイルを削除しただけでは、Windows側の空き容量は増えないという仕様があることが分かりました。「VHDXファイルの圧縮」という操作を実行することで、自分の場合は一気に50GBも空き容量ができました。

WSLやDockerを使っているPCでディスクの容量不足に悩んでいる方に役立てば、と思い手順を共有します。

TL;DR

WSL内のファイルを削除した後、PowerShellで diskpart を使ってVHDXファイルを圧縮する操作が必要。これをやらないと、削除した分の容量がWindowsPC側に戻ってこない。


なぜ削除してもCドライブが空かないのか

WSL(Windows Subsystem for Linux)のデータは、Windowsのファイルシステム上に .vhdx(仮想ディスクファイル)として保存されています。この仮想ディスクには少し厄介な性質があります。

  • データが増えると自動で膨らむ — DockerイメージをダウンロードするたびにVHDXファイルのサイズが大きくなる
  • データを消しても自動では縮まない — WSL内でファイルを削除すると仮想ディスク内に「空き」ができるだけで、VHDXファイル自体のサイズはそのまま

つまり、Windowsから見るとCドライブ上の .vhdx ファイルの占有量が変わらないため、空き容量も増えない、ということです。この.vhdx ファイルの「空き」を「圧縮」してWindowsに返してあげる操作が別途必要になります。


圧縮しても大丈夫?データは消えない?

圧縮してもデータは消えたりしません。VHDXファイルの圧縮は、ファイル内の「使われていない領域」を詰めるだけの操作であるため、WindowsPC内のファイルやWSL内のファイルが消えたり、壊れたりすることはありません。

手順中に attach(接続)・detach(切り離し)というコマンドが出てきますが、これは手順中にロックするためのコマンドであり、WindowsPCから接続が解除されたりするわけではありません。一方で、detach を忘れると仮想ディスクがロックされたままになってDockerが起動エラーになるので、detachコマンドを実行する最後の手順まで実施してください。


VHDXファイル圧縮手順

WSL内のファイル削除が終わった後に、以下の手順を実施します。
自分は、Dockerイメージの削除を実行後に実施しました。

1. DockerとWSLを完全に停止する

PowerShellを開き、以下を実行する

wsl --shutdown

2. VHDXファイルのパスを確認する

デフォルト設定であれば、以下のパスにファイルがあります。

C:\Users\【ユーザー名】\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu{バージョンや一意のIDなどが含まれる}\LocalState\ext4.vhdx

このパスは後続で使用するので、パスをコピーしておいてください。

3. diskpartで圧縮を実行する

PowerShellで以下を実行します(管理者権限の確認ダイアログが出たら「はい」を選択)。

diskpart

DISKPART> というプロンプトに変わったら、以下のコマンドを1行ずつ順番に実行します。

# 1. 仮想ディスクを選択(パスは先ほど確認したものに置き換えてください)
select vdisk file="C:\Users\【ユーザー名】\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu{バージョンや一意のIDなどが含まれる}\LocalState\ext4.vhdx"

# 2. 読み取り専用でアタッチする
attach vdisk readonly

# 3. 圧縮を実行する(数分かかる場合があります)
compact vdisk

# 4. デタッチする
detach vdisk

# 5. diskpartを終了する
exit

compact vdisk は数分かかる場合があります。完了したらファイルエクスプローラーでCドライブの空き容量を確認してみてください。削除したファイル分、Cドライブにも空き容量が出来ているはずです。


まとめ

WSL内でファイルを削除するだけではWindowsの空き容量は増えません。diskpart によるVHDXファイルの圧縮を忘れずに行うことで、削除した分がしっかりCドライブに返還されます。

WSLやDockerを頻繁に使う環境では、定期的に整理 → 圧縮をセットで行うことをおすすめします。

1
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
1
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?