为什么 /winsxs 文件夹变大了,可以缩小吗?

Jef*_*ood 177 windows winsxs disk-space

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

我用TreeSize来检查罪魁祸首..

在此处输入图片说明

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

在此处输入图片说明

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

操作系统中的所有组件都可以在 WinSxS 文件夹中找到——实际上我们称这个位置为组件存储。每个组件都有一个唯一的名称,其中包括为其构建的版本、语言和处理器架构。WinSxS 文件夹是在系统上找到该组件的唯一位置,您在系统上看到的所有其他文件实例都是通过从组件存储进行硬链接来“投影”的。让我重复最后一点——操作系统中每个文件的每个版本只有一个实例(或完整数据副本),并且该实例位于 WinSxS 文件夹中。所以从这个角度来看,WinSxS 文件夹实际上是整个操作系统的整体,在下层操作系统中被称为“平面”。

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

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

一位同事最近收到了他每两年更新一次的工作笔记本电脑,并且正在为他的新笔记本电脑加载 Vista。出于某种原因,他的硬盘驱动器 C: 被分区为只有 25GB,其余的空间保留给更大的驱动器 D:。

无论如何,在加载了许多 Windows 更新之后,他在 C: 上几乎没有剩余的驱动器空间,并且出于某种原因,WinSxS 目录已经膨胀到超过 8GB。

虽然我知道 WinSxS(Windows Side-by-Side)目录的用途,但我不太确定为什么该目录在正常的操作系统更新时会如此快速地爆炸。

为了安全起见,我并不真正关心拥有所有这些重复文件,但我确实关心由于磁盘空间不足错误而导致的 VM 爆炸。那么..可以以任何方式安全地削减 /winsxs 吗? 好像不能..

管理员不应出于任何原因自行清理 /winsxs 目录- 这样做可能会阻止 Windows Update 和 MSI 之后正常运行。防止从目录中意外删除是通过在继承到其子目录的目录上放置一个强大的安全描述符来实现的。

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

TJL*_*TJL 104

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

DISM /online /cleanup-Image /spsuperseded
Run Code Online (Sandbox Code Playgroud)

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

  • 或者,您可以使用磁盘清理工具中的“清理系统文件”选项并删除 Service Pack 备份文件。 (8认同)
  • 是否还有其他适用于 Windows 7 的命令也可以删除非 SP 更新备份? (6认同)
  • @Pies,我先运行了磁盘清理,DSIM 仍然摆脱了额外的 ~3GB(测量 % 可用磁盘空间,而不是文件夹大小)。所以两者都值得。 (5认同)
  • @UpTheCreek,你确定吗?做磁盘清理,清理系统文件后,我得到`C:\Windows\system32>DISM /online /cleanup-Image /spsuperseded Deployment Image Servicing and Management tool Version: 6.1.7600.16385 Image Version: 6.1.7600.16385 Service Pack Cleanup can 't continue: 未找到 Service Pack 备份文件。操作成功完成。` (3认同)
  • 太好了,我只是想清理 Windows 7 SP1 (2认同)

Mat*_*haq 47

TL; 博士

winsxs 实际上包含硬链接。它不会像您想象的那样占用更多的额外数据。

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

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


winsxs 不是问题

......这是一个解决方案!(嗯,主要是。)

摘要,“标记为答案由罗尼弗农,MVP,主持人”,在这里说

哇,关于硬链接和 winsxs 的长时间讨论。无论如何,这里有一些我对所有工作原理的理解的总结要点。

首先用 Andre.Ziegler 上面发布的完美答案回答 OP 的问题,你不要碰 winsxs。也许某些文件可以像 mp3、avi 等一样被修剪,但其余的系统文件应该单独保留。我也在使用 Ronnie Vernon 上面发布的链接外壳扩展,可以轻松查看哪些是硬链接(红色箭头),哪些是简单文件。

在到达这里之前,我在很多地方看到人们在安装了适用于 Windows 7 的 SP1(如 vsp1cln)后要求使用清理工具。没有专用工具,它都集成到磁盘清理服务中。我要在这里做的一个说明是,即使该选项说它会在我清理驱动器后删除数百 MB,该服务也会删除大约 3GB 的多余文件,因此它因系统而异。有趣的是,现在我拥有比安装 SP1 之前更多的空间。不错,女士。

关于硬链接,我对围绕它们产生的混乱感到好笑。我不是一个 linux 极客,我通常只使用软链接……它们对我来说已经足够了,但是人们不知道硬链接是如何工作的,以及如何计算大小。

一组选定的文件,无论是否链接,将始终计为一个总和。这意味着,如果我拿一个 10MB 的文件,并制作 2 个硬链接,那么它们三个的选择将有 30MB,这是正确的大小,因为与与文件原始主文件表条目相关的软链接不同,有0个字节,硬链接与数据本身有关,在MFT中有自己的条目但指向相同的数据地址,显然具有实际数据的大小,相同的时间,属性等。为什么,下面。

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

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

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

winxs 是什么?一个更好的 dllcache。在 XP 中使用 dllcache 的地方,我们有文件的副本,因为它们被克隆后实际上增加了大小使用量,这实际上提高了使用率,但不能完全保护(针对病毒)。如果流氓卸载程序认为它必须从 System32 中删除一些运行时库,它只会删除链接,而不是数据,然后将重新创建链接,同时将数据空间使用率保持在尽可能低的水平,这比在 cab 中存档 winsxs 并具有沿着原始文件的驾驶室。winsxs 还带来了序列化,将名称相同但版本不同的文件分隔开来,为了开发人员,这是一件好事/坏事,它使他们懒得正确编码,但是当他们不想再编码时它会有所帮助。

