学校地址:湖南省 长沙市 雨花区 车站南路红花坡路口 |
学校地址:湖南省 长沙市 雨花区 车站南路红花坡路口 |
windows系统文件我们可以通过资源管理器查看,通过资源管理器可以非常直观地了解到windows目录结构。如果你想要知道这个目录有多大,直接右键属性就能很清晰地了解。但是如果你用同样的方式去查看windows7或者windows vista,显示出来的数据可能就和真实的数据有所差别。这个是为什么呢?
其实微软在设计windows7和windows vista时使用了NTFS文件系统的特性之一:硬连接(Hard Link)来实现WinSxS机制。
安装过vista和win7的朋友都知道,系统盘必须保证是NTFS格式,微软官方提供的解释有以下几点:
系统文件保护所需
各种安全保护机制,如MIC所需
winSXS所需
...
关于 后一点的WinSXS所需,微软没有提供相关资料说明,不过这个也是Windows Vista / Windows 7 系统需要NTFS文件系统的一个条件,因为只有在 NTFS 文件系统上面,才能实现硬连接机制,也才能达到优化Windows目录占用磁盘空间的目的。
一般的快捷方式是创建一个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是不占硬盘空间的。
关于硬盘空间的占用问题,是这样测试的:
1、给硬盘划分一个新分区,空间只有2GB;
2、在这个分区的test目录里面新建了一个1.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文件。
|