管理组件存储

为什么 WinSxS 这么大? 许多 Windows 用户都问过这个问题。 尽管此问题已在博客文章中讨论过,但本主题更详细地介绍了组件存储(具体来说就是 WinSxS 文件夹)背后的概念,然后提供了指向一些主题的链接,这些主题重点介绍了如何更好地管理 WinSxS 文件夹的大小。

简单说来,WinSxS 文件夹的大小并不像乍看那样大,因为在计算大小时,可能会包括其他位置的 Windows 二进制文件,从而使 WinSxS 文件夹的大小看起来大于实际值。

Windows 组件存储和 WinSxS 文件夹

WinSxS 文件夹位于 Windows 文件夹中,例如 C: \Windows\WinSxS。 它是 Windows 组件存储文件的位置。 Windows 组件存储用于支持自定义和更新 Windows 所需的函数。 下面是有关如何使用 Windows 组件存储文件的一些示例:

  • 使用 Windows 更新安装新组件版本。 这可以确保系统的安全性和时效性。

  • 启用或禁用 Windows 功能。

  • 使用服务器管理器添加角色或功能。

  • 在不同 Windows 版本之间移动系统。

  • 从损坏或启动故障中进行系统恢复

  • 卸载有问题的更新

  • 使用并行程序集运行程序

Windows 组件存储是首先在 Windows XP 中引入的,用于支持并行程序集。 从 Windows Vista 开始,组件存储得到了增强,可以跟踪构成操作系统的所有组件并为其提供服务。 这些不同的操作系统组件可以跟踪对象,例如文件、目录、注册表项和服务。 然后,系统会将特定版本的组件收集到包中。 Windows 更新和 DISM 使用包来更新 Windows。 Windows 组件存储将处理 Windows 安装中使用的组件和包。 确定 Windows 组件存储大小的过程会很复杂,因为 Windows 通过名为硬链接的技术使用的许多文件都来自 Windows 组件存储外的目录。 在这种情况下,某个组件版本中的文件会同时出现在 Windows 组件存储的内部和外部。 使用硬链接,Windows 就可以在看起来并不实际占用为多个副本提供的额外空间的情况下,保留同一文件的多个副本。

硬链接是一个文件系统对象,它允许两个文件引用磁盘上的同一位置。 这意味着,多个文件可以引用相同的数据,对一个文件中的该数据所做的更改会反映在其他文件中。 这会使目录大小概念复杂化,如以下示例所示:

  1. 目录 A 有三个文件:1.txt、2.txt 和 3.txt

  2. 目录 B 有一个文件:4.txt

  3. 文件 1.txt 和 2.txt 硬链接在一起,包含 1MB 的数据。

  4. 文件 3.txt 和 4.txt 也硬链接在一起,包含 2MB 的数据。

hard links example

在此示例中,可以看到硬链接使多个文件可以引用相同的一组数据。

现在目录 A 的大小是多少?

答案取决于你计划对目录 A 执行的操作:

  1. 如果读取目录 A 中的文件,则读取的所有文件的大小是每个文件大小的总和。 在此示例中,其大小为 4 MB。

  2. 如果将所有文件从目录 A 复制到新位置,则复制的数据量是从文件进行硬链接的所有数据的总和。 在此示例中,其大小为 3 MB。

  3. 如果尝试通过删除目录 A 来释放空间,则只会看到仅由目录 A 硬链接的文件的大小在缩减。在此示例中,它相当于节省 1 MB 的空间。

回到 Windows 组件存储(具体说来就是 WinSxS 文件夹)使用了多少空间的问题。 目录 A 示例中的第三个答案最接近所使用的额外空间量。 系统操作需要那些硬链接到系统其余部分的文件,因此不应将它们计入,硬链接到组件存储中多个位置的文件应该只将存储在磁盘上的大小计入。

管理 Windows 组件存储

可以使用 Windows 8.1 和 Windows Server 2012 R2 中的新功能来管理 Windows 组件存储:

确定 WinSxS 文件夹的实际大小

清理 WinSxS 文件夹

减小脱机 Windows 映像中的组件存储大小

我的空间去哪里了? (博客文章)

有关硬链接的详细信息

NTFS 图元文件博客文章