我使用的Vista虚拟机只有一个10 GB的虚拟硬盘-我担心它会随着时间的推移空间不足。
我使用TreeSize来检查问题所在。.

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

什么是Windows Side By Side文件夹?好吧,这在这里很好地解释了。

操作系统中的所有组件都在WinSxS文件夹中找到-实际上,我们将此位置称为组件存储。每个组件都有一个唯一的名称,其中包括为其构建的版本,语言和处理器体系结构。 WinSxS文件夹是在系统上找到该组件的唯一位置,通过在组件存储中进行硬链接,可以“投影”在系统上看到的文件的所有其他实例。让我重复最后一点–操作系统中每个文件的每个版本只有一个实例(或完整数据副本),并且该实例位于WinSxS文件夹中。因此从这个角度来看,WinSxS文件夹实际上是整个OS的整体,在下层操作系统中称为“扁平”文件夹。这也解释了为什么在运行诸如System File Checker(SFC)之类的操作时,或在安装其他功能和角色时,不再提示您输入媒体的原因。这说明了为什么文件夹从头开始很大,但为什么呢?随着时间的流逝而变得越来越大–这个问题的答案就是维修。在Windows的早期版本中,服务的原子单位是文件,而在Windows Vista中则是文件。当我们更新特定的二进制文件时,我们会发布整个组件的新版本,并且该新版本将与原始版本一起存储在组件存储中。组件的较高版本已投影到系统上,但商店中的较旧版本未受影响。原因是组件存储如此之大的第三部分。

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

一个同事最近收到了他每两年工作一次的笔记本电脑更新,并且正在用Vista加载新笔记本电脑。出于某种原因,他的硬盘驱动器C:仅被分区为25GB,其余空间则保留给更大的驱动器D:。
无论如何,在加载许多Windows Update之后,他几乎没有剩下任何驱动器空间在C:上,由于某种原因,WinSxS目录已膨胀到8GB以上。
虽然我知道WinSxS(Windows并排)目录的用途,但我不确定该目录为什么会

我并不真的担心所有这些重复文件的安全性,但是我确实关心由于磁盘空间不足而导致VM爆炸的问题。 。所以..可以以任何方式安全地削减/ winsxs吗?似乎不可能。.

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

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

评论

TreeSize Free ...为此,我使用windirstat.info ;-)

您不能扩展VM并扩展主分区吗?

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

winsxs中有很多硬链接,因此大小也经常被过度报告。

有关超级用户的第一个问题

#1 楼

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

DISM /online /cleanup-Image /spsuperseded


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

评论


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

–杰夫·阿特伍德
2011年3月9日22:21

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

–银河忍者
2011年4月24日在3:42

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

–MichałT
2012年3月30日14:16

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

–马特·威尔基
2012年11月2日21:00

@UpTheCreek,您确定吗?进行磁盘清理后,清理系统文件,然后得到C:\ Windows \ system32> DISM / online / cleanup-Image / spsuperseded部署映像服务和管理工具版本:6.1.7600.16385映像版本:6.1.7600.16385 Service Pack Cleanup可以继续:未找到Service Pack备份文件。操作成功完成。

– Cees Timmerman
2013年6月5日14:59

#2 楼

TL; DR
winsxs实际上包含硬链接。它不会占用您想像的那么多的附加数据。
硬链接就像是磁盘上某个实际文件的“快捷方式”或“指针”。硬链接本身不会占用任何硬盘空间:它仅用作重定向。
由于winsxs由硬链接组成,因此删除这些链接不会释放任何空间。实际文件将继续保留在磁盘上的各个位置。

winsxs没问题
...这是一个解决方案! (嗯,主要是这样。)
总结,“主持人MVP Ronnie Vernon标记为答案”在这里说:

