WSLで削除してもCドライブが空かない?dfとVHDXの容量を確認する
WSLの中で大きなファイルを消したのに、WindowsのCドライブの空きがあまり増えないことがあります。Linuxでは空き容量が増えていると、どちらの表示を見ればよいのか迷いやすいところです。
WSL 2では、Linuxのファイルは通常、Windows上の仮想ディスクであるext4.vhdxに保存されます。Linux内の使用量、VHDXファイルの大きさ、Windowsドライブの空き容量は、それぞれ測っているものが違います。まず読み取りだけで状況を整理すると、不要ファイルの整理と仮想ディスクへの作業を取り違えずに済みます。
対象のディストリビューションを確かめる
WindowsのPowerShellで登録名と実行方式を表示します。
wsl --list --verbose
VERSION列が2なら、WSL 2の仮想ディスクを使う環境です。この列はWSL本体の3.xなどの製品バージョンとは別です。複数のUbuntuがある場合は、調べたい環境のターミナルを開いてから、次のLinuxコマンドを実行してください。
Linux内の使用量を読む
df -h /
ルートのファイルシステムについて、Sizeは全体の容量、Usedは使用量、Availは利用可能な空き容量を示します。WSL 2では仮想ディスクが拡張できる容量が大きく表示されるため、SizeやAvailがWindows側の実際の空き容量より大きくても、それだけで表示異常とはいえません。
例えばLinux側に数百GBのAvailが表示されても、Windows側の保存ドライブにその分の空きがあるという意味ではありません。Windowsの空きが不足すれば、Linux側の表示に余裕があっても新しいデータの保存に支障が出ることがあります。
特定のプロジェクトがどれくらい使っているか知りたいときは、Linuxターミナルでそのフォルダーを開き、次を実行します。
du -sh -- .
末尾のピリオドは現在のフォルダーです。duはその中をたどって使用量を集計するので、ファイル数が多い場所では時間がかかります。権限エラーが出た項目は集計できておらず、表示値を全体の合計とは扱えません。dfはファイルシステム全体、duは選んだフォルダーであり、両者が同じ数字になるとは限りません。
Windows側のVHDXファイルを確認する
WindowsのPowerShellに戻り、先ほどの登録名を指定します。次の例のUbuntuを、自分の一覧に表示された名前へ置き換えてください。レジストリから保存先を読み取り、ext4.vhdxのファイル情報を表示するコードです。
$Distro = 'Ubuntu'
$Registration = @(Get-ChildItem 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss' |
Where-Object { $_.GetValue('DistributionName') -eq $Distro })
if ($Registration.Count -ne 1) { throw '対象の登録名を確認してください' }
$VhdPath = Join-Path $Registration[0].GetValue('BasePath') 'ext4.vhdx'
Get-Item -LiteralPath $VhdPath -ErrorAction Stop |
Select-Object FullName, @{Name='LengthGiB';Expression={[math]::Round($_.Length / 1GB, 2)}}
FullNameはVHDXの保存先、LengthGiBはファイルのLengthを1GiB単位に換算した値です。拡張可能な最大容量でも、Linux内のUsedでもありません。また、スパースファイルや圧縮の状態によっては、LengthとWindows上の実占有量にも差が生じます。Windowsドライブ全体の空きは、その保存先のドライブについて別に見比べる必要があります。
登録が見つからないエラーなら登録名を、ファイルが見つからないエラーなら登録方法や実際のVHDX名を確認する順番です。Microsoftの案内は標準のext4.vhdxを前提としています。表示されたファイルを直接削除・編集して容量を減らそうとすると、Linux環境そのものを失うおそれがあります。
削除後に変わる表示を見比べる
| 表示 | 分かること | 同じ意味にはならないもの |
|---|---|---|
| dfのUsed / Avail | Linuxファイルシステム内の使用量と空き | Windowsの保存ドライブ全体の空き |
| duの集計 | 指定したフォルダーの使用量 | Linux全体やVHDXのファイルサイズ |
| VHDXのLength | Windows上でのファイルの長さ | 仮想ディスクの最大容量や実占有量そのもの |
動的に拡張する仮想ディスクでは、Linux内のファイルを削除しても、VHDXファイルが同じタイミングで小さくなるとは限りません。dfのUsedが減りAvailが増えているなら、Linux内では空きとして再利用できる状態です。それとWindowsへ容量が戻ることは別の動きになります。スパースファイルかどうかや容量回収の設定によっても結果は変わるため、毎回同じ量が戻るとは考えないほうが状況を追いやすくなります。MicrosoftのsparseVhdは新しく作るVHDをスパース化する設定で、既存のディスクがすべて自動で変わるという意味ではありません。
削除前後を比べるときは、同じディストリビューション、同じVHDX、同じWindowsドライブの値をそろえるのがポイントです。別の環境や別ドライブの値を比べると、変化の理由を見誤りやすくなります。
容量回収の前に復元手段を用意する
Linux側の空きは十分でもWindows側が厳しい場合、VHDXの容量回収を検討する余地があります。Microsoftのcompact vdiskの説明では、動的拡張ディスクであることに加え、切断済みまたは読み取り専用で接続された状態という条件があります。動作中のWSLへそのまま適用できる手順とは考えず、使っているWSLの版とディスクの状態に合う方法を選ぶ必要があります。
ディスクへの変更を始める前は、WSLを別名で復元して確かめるバックアップ手順が役立ちます。Cドライブに置き続けること自体が厳しい場合は、WSLの保存先を別ドライブへ移す方法も選択肢です。ファイル操作の遅さが主な悩みなら、プロジェクトの保存場所の選び方も合わせて考えると、容量と作業速度の両面から整理できます。
参考資料
-
前の記事
WSLでchmodしても権限が変わらない?metadataと保存先の確認 2026.10.22
-
次の記事
WSLでsystemctlが使えない|PID 1とsystemdの状態を確認する 2026.10.23