9GB大小的文件,此时剩余空间是0.1GB
3、用mklink命令给这个1.9GB大小的文件建立了一个硬连接
4、检查这个分区的剩余空间,还是0.1GB,但是如果用资源管理器看test目录的属性,会发现有2个文件,总大小是3.8GB(整个分区才2GB,能够容纳3.8GB大小的文件吗?显然不可能了)
还是针对上述的例子,如果我们把原始的文件 source.txt 删除以后,link.txt文件还是会继续存在的,且内容就是source.txt的文件内容。也就是说,我们删除source.txt,实际上删除的仅仅是这种连接关系,文件本身还是没有被操作的。
关于硬连接,最后一个需要介绍的内容是:当硬连接建立以后,硬连接双方任何一个对象被修改,都会造成对应的连接对象被修改。例如上面的例子:如果修改了link.txt,那么source.txt文件也会同步被修改,反之亦然。这一点和SHELL层面的快捷方式不同,SHELL层面的快捷方式文件LNK仅仅是一个指示关系,修改LNK文件并不影响LNK文件指向的对象,修改LNK文件指向的对象也不会影响LNK文件。
好了,基本知识介绍完了,我们来实际看看Windows目录里面对于硬连接的使用情况吧。
经常看到有人抱怨,Windows\WinSxS目录占用了太多的空间,里面经常发现有同名的文件,而且这些同名的文件在 Windows\System32 目录下面也有存在,这是为啥呢?其实这就是硬连接导致的。
Microsoft 实际上在 Windows\WinSxS 目录和Windows目录之间建立了硬连接的关系,举一个最简单的例子:
对于 Windows 7 RTM 来说,你可以在2个地方找到Ntoskrnl.exe文件。第一个地方是:Windows\System32\ntoskrnl.exe,另外还有一个地方是Windows\WinSxS\x86_microsoft-windows-os-kernel_31bf3856ad364e35_6.1.7600.16385_none_6c06b7c41576a7d9\ntoskrnl.exe,这就是一个典型的硬连接例子。Microsoft 在文件系统上面对 ntoskrnl.exe 做了一个硬连接,使得 ntoskrnl.exe 能够出现在不同的目录里面,但是只占用了一份 ntoskrnl.exe 的硬盘空间。利用这种机制,有下面的一些好处:
•同样的文件,只需要维护硬连接关系,不需要进行多重的拷贝,这样可以节省硬盘空间
•如果涉及文件更新,只需要先在WinSxS 目录里面下载好一个新版本,然后修改 Windows\System32 下面同名文件的硬连接关系,从旧版本的硬连接指向新版本的硬连接,这样就能够快速的完成文件的更新工作,而不需要进行文件的复制,速度也会快不少
•补丁卸载也是一样的,只需要把硬连接指向改为旧版本就可以了,没有文件替换的问题。而且建立了硬连接关系的文件之间的修改是同步的,因此只要有一方被修改了,另一方也会得到修改
说了这么多,那么如何知道 Windows 目录的真实大小呢?Smallfrogs 提供了一个工具,可以很方便的知道您系统里面有哪些文件是有硬连接关系的,以及Windows 目录下真实的文件大小。
工具可以从 http://www.kztechs.com/hardlink/realwindirsize.zip (请使用右键点击另存为...方式下载)或在本文附件下载到,下载解压缩以后,直接运行就可以开始扫描了。
扫描过程比较漫长,扫描完成以后,会看到下面的提示信息:
另外,在realwindirsize.exe所在目录下,会生成一份文件名叫做LinkedFile.TXT的文件,里面记录了Windows目录下各个硬连接的关系。
如上图所示,我们扫描到了65088个文件,其中,真实的文件有48022个,其他17066个文件都是硬连接文件。真实的文件占用了14981682 KB的硬盘空间,而如果你用资源管理器看Windows目录的话,那么会提示说Windows目录9 7 3 1 2 3 4 8 :
本文来源:不详 作者:佚名