哇,关于硬链接和winsxs的长期讨论。无论如何,这是我对所有工作原理的了解的一些摘要。
首先用安德烈·齐格勒在上面发表的完美答案回答OP的问题,触摸winsxs。也许某些
文件可以像mp3,avi等一样进行修整,但其余的
系统文件应单独放置。我也正在使用Ronnie Vernon上面发布的Link Shell Extension
,通过简单的方法可以看到哪些是硬链接
(红色箭头)和哪些是简单文件。
在到达这里之前,我看到了很多地方,人们在安装适用于Windows 7的SP1(例如vsp1cln)后要求使用
清理工具。没有
专用工具,所有工具都已集成到“磁盘清理”服务中。我要在此说明的一点是,即使该选项
表示在清理驱动器后它会删除数百MB
该服务也会删除大约3GB的多余文件,因此它与
系统到系统。有趣的是,现在我的空间比以前安装SP1的空间还要多。很高兴,女士。
关于硬链接,我对围绕它们的混乱感到很开心。我不是linux极客,我通常只使用软链接...
对我来说足够了,但是人们却不明白硬链接的工作方式和大小。
一组选定的文件(无论是否存在链接)将始终计为
总和。这意味着,如果我拿一个10MB的文件并建立2个硬链接,则全部三个选择的
将具有30MB,这是正确的
大小,因为与软链接不同的是该文件的原始主文件表条目,具有0个字节,硬链接与数据本身相关,在MFT中具有自己的条目,但指向同一个数据地址,显然具有size实际
数据的大小,相同时间,属性等。为什么在下面。
驱动器上还剩多少?简单:与驱动器的
属性报告完全一样。不要选择所有在C上隐藏和
隐藏的文件并进行比较,也不要使用自动执行此操作的工具,因为它不会显示实际的HDD使用情况。为什么?
因为:

该操作将所有选定文件的列表(包括硬链接)作为单独的文件列出,将每个文件都放入并增加大小,因此驱动器属性计算实际存储的数据
不会计算所有文件,不会计算遍历的文件夹和无法读取的文件,并且系统
卷信息通常仅在此保护很大的文件
> manner
该数字仅在文件传输时有用,如果文件,链接等需要复制到DVD或NAS,这就是它们要占用的数量,而链接不会已保留,因为它们是NTFS的特定功能,在ISO,UDF,NFS和其他文件系统下不可用或以不同形式提供,但是将被克隆。

测试...从另一个驱动器复制一个10MB的文件a.exe,并注意可用空间如何减少10MB。进行硬链接(mklink
/ H b.exe a.exe)。现在,选中的这两个文件将在
选择属性中“使用” 20MB,但实际上在驱动器的
中仅验证了10MB属性,其自由空间与文件复制后的可用空间相同。删除一个或两个,可用空间将保持不变。现在删除最后一个,空间将增加10MB。
有没有造成伤害? NO。
什么是winsxs?更好的dllcache。在XP中使用dllcache的地方,由于已经克隆了文件,因此实际上已经增加了文件大小的使用副本,这实际上提高了使用率,但并没有全面保护(针对病毒)。如果流氓卸载程序认为必须
从System32中删除某些运行时库,则它只会删除
链接,而不删除数据,则将在保留数据空间使用率的同时重新创建链接。尽可能以最低的成本胜过在驾驶室中存档
winsxs并使驾驶室与原始文件并排放置。同样,
winsxs带来了序列化,对具有相同名称但不同版本的文件进行分隔,这对开发人员而言是一件好事
/坏事,这使得它们懒惰地正确编码,但是
当他们不想再编写代码时会提供帮助。
我这样做的原因是,出于相同的原因,我帮助了在这里着陆的人
... winsxs过度使用了“空间”在SP1之后。希望它对您有帮助。


评论


这个答案是不是一个非常重要的方面,而这个方面在公认的答案中是完全没有的?

–马夫
15年8月13日在11:24

#3 楼

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

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

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

评论


我尝试压缩它,然后对文件夹说“拒绝访问”,然后输入poqexec.log。假设这是一个读锁。有什么可以绕过这个吗?

– Quintin Par
09年9月15日在6:41

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

– Hello71
2010年6月13日在15:15

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

–duffbeer703
2011-12-9 17:41

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

–eran
2013年6月22日14:01

@eran但是所有关于winsxs的Win7问题都已关闭,因为此问题重复

– Tobias Kienzler
13年7月17日在12:29

#4 楼

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


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


评论


我在Vista SP1中找不到此文件

–铅笔
2010-2-16在15:44

是的,它可能是Vista SP2中的新功能。

– Tomas Andrle
10 Mar 6 '10 at 0:48

没有为我节省太多,但是我可以确认该工具存在,并且为我节省了G +

–itj
2010-4-5 20:45

W10中没有Compcln.exe。

– Laurie Stearn
19-10-6在7:05

