为什么/ winsxs文件夹会变大,并且可以缩小?


174

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

我使用TreeSize来检查罪魁祸首。

在此处输入图片说明

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

在此处输入图片说明

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

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

这就解释了为什么文件夹从大开始,而不是为什么随着时间的推移会变大–该问题的答案就是维修。在Windows的早期版本中,服务的原子单位是文件,而在Windows Vista中则是文件。更新特定二进制文件时,我们会发布整个组件的新版本,并且该新版本将与原始版本一起存储在组件存储中。组件的较高版本已投影到系统上,但商店中的较旧版本未受影响。原因是组件存储如此之大的第三部分。

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

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

无论如何,在加载许多Windows Update之后,他几乎没有在C:上留下任何驱动器空间,并且由于某种原因,WinSxS目录已经膨胀到8GB以上。

虽然我知道WinSxS(Windows并排)目录的用途,但我不确定为什么该目录的大小会随着正常的操作系统更新而迅速爆炸。

为了安全起见,我并不是很在乎所有这些重复文件,但是我确实在担心VM因磁盘空间不足错误而爆炸。所以.. 可以安全地削减/ winsxs吗? 似乎没有

管理员出于任何原因都不应该自己清理/ winsxs目录 -这样做可能会使Windows Update和MSI之后无法正常运行。通过将强大的安全描述符放在继承其子目录的目录上,可以防止从目录中意外删除。

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


24
TreeSize Free ... 为此我使用windirstat.info ;-)
Steve Schnepp

6
您不能扩展VM并扩展主分区吗?
萨姆·萨弗隆

1
您可以使用此代码:windowsfixup.com/2009/05/…就我个人而言,除非找到源代码,否则我将远离它
Sam Saffron

11
winsxs中有很多硬链接,因此大小也经常被高估。
Greg D

4
关于超级用户的第一个问题
puretppc 2014年

Answers:


101

安装Windows 7 SP1后,有一个不错的命令可以清除(它为我节省了大约3 GB):

DISM /online /cleanup-Image /spsuperseded

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


2
太好了,我只是想清理Windows 7 SP1
Jeff Atwood

6
Windows 7是否还有其他命令可以删除非SP更新备份?
galacticninja

8
或者,您可以使用“磁盘清理”工具中的“清理系统文件”选项并删除Service Pack备份文件。
米哈尔Ť

5
@Pies,我先运行磁盘清理,DSIM仍然摆脱了额外的〜3GB(测量%可用磁盘空间,而不是文件夹大小)。因此,两者都值得。
马特·威尔基

3
@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 proceed: No service pack backup files were found. The operation completed successfully.
Cees Timmerman 2013年

44

TL; DR

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之前的空间还要大。小姐,女士

关于硬链接,我为它们周围的混乱感到高兴。我不是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归档并具有原始文件旁边的出租车。为了开发人员的缘故,winsxs还带来了序列化功能,将名称相同但版本不同的文件分隔开来,这是一件好事/坏事,这使它们懒惰地正确编码,但在不想再进行编码时会有所帮助。

我这样做是为了帮助任何出于与我相同的原因而落在这里的人……SP1之后,winsxs过度使用了“空间”。我希望这会有所帮助。


这个答案不是一个非常重要的方面吗?
mafu

33

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

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

通过压缩Windows目录下的所有这些备份目录,我能够将目录大小从6.5 GB减小到5 GB,并且没有明显的副作用。在Window目录之外的某些内容上使用它会延伸10 GB甚至更多。


2
我尝试压缩它,然后说“拒绝访问”到该文件夹​​,然后显示poqexec.log。假定它是一个读锁。有什么可以绕过这个吗?
廷丁2009年

1
实际上,您仍然在危及操作系统的稳定性。WinSxS文件夹不应被压缩。实际上,这是个坏主意。只是谷歌“压缩winsxs的”,你会发现。
Hello71 2010年

6
我不确定该技术是一个好主意-winsxs树中的许多文件都是硬链接。对这些文件启用压缩是否会压缩文件的所有实例?可能会有一些意想不到的性能后果。
duffbeer703

3
@FiascoLabs,您是否注意到这是一个已有4年历史的问题,专门针对10GB驱动器?您还可以声明“没有人使用Vista”。现在可能是正确的,但在提出问题时并非如此。
eran 2013年

1
@eran然而,关于winsxs的所有Win7问题都已作为该问题的重复部分被关闭
Tobias Kienzler 2013年

27

如果您具有Vista并安装了SP2,则可以使用新的Service Pack清理工具清理旧的系统文件。

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

我无法在我的Vista SP1中找到它
Pencilslate

是的,它可能是Vista SP2中的新功能。
Tomas Andrle'3

4
没为我节省太多,但是我可以确认该工具存在,并且为我节省了G plus
itj 2010年

W10中没有Compcln.exe
Laurie Stearn

21

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

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

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

