Windows 文件管理高级手册-01
X.1 文件系统简介 文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于 NAND Flash 的固态硬盘)或分区上 的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件 机构称为文件管理系统,简称文件系统。文件系统由三部分组成:文件系统的接口,对对象操纵和管理的 软件集合,对象及属性。从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件 存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转 储文件,控制文件的存取,当用户不再使用时撤销文件等。下面介绍几种在 Windows 操作系统中常用的文 件系统。
FAT 文件系统
FAT 是 File Allocation Table 的简称,是微软在 Dos/Windows 系列操作系统中共使用的一种文件系统的总 称。它几乎被所有的操作系统所支持。 FAT 文件系统又分为 3 种,分别是 FAT16、FAT32 和不太常见的 FAT12。
FAT12: 这是伴随着 Dos 诞生的“老”文件系统了。它采用 12 位文件分配表,并因此而得名。而以后的 FAT 系 统都按照这样的方式在命名。在 DOS3.0 以前使用。但是在现在,我们都还能找得到这个文件系统:用 于软盘驱动器。当然,其他地方的确基本上不使用这个文件系统了。Fat12 可以管理的磁盘容量是 8M。 这在当时,没有硬盘的情况下,这个磁盘管理能力是非常大的。
FAT16: 在 Dos2.0 的使用过程中,对更大的磁盘的管理能力的需求已经出现了,所以在 Dos3.0 中,微软推出 了新的文件系统 Fat16。除了采用了 16 位字长的分区表之外,Fat16 和 Fat12 在其他地方都非常的相 似。实际上,随着字长增加 4 位,可以使用的簇的总数增加到了 65536。在总的簇数在 4096 之下的时 候,应用的还是 Fat12 的分区表,当实际需要超过 4096 簇的时候,应用的是 Fat16 的分区表。刚推出 的 Fat16 文件系统管理磁盘的能力实际上是 32M。这在当时是看来是足够大的。1987 年,硬盘的发展 推动了文件系统的发展,Dos4.0 之后的 Fat16 可以管理 128M 的磁盘。然后这个数字不断的发展,一直 到 2G。在整整的 10年中,2G的磁盘管理能力都是大大的多于了实际的需要。需要指出的是,在 windows95 系统中,采用了一种比较独特的技术,叫做 VFat 来解决长文件名等问题。 FAT16 分区格式存在严重的缺点:大容量磁盘利用效率低。在微软的 DOS 和 Windows 系列中,磁盘文件 的分配以簇为单位,一个簇只分配给一个文件使用,不管这个文件占用整个簇容量的多少。这样,即 使一个很小的文件也要占用一个簇,剩余的簇空间便全部闲置,造成磁盘空间的浪费。由于分区表容量的限制,FAT16 分区创建的越大,磁盘上每个簇的容量也越大,从而造成的浪费也越大。所以,为了 解决这个问题,微软推出了一种全新的磁盘分区格式 FAT32,并在 Windows 95 OSR2 及以后的 Windows 版本中提供支持。
FAT32: Fat32 文件系统将是 Fat 系列文件系统的最后一个产品。和它的前辈一样,这种格式采用 32 位的文件 分配表,磁盘的管理能力大大增强,突破了 FAT16 2GB 的分区容量的限制。由于现在的硬盘生产成本 下降,其容量越来越大,运用 FAT32 的分区格式后,我们可以将一个大硬盘定义成一个分区,这大大 方便了对磁盘的管理。 FAT32 推出时,主流硬盘空间并不大,所以微软设计在一个不超过 8GB 的分区中,FAT32 分区格式的每 个簇都固定为 4KB,与 FAT16 相比,大大减少了磁盘空间的浪费,这就提高了磁盘的利用率。 FAT16 和 FAT32 文件系统的优点是兼容性高,可以被绝大部分操作系统识别和使用。但是由于出现的比 较早,它们也有很多不足的地方: 单文件最大的尺寸:FAT32 系统支持到 4GB,FAT16 系统只支持到 2GB,在现在高清视频逐渐普及的今 天,单个视频的文件以及远远超出了 4GB 的容量。 FAT16 和 FAT32 文件系统都不支持对文件进行高级管理,比如加密、压缩存储、磁盘配额等功能。
NTFS 文件系统
为了解决 FAT16/FAT32 文件系统安全性差、容易产生碎片、难以恢复等缺点,微软在 Windows NT 操作 系统和之后的基于 NT 内核的操作系统中使用了新的 NTFS 文件系统。Windows 10 中提供的高级文件管理功 能都是基于 NTFS 文件系统来实现的。如图 X-1 所示,这个磁盘使用的就是 NTFS 文件系统。
NTFS 文件系统结构总览:
当用户将硬盘的一个分区格式化成 NTFS 分区时,就建立了一个 NTFS 文件系统结构。NTFS 文件系统与 FAT 文件系统一样,也是用簇为基本单位对磁盘空间和文件存储进行管理的。一个文件总是占有若干个簇, 即使在最后一个簇没有完全放满的情况下,也是占用了整个簇的空间,这也是造成磁盘空间浪费的主要原 因。文件系统通过簇来管理磁盘管理,并不需要知道磁盘扇区的大小,这样就使 NTFS 保持了与磁盘扇区大 小的独立性,从而使不同大小的磁盘选择合适的簇。 NTFS 分区也被称为 NTFS 卷,卷上簇的大小,又称为卷因子,其大小是用户在创建 NTFS 卷时确定的。 和 FAT 文件系统一样,卷因子的大小和文件系统的性能有着非常直接的关系。当一样簇占用的空间太小时, 会出现太多的磁盘碎片,这样的空间和文件访问时间上会造成浪费;而相反的当一个簇占用的空间太大时, 直接造成了磁盘空间的浪费。因此,最大限度地优化系统对文件的访问速度和最大限度地减少磁盘空间的 浪费是确定簇的大小的主要因素。簇的大小一定是扇区大小的整数倍,通常是 2(n 为整数)。 NTFS 文件系统使用了逻辑簇号(LCN)和虚拟簇号(VCN)对卷进行管理。其中 LCN 是对卷的第一个簇 到最后一个簇进行编号,只要知道 LCN 号和簇的大小以及 NTFS 卷在物理磁盘中的起始扇区就可以对簇进行 定位,而这些信息在 NTFS 卷的引导扇区中可以找到,在系统底层也是用这种方法对文件的簇进行定位的。 找到簇在磁盘中的物理位置的计算公式是: 每簇扇区数*簇号+卷的隐含扇区数(卷之前的扇区总数)=簇的起始绝对扇区号 而虚拟簇号则是将特定文件的簇从头到尾进行编号,这样做的原因是方便系统对文件中的数据进行引 用,VCN 并不要求在物理上是连续的,要确定 VCN 的磁盘上的定位需先将其转换为 LCN。 NTFS 文件系统的主文件表中还记录了一些非常重要的系统数据,这些数据被称为元数据文件,简称为 “元文件”,其中包括了用于文件定位和恢复数据结构、引导程序数据及整个卷的分配位图等信息。NTFS 文件系统将这些数据都当做文件进行管理,这些文件用户是不能访问的,它们的文件名的第一个字符都是 “$”,表示该文件是隐藏的。在 NTFS 文件系统中这样的文件主要有 16 个,包括 MFT 本身($MFT)、MFT 镜像、日志文件、卷文件、属性定义表、根目录、位图文件、引导文件、坏簇文件、安全文件、大写文件、 扩展元数据文件、重解析点文件、变更日志文件、配额管理文件、对象 ID 文件等,这 16 个元数据文件总是 占据着 MFT 的前 16 项纪录,在 16 项以后就是用户建立的文件和文件夹的记录了。 每个文件记录在主文件表中占据的磁盘空间一般为 1KB,也就是两个扇区,NTFS 文件系统分配给主文 件表的区域大约占据了磁盘空间的 12.5%,剩余的磁盘空间用来存放其他元文件和用户的文件。 NTFS 文件系统具有以下优点:
更安全的文件保障,提供文件加密,能够大大提高信息的安全性。
更好的磁盘压缩功能。
支持最大达 2TB 的大硬盘,并且随着磁盘容量的增大,NTFS 的性能不像 FAT 那样随之降低。
可以赋予单个文件和文件夹权限。对同一个文件或者文件夹为不同用户可以指定不同的权限。在 NTFS 文件系统中,可以为单个用户设置权限。
NTFS 文件系统中设计的恢复能力无需用户在 NTFS 卷中运行磁盘修复程序。在系统崩溃事件中,NTFS 文件系统使用日志文件和复查点信息自动恢复文件系统的一致性。
NTFS 文件夹的 B-Tree 结构使得用户在访问较大文件夹中的文件时,速度甚至比访问卷中较小的文件夹