WinSxS 目录这么大,能清理吗?
清理 C 盘时常会看到 C:\Windows\WinSxS 占了好几个 GB,有时比整个程序目录还大,它在 Windows 文件夹里,删又删不掉,于是常有人问它到底能不能动。能动,但只能交给 Windows 自己的工具,而且先要弄清那个数字里有多少是真的占用。
为什么它看起来那么大
WinSxS 是组件存储,Windows 的组件都放在这里,更新出问题时回滚、修复损坏的系统文件,靠的也是它。微软的说明讲了它显得大的原因,很多文件看起来同时在 System32 和 WinSxS 里各有一份,磁盘上其实只存了一份,另一处是硬链接,资源管理器这类按目录累加的工具不认硬链接,同一份数据就被算了两次。
先量出真实开销
以管理员身份打开命令提示符,运行:
Dism.exe /Online /Cleanup-Image /AnalyzeComponentStore
输出里的几行要分开看:
- Windows Explorer Reported Size of Component Store:资源管理器算出来的大小,没有扣掉硬链接。
- Actual Size of Component Store:扣掉硬链接后的大小,但里面还包括和 Windows 共用的文件。
- Shared with Windows:在别处也能看到、系统正常运行要用的文件,不算额外开销。
- Backups and Disabled Features 和 Cache and Temporary Data:这两项加起来才是组件存储的额外开销,也是清理能动到的部分。
- Component Store Cleanup Recommended:显示 Yes 时,清理可能会有收获。
微软给的示例里,资源管理器显示 4.98 GB,真正的额外开销只有 507 MB 左右,所以先量再清,免得为一个大半是共用文件的数字折腾半天。
不要手动删
微软的警告很明确,从 WinSxS 里删文件,或者把整个文件夹删掉,可能让电脑无法启动,也装不了更新,有些重要的系统文件只存在这里。拿到 TrustedInstaller 权限强行删,结果也是一样。
用 DISM 清理
Windows 自己会定期清,计划任务 StartComponentCleanup 在电脑空闲时运行,一个组件更新装好至少 30 天后才移除它的旧版本,每次最多运行一小时。想现在就清,可以运行:
Dism.exe /Online /Cleanup-Image /StartComponentCleanup
微软的清理说明讲了它和计划任务的区别,旧版本组件会立刻删除,没有 30 天的等待,也没有一小时的限制。
再加上 /ResetBase 会清得更多:
Dism.exe /Online /Cleanup-Image /StartComponentCleanup /ResetBase
它会移除每个组件所有被取代的旧版本,执行完以后,已经装上的更新都不能再卸载,之后新装的更新不受影响。能收回多少空间,要看上面那两项开销有多大,不是一个固定的数字,刚装完一个大更新、还不确定稳不稳的时候,先别加这个参数。
| 命令 | 清理范围 | 已装更新能否卸载 |
|---|---|---|
/StartComponentCleanup |
被取代的旧版本组件 | 仍然可以 |
/StartComponentCleanup /ResetBase |
所有被取代的旧版本 | 不能再卸载 |
不想用命令行
磁盘清理里点“清理系统文件”,勾选“Windows 更新清理”,也能减小组件存储,微软的说明里同样提到了这一项。不管用哪种方式,清完再跑一次分析命令对比前后的数字,比看资源管理器里的大小更准。想接着排查别的占用,可以看 C 盘空间分类排查 和 Windows 缓存清理。