为什么 /winsxs 文件夹变得这么大,可以让它变小一点吗?

为什么 /winsxs 文件夹变得这么大,可以让它变小一点吗?

我使用的 Vista 虚拟机只有 10 GB 的虚拟硬盘——我担心它会随着时间的推移耗尽空间。

我用了树的大小检查罪魁祸首……

在此处输入图片描述

罪魁祸首是/winsxs或“Windows Side-By-Side”文件夹

在此处输入图片描述

Windows 并排文件夹是什么?嗯,这是这里解释得很好

操作系统中的所有组件都位于 WinSxS 文件夹中 - 事实上,我们将此位置称为组件存储。每个组件都有一个唯一的名称,其中包括其所针对的版本、语言和处理器体系结构。WinSxS 文件夹是系统上找到组件的唯一位置,您在系统上看到的文件的所有其他实例都是通过从组件存储中进行硬链接“投影”的。让我重复最后一点 - 操作系统中每个文件的每个版本只有一个实例(或完整数据副本),该实例位于 WinSxS 文件夹中。因此从这个角度来看,WinSxS 文件夹实际上是整个操作系统的整体,在低级操作系统中称为“平面”。这也解释了为什么在运行系统文件检查器 (SFC) 等操作或安装其他功能和角色时不再提示您输入媒体。

这解释了为什么文件夹一开始很大,但无法解释为什么它会随着时间的推移而变大——这个问题的答案是服务。在以前版本的 Windows 中,服务的基本单位是文件,而在 Windows Vista 中则是组件。当我们更新特定二进制文件时,我们会发布整个组件的新版本,并且该新版本与原始版本一起存储在组件存储中。组件的更高版本被投射到系统中,但存储中的旧版本不会受到影响。这是组件存储变得如此之大的第三部分原因。

还有许多其他人也抱怨 /winsxs 文件夹的大小

一位同事最近每两年更新一次工作笔记本电脑,现在正准备在新笔记本电脑上安装 Vista。不知何故,他的硬盘 C: 分区只有 25GB,其余空间则留给了更大的 D: 盘。

无论如何,在加载许多 Windows 更新后,C: 盘上几乎没有剩余空间了,而且由于某种原因,WinSxS 目录膨胀到超过 8GB。

虽然我知道 WinSxS(Windows Side-by-Side)目录的用途,但我不太清楚为什么随着操作系统的正常更新,该目录的大小会激增得如此之快。

我不太在意为了安全而保留这些重复文件,但我担心虚拟机会因为磁盘空间不足而爆炸。所以……能以任何方式安全地削减 /winsxs 吗? 似乎不可能..

管理员不应该因为任何原因自行清理 /winsxs 目录- 这样做可能会导致 Windows 更新和 MSI 无法正常运行。通过在继承其子目录的目录上放置强安全描述符,可以防止意外删除目录。

如果这个 /winsxs 文件夹变得更大,我将不得不重新映像此虚拟机。我真的不想做!

答案1

有一个很好的命令可以在 Windows 7 SP1 安装后进行清理(它为我节省了大约 3 GB):

DISM /online /cleanup-Image /spsuperseded

必须从提升的命令提示符执行

答案2

总结

winsxs 实际上包含硬链接. 它不会占用太多额外的数据如您所想。

硬链接就像是指向磁盘上某个实际文件的“快捷方式”或“指针”。硬链接本身不占用任何硬盘空间:它只是起到重定向的作用。

由于 winsxs 由硬链接组成,删除这些链接不会释放任何空间。实际文件将继续保留在磁盘上的各个位置。


winsxs 不是问题

