一、分区与分区表

分区和卷是一个经常换着使用的术语。通常情况下没有什么问题,因为他们是同一件事情。只是说法上稍有不同而已。当然,理解这两个术语之间的差异也是成为专业的调查人员所必须掌握的一部分。一个分区是一系列的连续的扇区所组成的,这些扇区由一个文件系统来进行编址。一个卷,是一组编址的扇区,可以用于组织并存储相关的数据。这些可以编址的地址可以是不连续的―― 这就是他们之间的不同。

当卷只由一个分区组成的时候,他们在功能上是一致的。当卷跨越了多个分区或者磁盘的时候,这个区别就很明显了。卷是逻辑的存储单元,并由操作系统分配了一个盘符。从理论上来讲,绝大多数的操作系统可以支持24个卷,从C到Z。A和B是保留供软盘使用的。如果在系统上只安排一块物理硬盘,在理论上来讲可以分为24个卷。但从我们对MBR的讨论来看,我们最有64个字节可以用来跟踪分区的分配,每个分区只可以用16个字节,最多可以有4个分区。那么他们是如何来组织24个分区的呢?

答案就是扩展分区。在定义的4个分区里,至少得有一个是扩展分区。分配到扩展分区的空间可以被进一步划分为更小的分区。每个子分区都包含一个分区表,它位于该分区的第一个扇区 。每个分区都指向下一个分区。按照这样的方式可以扩展至24个分区,每个分区都这样描述自己,并指向下一个,一直到最后一个分区。你很少会遇到比较少的分区的这种情况,在理论上讲,你可以最多遇到24个分区。分区的类型也是可以由操作系统和主机来决定的。每16个字节中的第5个字节决定了分区的类型。在扩展分区及其子分区里都是使用如上相同的设置。四个分区中的第一个字节决定了某一个分区是否为活动分区,也就是启动分区。只能存在一个活动分区,0x80表明它是活动分区。而其他的分区标识为0x00。表1.1 定义了分区表的字段。

这些都是分区为FAT12, FAT16, FAT32,及 NTFS 时的典型设置。基本都为这一规则:


偏移(十进制)

名称

长度

描述

446

启动字节

1 字节

启动状态:0x80表示活动状态,否则,它会是0x00

447

起始磁头号

1 字节

对于CHS模式,这是起始磁头号或者分区的驻面号

448

起始柱面与扇区号

2 字节(16 位)

对于CHS模式,起始柱面为10位。而起 扇区为6位。一共为16位。

450

分区类型

1 字节

这为分区和文件系统的类型。

451

结束磁头号

1 字节

对于CHS模式,这是一个分区的结束 磁头号。

452

结束柱面与扇区号

2 字节

对于CHS模式,结束柱面为10位,而结束扇区为6位,共16位。

454

相对扇区号

四字节(32比特或者DWORD)

对于LBA模式,这是分区之前的扇区数,也是该分区的起始扇区号。

458

总扇区号

四字节(32比特或者DWORD)

对于LBA模式,这是该分区里的所有的扇区总和。

* 该字段将重复很多次,如果定义了分区的话,其他的起始点为偏移462, 478, 和 494。


1 . 1 分区表字段的定义

经常使用的磁盘分区工具,如FDISK, DISKPART, 或者Disk Manager.。其他的常见的分区是Linux的EXT2/3 和Reiser,交换分区,Solaris (UFS), 和Mac OSX (HFS+), 这些分区在EnCase的版本5里都支持。在Windows的操作系统里,分区利用这些工具来传递操作系统。如果你需要建立其他的分区,你可以使用第三方的工具,如Symantec的PartitionMagic和V-Communications的Partition Commander。

使用磁盘管理器(在Windows 2000/XP),当你使用向导创建一个分区的时候,格式化是自动完成的。如果使用FDISK来创建分区的话,分区必须使用高级格式化命令。当你使用格式化命令来格式 化FAT12/16/32 分区时,将会发生下列过程:

1. 磁盘扫描该错误,然后把坏扇区标识出来。

2. 驱动器的头将放在分区的第一个柱面,并写入一个VBR。

