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?

【備忘録】WSL2のvhdxファイルサイズを、fstrimとdiskpartで圧縮する (Windows 11 Home 向け)

Last updated at Posted at 2026-02-01

やること

  • 実データ量に近いサイズまで安全に縮小する
  • WSL2 の ext4.vhdx が肥大化する問題への対処
  1. Linux 側で「不要ブロック」を通知(fstrim)
  2. Windows 側で「物理サイズを詰める」(compact)

前提条件

対象環境

  • Windows 11 Home
    • 別にproでも問題無いかも
  • WSL2
  • Linux kernel 5.15 以降(推奨:6.x)
  • ファイルシステム:ext4
  • Hyper-V 管理ツールなし(Home 想定)
    • Optimize-VHDを使えない環境

必須条件

  • WSL 内で不要なファイルを消しとく
  • WSL 内 root ファイルシステムが discard 対応であること

確認コマンド:

uname -a
mount | grep " / "

期待される例:

Linux ... microsoft-standard-WSL2
/dev/sdX on / type ext4 (rw,relatime,discard,...)

discard が無い場合は fstrim の効果が限定的、というかほぼ意味ないかも
※ 恐らく、ddコマンドとかで、(Windows側から見えるvhdxの容量 - WSL内の実容量)分ゼロ埋めしてあげればdiskpart効くんじゃないかな

実施手順

Step 1. WSL 内で trim 実行

sudo fstrim -av

出力例:

/: 976.6 GiB trimmed on /dev/sdd

※ WSLデフォルトのディスクサイズが1TB(確か)なので、今回対象にした実体30GBぐらいのディストロだとこんな感じのトリム結果になる

Step 2. WSL を完全停止(必須)

Windows 側 PowerShell:

wsl --shutdown

Step 3. diskpart で vhdx を compact

vhdxファイルのPath確認

WSLに入っている全てのディストリを対象に、ディストリ名・vhdxパス・vhdxパスの存在チェック結果を出力するPowerShellスクリプト

Get-ChildItem HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss |
ForEach-Object {
    $distro = Get-ItemProperty $_.PSPath
    $vhdxPath = Join-Path $distro.BasePath "ext4.vhdx"

    [PSCustomObject]@{
        Name     = $distro.DistributionName
        VhdxPath = $vhdxPath
        Exists   = Test-Path $vhdxPath
    }
} | Format-List

MS公式のパス確認方法
<distribution-name>wsl -l -vで出てくるディストロ名に変更する。

(Get-ChildItem -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss | Where-Object { $_.GetValue("DistributionName") -eq '<distribution-name>' }).GetValue("BasePath") + "\ext4.vhdx"

diskpartで圧縮

powershellなどで実施

diskpart

diskpartで、以下を順に実行
<distribution-path>を先ほど取得したパスに変更

select vdisk file="<distribution-path>"
attach vdisk readonly
compact vdisk
detach vdisk
exit

Tips

.wslconfigに容量制限の設定を入れとくと良い (今後のディストロの初回インストール時のみ効くようになるけど...)
WSLディストロのディスクサイズを 50GB に設定する例

[wsl2]
defaultVhdSize=52428800000

MS公式ドキュメント

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?