...这是一个解决方案!(嗯,大多

摘要,“由 MVP、版主 Ronnie Vernon 标记为答案”,在这里说

哇,关于硬链接和 winsxs 的讨论太长了。无论如何,以下是我所理解的关于它们工作原理的一些总结。

首先,用 Andre.Ziegler 在上面发布的完美答案来回答 OP 的问题,你不要碰 winsxs。也许有些文件可以修剪,比如 mp3、avi 等,但是其余系统文件应保持不变。我也在使用 Ronnie Vernon 在上面发布的 Link Shell Extension,可以轻松查看哪些是硬链接(红色箭头)以及哪些是简单文件。

在来这里之前,我看到很多地方都有人在安装 Windows 7 SP1 后询问清理工具,比如 vsp1cln。没有专用工具,所有工具都集成到了磁盘清理服务中。我想在这里指出的是,即使选项说在我清理驱动器后会删除几百 MB,但服务会删除大约 3GB 的多余文件,因此不同系统的情况有所不同。有趣的是,现在我的空间比安装 SP1 之前还要多。MS,干得好。

至于硬链接,我对它们造成的混乱感到好笑。我不是 Linux 极客,而且我通常只使用软链接……它们对我来说已经足够了,但人们不明白硬链接是如何工作的,以及如何计算大小。

一组选定的文件(无论是否链接)将始终算作一个总和。这意味着,如果我取一个 10MB 的文件,并创建 2 个硬链接,则所有三个文件的总和将为 30MB,这是正确的大小,因为与与文件原始主文件表条目相关且为 0 字节的软链接不同,硬链接与数据本身相关,在 MFT 中有自己的条目,但指向相同的数据地址,显然大小与实际数据的大小相同,时间、属性等也相同。原因如下。

驱动器上还剩下多少空间?很简单:与驱动器自身属性报告的一样多。不要选择 C ​​上的所有文件(隐藏和非隐藏)并进行比较,或者使用工具自动执行此操作,因为它不会显示实际的 HDD 使用情况。为什么?因为:

  1. 该操作将所有选定的文件(包括硬链接)列为单独的文件,然后逐个列出并添加大小,驱动器属性会计算实际存储的数据
  2. 并非所有文件都会被计算在内,禁止遍历的文件夹和禁止读取的文件将不会被计算在内,并且系统卷信息通常以这种方式保护非常大的文件
  3. 该数字仅在文件传输的情况下有用,如果需要将文件、链接等复制到 DVD 或 NAS,那么它们将占用这么多空间,并且链接将不会被保留,因为它们是 NTFS 特定的功能,在 ISO、UDF、NFS 和其他文件系统下不可用或以不同的形式提供,但它们将被克隆。

进行测试...从不同的驱动器复制一个 10MB 的文件 a.exe,并注意可用空间如何减少 10MB。创建硬链接 (mklink /H b.exe a.exe)。现在,选定的这两个文件将“使用”选择属性中的 20MB, 但实际上驱动器属性中仅验证了 10MB,其可用空间与文件复制后相同。删除其中一个,可用空间保持不变。现在删除最后一个,空间将增加 10MB。有什么损害吗?没有。

什么是 winsxs?一个更好的 dllcache。在 XP 中,使用 dllcache 时,我们拥有文件副本,这些副本实际上增加了文件大小的使用量,因为它们是克隆的,这实际上提高了使用率,但不能完全保护(针对病毒)。如果流氓卸载程序认为它必须从 System32 中删除一些运行时库,它只会删除链接,而不会删除数据,然后链接将重新创建,同时将数据空间使用量保持在最低水平,这比将 winsxs 归档在 cab 中并将 cab 与原始文件放在一起要好。此外,winsxs 带来了序列化,将同名但不同版本的文件划分为不同的区域,这对开发人员来说是好事也是坏事,它让他们懒得正确编码,但当他们不想再编码时,它会有所帮助。

我这样做是为了帮助任何出于和我一样的原因来到这里的人……SP1 之后 winsxs 过度“占用空间”。我希望这能有所帮助。

答案3

当磁盘空间有限时,这些重复和备份非常烦人。

在这种情况下,我发现唯一不会危及操作系统稳定性的方法就是慷慨地使用“压缩内容以节省磁盘空间”环境。

通过压缩 Windows 目录下的所有备份目录,我能够将目录大小从 6.5 GB 减少到 5 GB,而且没有任何明显的副作用。如果将它用于 Window 目录之外的一些内容,则可以进一步利用 10 GB。

答案4

Windows 8您可以通过以下方式减小 WinSxS 文件夹的大小删除 Windows 功能

DISM.exe /Online /Disable-Feature /Featurename:<name> /Remove

重要的是/消除参数Windows 8

WinSxS 中的大部分空间用于您随时间安装的 WindowsUpdates。在Windows 8/Windows 10你可以检测并删除被较新更新替换的更新(例如较新的累积 IE 更新)运行以下命令:

dism.exe /online /cleanup-image /startcomponentcleanup

或运行磁盘清理向导并选择“Windows 更新清理”

在此处输入图片描述

在此处输入图片描述

在此处输入图片描述

还要确保你已经安装了服务堆栈更新http://support.microsoft.com/kb/2821895

此更新会对 WinSxS 进行深度清理,并将 WinSxS 中当前未使用的所有 DLL/Exe 文件压缩为更小的增量文件:

在此处输入图片描述

查看不同的文件大小。

Windows 8.1 添加新的 DISM 命令/startcomponentcleanup获取一个新参数/ResetBase,使您的上次更新永久生效,并删除所有旧文件以节省更多空间。

您还可以运行新命令dism /online /cleanup-image /analyzecomponentstore来分析 WinSxS 文件夹:

在此处输入图片描述

它现在告诉您何时应运行清理以节省空间。

相关内容