真正占c盘空间的是windows侧的workspacestorage、cachedextensions和wsl虚拟磁盘ext4.vhdx,清理windows侧缓存比进wsl删文件更关键,需先关闭vscode和wsl进程,再删除对应缓存目录并手动压缩ext4.vhdx。

VSCode 本身不直接管理 WSL 容器内的缓存,所谓“WSL 容器里的扩展缓存”其实是 VSCode Remote - WSL 插件在 Windows 主机侧生成的本地缓存 + WSL 系统内部分扩展(如 Python、Rust)自行产生的数据,混在一起容易误删或漏清。真正占 C 盘空间的,是 Windows 侧的 workspaceStorage、CachedExtensions 和 WSL 的虚拟磁盘(ext4.vhdx)本身膨胀——后者往往被忽略。
为什么清理 Windows 侧缓存比进 WSL 删文件更关键
Remote - WSL 模式下,VSCode 实际运行在 Windows,只把语言服务、调试器等进程转发到 WSL。它会在 Windows 用户目录下创建大量映射缓存:
-
%APPDATA%\Code\WorkspaceStorage:每个 WSL 工作区对应一个哈希命名的子目录,存索引快照、符号缓存,单个可达 1–3 GB -
%USERPROFILE%\.vscode\extensions\*-cache:比如ms-python.python-2024.12.0-cache这类目录,是插件预编译/下载的二进制依赖,不是 WSL 里生成的,但体积大且常残留 -
%APPDATA%\Code\Cache和CachedData:Chromium 渲染层缓存,影响启动速度,也占数 GB - 这些全在 C 盘,而 WSL 的
ext4.vhdx膨胀往往是因为你没清理过 WSL 内部的/tmp、~/.cache或已卸载包的残留,但它们不直接由 VSCode 控制
先停掉所有 VSCode 和 WSL 后台进程再动手
VSCode Remote - WSL 会保持 WSL 实例常驻(哪怕关闭窗口),导致缓存文件被占用、ext4.vhdx 无法收缩。必须彻底断开:
- 在 VSCode 中按
Ctrl+Shift+P,输入并执行Remote-WSL: Close Remote Connection - 打开 Windows 终端,运行:
wsl --shutdown(强制终止所有 WSL 实例) - 任务管理器中结束所有
Code.exe和node.exe(尤其注意后台隐藏进程) - 此时再删缓存才不会失败,也不会触发“文件正在使用中”错误
精准删除 Windows 侧 VSCode-WSL 相关缓存目录
别碰 User 或 extensions 主目录——只删明确带缓存语义的子目录:
- 整个删掉:
%APPDATA%\Code\WorkspaceStorage(这是最大头,删完首次连 WSL 会慢几秒重建) - 整个删掉:
%APPDATA%\Code\Cache和%APPDATA%\Code\CachedData - 进
%USERPROFILE%\.vscode\extensions,用文件管理器按修改时间排序,删所有含-cache后缀的文件夹(如ms-vscode.cpptools-1.18.5-cache),保留不含 cache 的主扩展目录 - 进
%APPDATA%\Roaming\Code\History,可删(这是命令面板历史,非必要)
顺手压缩 WSL 的 ext4.vhdx 文件
删完 VSCode 缓存后,WSL 虚拟磁盘不一定自动缩小。需进 WSL 手动释放未分配空间:
- 重启 WSL:
wsl(或wsl -d Ubuntu) - 在 WSL 终端里执行:
sudo apt clean && sudo journalctl --vacuum-size=100M(清包缓存和日志) - 清空临时文件:
sudo rm -rf /tmp/* /var/tmp/* - 关键一步:运行
sudo fstrim -v /(通知 Windows 底层回收已删除文件占用的块) - 回到 Windows,以管理员身份运行 PowerShell:
diskpart→select vdisk file="C:\Users\yourname\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\ext4.vhdx"→attach vdisk readonly→compact vdisk→detach vdisk
这步做完,ext4.vhdx 通常能缩回 30%–60%,比单纯删 VSCode 缓存效果更直观。很多人卡在最后这步,以为删了就完了——其实 WSL 不主动归还空间,得手动 trim + compact。