WinSxS中最多的空间用于一段时间内安装的WindowsUpdates。在Windows 8 / Windows 10中,您可以运行以下命令来检测并删除由较新的更新(例如较新的累积IE更新)替换的更新

dism.exe /online /cleanup-image /startcomponentcleanup

或运行磁盘清理向导,然后选择“ 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文件夹:

在此处输入图片说明

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


2
现在,它也可用于Windows 7 SP1:support.microsoft.com/kb/2852386
Mark Henderson

此处StartComponentCleanup在1809 年之前是磁盘上的12.4 Gb。在之后的磁盘上是6.54 GB StartComponentCleanup,这是一个巨大的改进。92个挂起的删除,没有挂起的重命名。在76812页的文件的WinSxS文件,21452占用2.90千兆上从九月日期盘至10月,去年,当计算机被更新为1803年。这是一个典型的电流W10的安装,还是我们仍然堵塞?
Laurie Stearn

1
@LaurieStearn我不知道。我仅在VM中运行Win10,并在Windows 8.1主机系统上为每个新的Win10版本创建一个新的VM。
magicandre1981


9

好消息!现在,Microsoft已针对Windows 7 SP1提供了一种官方批准的方法,用于清除WinSXS文件夹

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

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


6

看起来终于有办法做到这一点是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"


4
已经在以前发布过:superuser.com/a/594216/174557无需两次发布相同的内容;)
magicandre1981 2014年

2

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

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

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

在此处输入图片说明

它可以让您了解要节省多少空间。点击清理,它应该清理该空间。


1
应提供有关如何使用此程序的具体说明。我可以从Github获取该程序,但无法访问您提供的链接。
Ramhound

1
我已经在VM上进行了尝试-看起来非常快,而且据我所知,并没有真正破坏任何内容。我可能会玩这个,因为它似乎确实具有一些漂亮的安装后功能(哦,驱动程序备份!)。我已经用基本步骤和屏幕截图编辑了您的答案。希望您会看到其中的区别,并在不久之后进行投票
Journeyman Geek

很棒的工具!与WinSXSLite不同,它为我工作并释放了将近8Gb的空间。
Suncatcher 2017年

1

希望有一个简单的单人行销会有所帮助,否则杰夫·阿特伍德(Jeff Atwood)的出色答案会错过/ResetBase切换。

警告:此开关极大地有助于减小WinSxS文件夹的大小,但会完全删除以前版本的组件,因此您将无法回滚以前安装的任何更新。但是,如果您的系统运行良好,则应该安全(特别是如果您不在生产环境中)

dism.exe /Online /Cleanup-Image /StartComponentCleanup /ResetBase

在Windows 8.1及更高版本中适用


0

除上述解决方案外,一种获取大量空间的方法是压缩整个文件夹内容。但是,至少从Windows 7开始,无法使用资源管理器完成此操作(需要正确的权限)。

这些说明显示了如何实现此目的:

sc query msiserver 
sc query TrustedInstaller

sc stop msiserver
sc stop TrustedInstaller

sc config msiserver start= disabled
sc config TrustedInstaller start= disabled

icacls "%WINDIR%\WinSxS" /save "%WINDIR%\WinSxS.acl" /t

takeown /f "%WINDIR%\WinSxS" /r

icacls "%WINDIR%\WinSxS" /grant "%USERDOMAIN%\%USERNAME%":(F) /t

compact /s:"%WINDIR%\WinSxS" /c /a /i *

icacls "%WINDIR%\WinSxS" /setowner "NT SERVICE\TrustedInstaller" /t

icacls "%WINDIR%" /restore "%WINDIR%\WinSxS.acl"
del "%WINDIR%\WinSxS.acl"

sc config msiserver start= demand
sc config TrustedInstaller start= demand

sc start msiserver
sc start TrustedInstaller

注释/提示:

  1. 如果手动完成,分组标记为建议的运行这些命令的方式。通常,应该没有问题(除了一些跳过的文件,因为它们正在使用中),但是应该检查每个组的结果

  2. 我已经在家庭和工作场所的各种操作系统上执行了以下步骤:Win7x64,Win10x64,Windows Server 2008R2和Windows Server 2012,到目前为止,我没有发现任何问题。

  3. 有些步骤要花费一些时间,尤其是压缩时间。大多数步骤将迭代并显示已处理的文件。最小化命令提示符窗口可能会提高速度。


-4

您可以安全地删除那些文件。如果您再次需要它们,则只需要再安装一些东西即可。

现在修复!

  • 打开Windows资源管理器,然后导航到C:\ Windows \ System32。查找文件“ vsp1cln.exe”。
  • 右键单击该文件,然后选择“以管理员身份运行”选项。
  • Vista Service Pack 1清理工具将删除它已替换的所有冗余文件。

您获得的磁盘空间量将取决于系统,安装了哪些程序等。


16
您可以安全删除winsxs文件吗?您确定吗?!
2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.