#5 楼

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

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


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

dism.exe /online /cleanup-image /startcomponentcleanup


或运行磁盘清理向导,然后选择“ Windows Update清理”。







还要确保您已安装服务堆栈更新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:support.microsoft.com/kb/2852386

–马克·亨德森(Mark Henderson)
13年10月9日,0:54

在这里,在1809年,StartComponentCleanup之前在磁盘上是12.4 Gb。在StartComponentCleanup之后,在磁盘上是6.54 GB,这是一个很大的改进。 92个挂起的删除,没有挂起的重命名。在WinSXS中的76812文件中,21452占用磁盘上的2.90 Gb,日期为去年9月至10月,当时计算机更新为1803。这是当前W10安装的典型代表吗?还是我们仍被阻塞?

– Laurie Stearn
19-10-6在12:52

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

–magicandre1981
19-10-6在14:30

#6 楼

您可以使用VSP1CLN.EXE来使SP1成为永久文件,根据此页面,此文件将释放由SP1取代的组件。

评论


这些人使用此工具节省了7GB:bit-tech.net/blog/2009/07/24/…

–hyperlug
09年7月26日在17:01

#7 楼

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



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

注意:运行WinSxS文件夹的清理后,您可能无法卸载某些Windows Update。

#8 楼

看起来终于可以在Windows 8.1 Service Pack 1和Windows Server 2012 R2中做到这一点。

组件存储分析工具:

Dism.exe /Online /Cleanup-image /AnalyzeComponentStore

在扫描结束时,用户将获得结果报告(winsxs文件夹的实际大小),如下所示:



组件存储清理:<如今,最终用户必须通过运行DISM或使用磁盘清理向导手动触发组件存储清理。为了使Component Store Cleanup对普通最终用户更有用,它将被添加到维护任务中,自动为最终用户节省磁盘空间。为此,将进行更改以允许卸载被替换的收件箱驱动程序而无需重新启动(今天,由CBS完成的所有驱动程序安装/卸载都需要重新启动)。



Dism.exe /online /Cleanup-Image /StartComponentCleanup

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



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


评论


之前已经发布过:superuser.com/a/594216/174557无需两次发布同一内容;)

–magicandre1981
2014年5月5日下午4:13

#9 楼

Dism ++是您所需要的(https://www.chuyu.me/zh/index.html)。

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

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


它可以使您知道要节省多少空间。点击清除,它应该清除该空间。

评论


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

–猎犬
17-2-27在14:47

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

–游侠怪胎♦
17-2-28在1:30



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

–防晒
17/09/21在12:00



这个答案应该是解决方案,还有数百票赞成票!我一直在寻找几天,总是发现相同的废话:磁盘清理,DISM,等等。他们所有人都坚持不删除任何内容。但是WinSxS有10GB(以及其他类似目录)。只有使用此Dism ++,我才能在Win7 Enterprise SP1 VM上回收7GB(!)(而其他“解决方案”没有释放单个字节)

– divB
20-04-17在21:02

我在VM上的Win7 Pro上运行了它,它释放了大约8Gb的内存,主要是从“替换的WinSxS程序集”和“ Windows下载缓存”中释放的。到目前为止,该操作系统似乎运行良好。

– RusI
20年7月18日在15:19

#10 楼

希望有一个简单的单行将很有帮助,否则杰夫·阿特伍德(Jeff Atwood)的好答案会错过/ResetBase开关。

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

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


在Windows 8.1及更高版本中它可以工作

#11 楼

除上述解决方案外,一种获取大量空间的方法是压缩整个文件夹内容。但是,至少从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


注释/提示:


如果手动完成,分组标记为建议的运行这些命令的方式。通常,应该没有问题(除了一些跳过的文件,因为它们正在使用中),但是应该检查每个组的结果
我已经在家庭和工作场所的各种操作系统上执行了以下步骤:Win7x64 ,Win10x64,Windows Server 2008R2和Windows Server 2012,到目前为止,我还没有发现任何问题。
某些步骤需要花费一些时间,尤其是压缩时间。大多数步骤将迭代并显示已处理的文件。最小化命令提示符窗口可能会提高速度。


#12 楼

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

现在开始修复!


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

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

评论


您可以安全地删除winsxs文件吗?您确定吗?!

–UpTheCreek
2011年1月21日在8:53