和vista一样,Windows7下的winsxs文件夹庞大的吓人。有些人就手痒了。

winsxs就是Windows Side-by-Side。这里保存Windows重要的链接库。包括C++运行库等。Win7的winsxs甚至包含了ntkrnlpa等至关重要的文件。如果你搜索过一些系统文件的话。会发现winsxs和SYSTEM32下都存在同一个一模一样的文件。

单纯把winsxs理解为windows的缓存是不对的。这里要引入Win7、Vista才产生的硬链接机制

硬链接(hard link, 也称链接)就是一个文件的一个或多个文件名。再说白点,所谓链接无非是把文件名和计算机文件系统使用的节点号链接起来。因此我们可以用多个文件名与同一个文件进行链接,这些文件名可以在同一目录或不同目录。一个文件有几个文件名(用ln命令实现多个文件名),我们就说该文件的链接数为几。由定义可知,此链接数可以是1, 这表明该文件只有一个文件名。总之,硬链接就是让多个不在或者同在一个目录下的文件,同时能够修改同一个文件,其中一个修改后,所有与其有硬链接的文件都一起修改了。

简单来说,硬链接是基于文件系统级别的快捷方式。Linux有Windows则在VISTA后引入

winsxs正是采用了这样的技术。将SYSTEM32下的文件与winsxs下的文件关联起来。不止是winsxs。C盘整个目录都大量采用了硬链接技术

这样做的好处显而易见:

1.节省硬盘空间。同样的文件,只需要维护硬连接关系,不需要进行多重的拷贝,这样可以节省硬盘空间。
2.重命名文件。重命名文件并不需要打开该文件,只需改动某个目录项的内容即可。
3.删除文件。删除文件只需将相应的目录项删除,该文件的链接数减1,如果删除目录项后该文件的链接数为零,这时系统才把真正的文件从磁盘上删除。
4.文件更新。如果涉及文件更新,只需要先在WinSxS目录里面下载好一个新版本,然后修改Windows\System32下面同名文件的硬连接关系,从旧版本的硬连接指向新版本的硬连接,这样就能够快速的完成文件的更新工作,而不需要进行文件的复制,速度也会快不少。
5.卸载补丁。遇到需要补丁卸载的情况,只需要把硬连接指向改为旧版本就可以了,没有文件替换的问题。而且建立了硬连接关系的文件之间的修改是同步的,因此只要有一方被修改了,另一方也会得到修改。

这样说来,删除winsxs也就变得没有了意义。事实上,删除winsxs的后果非常可怕。会导致系统无法启动。并且是一种非常难以解决的错误。到那时大概只能有重装这一条道路。

附上小工具–搜索windows所有硬链接并显示windows实际占用空间的小工具

那么,清理winsxs可不可行呢?

网上已经有了牛人写了批处理,对winsxs的冗余过期文件进行清理。说得条条是道

本工具的设计思想就是删除所有的旧文件。所有满足如下全部条件的目录都会被移动到C:\Windows\winsxs_del目录中。

·存在比自身更新的版本
·本身不是最新版本

但在实际使用过程中[我很不辛的做了小白鼠]。发现清理后硬盘空间几乎没少[硬链接作怪]。并且自动更新所依赖的文件被清理掉了[查找日志给弄了回来]。据说还可能导致USB设备无法自动安装驱动。这都已经杯具到可以重装了。

大概除了等待SP2补丁包出来,就只有重装或者凑合着用这两个办法了。