我这样做是为了帮助那些出于与我相同的原因而来到这里的人……在 SP1 之后 winsxs 过度“使用空间”。我希望它有帮助。


era*_*ran 34

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

在那个地方,我发现不会危及操作系统稳定性的唯一方法是慷慨地使用“压缩内容以节省磁盘空间”设置。

通过压缩 Windows 目录下的所有备份目录,我能够将目录大小从 6.5 GB 减少到 5 GB,而且没有明显的副作用。在 Window 目录之外的一些东西上使用它会进一步扩展你的 10 GB。

  • 我不确定这种技术是否是一个好主意——winsxs 树中的许多文件都是硬链接。对这些文件启用压缩会压缩文件的所有实例吗?可能会出现一些意外的性能后果。 (6认同)
  • @FiascoLabs,你有没有注意到这是一个 4 年前的问题,它特指 10GB 驱动器?您也可以说“没有人使用 Vista”。现在可能是真的,但在提出问题的时候并非如此。 (3认同)
  • 我尝试压缩它,然后我对文件夹说“拒绝访问”,然后是 poqexec.log。假设它是一个读锁。有什么可以绕过这个吗? (2认同)

Tom*_*rle 28

如果您有 Vista 并安装了 SP2,您可以使用新的Service Pack Clean-up Tool清理旧的系统文件。

  1. 单击开始>所有程序>附件>命令提示符或单击开始>运行并键入cmd以打开命令提示符窗口
  2. 执行命令“Compcln.exe”。路径是“c:\Windows\System32\compcln.exe”。
  3. 系统会提示用户是否在系统中永久保留 Vista SP2。
  4. 输入“Y”并回车,系统将开始执行windows组件清理。

  • 没有为我节省这么多,但我可以确认该工具存在并为我节省了 G plus (4认同)

mag*_*981 23

Windows 8 中,您可以通过删除 Windows 功能来减小 WinSxS 文件夹的大小:

DISM.exe /Online /Disable-Feature /Featurename:<name> /Remove
Run Code Online (Sandbox Code Playgroud)

重要的是Windows 8新增的/Remove参数。

WinSxS 中的大部分空间用于您随时间安装的 WindowsUpdates。在Windows 8/Windows 10 中,您可以检测并删除运行以下命令的更新,这些更新被更新的更新(如更新的累积 IE 更新)取代

dism.exe /online /cleanup-image /startcomponentcleanup
Run Code Online (Sandbox Code Playgroud)

或运行磁盘清理向导并选择“Windows Update Cleanup”

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

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

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

在此处输入图片说明

查看不同的文件大小。

Windows 8.1 添加了新的 DISM 命令。在/startcomponentcleanup得到一个新的参数/ResetBase,让您的最后一次更新的永久,并删除所有旧文件,以节省更多的空间。

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

在此处输入图片说明

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

  • 这现在也可用于 Windows 7 SP1:http://support.microsoft.com/kb/2852386 (2认同)

Ben*_*ngs 20

您可以使用VSP1CLN.EXE使 SP1 永久化,根据此页面将释放被 SP1 取代的组件。

  • 这些人用这个工具减少了 7GB:http://www.bit-tech.net/blog/2009/07/24/winxs-why-my-vista-install-bloated-to-28gb/ (5认同)

Mar*_*son 9

好消息!现在有一种官方认可的方法,来自 Microsoft,用于 Windows 7 SP1,用于清理您的 WinSXS 文件夹

  1. 安装 HotFix 2852386 - 您可以手动下载,也可以等待它通过您的 Windows 更新
  2. 这为磁盘清理向导(在清理系统文件下)添加了一个新选项,您可以为“Windows 更新清理”启用该选项。勾选这个选项。
  3. 单击确定

警告:运行 WinSxS 文件夹清理后,您可能无法卸载某些 Windows 更新。


Jef*_*ood 7

看起来终于有一种方法可以Windows 8.1 service pack 1 和 Windows Server 2012 R2 中做到这一点

组件店分析工具:

Dism.exe /Online /Cleanup-image /AnalyzeComponentStore

在扫描结束时,用户会得到这样的结果报告(winsxs 文件夹的实际大小):

分析组件存储结果

组件存储清理:

如今,组件存储清理必须由最终用户通过运行 DISM 或使用磁盘清理向导手动触发。为了让 Component Store Cleanup 对普通最终用户更有用,将其添加到维护任务中,自动为最终用户节省磁盘空间。为了实现这一点,将进行更改以允许在不需要重新启动的情况下卸载被取代的内置驱动程序(今天,CBS 完成的所有驱动程序安装/卸载都需要重新启动)。

  1. Dism.exe /online /Cleanup-Image /StartComponentCleanup

  2. 磁盘清理工具,清理系统文件按钮。

    磁盘清理工具

  3. schtasks.exe /Run /TN "\Microsoft\Windows\Servicing\StartComponentCleanup"

  • 之前已经发布了:http://superuser.com/a/594216/174557 无需两次发布相同的内容;) (4认同)

小智 7

Dism++就是您正在寻找的(https://www.chuyu.me/en/index.html)。

您将节省千兆字节的空间......

您需要选择“替换的 WinSxS 程序集”。如果您这样做 - 它会向您发出警告,指出无法卸载这些已安装的更新。点击确定,然后扫描

在此输入图像描述

它会让您了解将节省多少空间。点击清理,它应该清理该空间。

  • 这个答案应该是解决方案,还有数百票!我已经搜索了好几天了,总是发现同样的垃圾:磁盘清理、DISM,等等。他们所有人都坚持认为没有任何内容可以被删除。然而 WinSxS 有 10GB(以及类似的其他目录)。只有使用这个 Dism++,我才能在我的 Win7 Enterprise SP1 VM 上回收 7GB(!)(而其他“解决方案”没有释放一个字节) (2认同)