3. FAT 1将写入磁头1的第二扇区。紧跟其后的为FAT 1, FAT 2。FAT表为空,除了标识为坏簇的簇。

4. 写入一个空白的根目录。

5. 如果指定/s 这一参数,将传递系统文件。

6. 如果指定了/v 这一参数,将提示用户输入一个卷标。在使用FDISK或者磁盘分区处理的过程中,将会写入MBR。它包括MBR的启动代码。同时,也将写分区表项。在一个高级格式化的过程中,将写入一个VBR,和其他的文件系统特征。

我们提到了一些文件系统的名字,例如:FAT,NTFS和Linux。在本章里,我们从头到尾彻底地来了解FAT文件系统的内容结构和功能,并且我们还要了解CDFS文件系统,并跟大家了解如果在删除分区之后如何查找并恢复分区表。

   FAT文件系统已经存在了近四分之一个世界了,而且还要陪伴我们不知多少年。它仍用于软盘,闪存媒体,USB指盘中,而且还在继续使用。Windows 2000默认为FAT文件系统,Windows XP也可以选择安装为FAT文件系统。所以,作为一名计算机调查人员,你可能接触到的很多案件涉及到FAT文件系统。

   在本章,你将了解到FAT文件系统的数据结构,主要由两部分组成:文件分配表(FAT=File Allocation Table)和目录项所组成。你将学习到目录项是如何存储文件名和属性的(我们又把属性称为元数据Metadata),以及FAT如何用来跟踪数据存储区域的分配状态(是按照“簇”的方式来进行组织的),及它们之间是如何连接到一起并存储数据的。

你将理解FAT文件系统是如何交叉引用来应对比较大的数据存储设备。最后,你将要了解各种CD文件系统和NTFS文件系统的各个组件。在这些不同的文件系统中,我们将同时向大家介绍它们之间的共同点与不同点。

FAT基础

FAT文件系统的第一个组件是目录项。在所有的FAT文件系统中(FAT12, FAT16, 和FAT32),每个文件和目录项都被参考并且在一个独立的表项中进行描述。目录项是32个字节长,并且包括了文件或目录的名字,它的长度、它的起始盘区(或者开始簇号),及其他的文件属性或者元数据(创建时间,最后一次访问时间,最后一次写入的时间)。数据的内容并不存在于目录项中,而是存储于我们称之为“簇”的数据空间中。簇由一个或多个扇区组成,簇是文件或目录能够存储的最小单元。如果一个文件的大小超过了一个簇的空间,它将会被分配另外的簇来存储数据。目录项只跟踪起始扇区,但并不跟踪文件所使用的其他簇。

在FAT文件系统中,一个主要的组件我们称为文件分配表(FAT--File Allocation Table)。在其他的功能中,如果一个文件超过了一个簇的话,可以跟踪一个文件的簇的顺序。FAT同时跟踪簇的分配状态,确保操作系统可以把数据存储在可用的区域,并且存储的数据不会被覆盖。FAT同时也跟踪坏的簇,以确保它们不会被使用。

随着存储器容量的越来越大的发展,相继出现了FAT的三个版本,就是我们所说的FAT12,FAT16,FAT32。下列的数据描述了在一个FAT表中的一个项的大小。

在一个FAT12的系统中,目录项是一个12个比特项的数组。每个12位比特的顺序代表一个簇,从0开始,到卷的最后一个簇结束。理论上来讲,一个12位比特可以表示4096个簇。但由于指定的簇是保留着的,所以FAT12最多可以支持4084个簇。

与此相类似,一个FAT16的文件系统有一个16个比特的目录项,一个32位的FAT文件系统有32位的目录项。考虑指定的保留值,一个FAT16的文件系统最多可以支持65,524个簇,一个FAT32文件系统理论上最多可以支持268,435,445个簇(但是因为MBR的限制为67,092,481簇,所以一个分区最多支持的容量为2TB)。在FAT12/16及FAT32上还有一些区别,但主要体现在他们所支持的簇的数量上面,见表2.1.

FAT类型

最大可以支持的簇数

FAT12

4,084

FAT16

65,524

FAT32

67,092,481

表3 . 1 每一类的FAT类型所支持的最大扇区数