但是,我会有那么傻的把一个大家都知道的问题重新翻出来吗?既然提出这个话题,就有我的道理!请各位耐住性子往下看,看看Microsoft又玩了什么样的花活,呵呵。
我们知道,查看一个目录有多大的最快捷的方法就是看看资源管理器文件夹的属性,但是我今天要说的是:如果你用这个方法去看Windows Vista/Windows 7系统的目录,你会被你的眼睛所欺骗,因为,Microsoft在 Windows Vista/Windows 7里面大量使用了NTFS文件系统的特性之一的:硬连接(Hard Link)来实现WinSxS机制!
我们知道,要安装Windows Vista/Windows 7系统,那么系统分区必须是NTFS文件系统。原因有以下一些:
◦系统文件保护所需 ◦各种安全保护机制,如MIC所需 ◦WinSxS 所需 ◦……
关于最后一点的 WinSxS 所需,我没有看到过相关的资料说明,不过可以肯定的是,这也是Windows Vista / Windows 7 系统需要NTFS文件系统的一个条件,因为只有在 NTFS 文件系统上面,才能实现硬连接机制,也才能达到优化Windows目录占用磁盘空间的目的。
关于硬连接,MSDN是这样解释的:
A hard link is the file system representation of a file by which more than one path references a single file in the same volume. To create a hard link, use the CreateHardLink function. Any changes to that file are instantly visible to applications that access it through the hard links that reference it. However, the directory entry size and attribute information is updated only for the link through which the change was made.
简单的说,就是一种针对文件的特殊快捷方式,只不过这种快捷方式的实现和一般的快捷方式不一样。
•一般的快捷方式是创建一个LNK文件,在这个LNK文件里面描述了目标文件/目录的属性,资源管理器或者其他文件管理工具利用SHELL32.DLL里面的API函数获得这个LNK文件所指向的文件/目录,从而进行访问。
•硬连接:是一种基于文件系统级别上的针对文件的快捷方式,基于文件系统级别的含义就是说,只要文件系统启动了,那么对应的快捷方式也就生效了。换句话说,这种连接是常存的,因为文件系统是必须要随机启动的。
硬连接是NTFS文件系统特有的属性之一,在Linux下面,也有类似的机制。硬连接适用于在同一个卷的文件级别,硬连接是不能跨卷的。
Windows Vista / Windows 7 自带了创建硬连接的命令:mklink.exe,利用这个命令,我们可以给指定的文件创建硬连接:
下面的命令将在link.txt和source.txt之间建立硬连接关系
C:\Users\Smallfrogs\Desktop>mklink /h link.txt source.txt
为 link.txt <<===>> source.txt 创建了硬链接
注意上面的例子:link.txt本是一个不存在的文件,但是当执行完mklink命令以后,link.txt文件也就被创建了。其实,link.txt是一个虚假的文件,它是在文件系统层面上对source.txt文件的一个映射,而link.txt是不占硬盘空间的。
关于硬盘空间的占用问题,Smallfrogs 是这样测试的:
1、给硬盘划分一个新分区,空间只有2GB
2、在这个分区的test目录里面新建了一个1.9 7 3 1 2 3 4 8 :
本文来源:不详 作者:佚名