第3章
磁盘和操作系统的逻辑方法
硬盘无法自行运行硬件,需要两个基本软件来运行,BIOS(基本输入输出系统)和 DOS(或操作系统)。磁盘操作系统不直接与计算机和硬盘的硬件对话,但它需要介于两者之间的 BIOS。这就是 BIOS 在计算机中发挥重要作用的原因。
BIOS
BIOS 的基本工作是在硬件或连接到计算机的设备与 DOS 之间提供标准接口。 系统 BIOS 是系统硬件和运行在其上的软件之间的最低级接口. 它在控制对硬盘的访问方面发挥着几个重要作用,例如
- BIOS 中断例程
- 硬盘检测与配置
- 硬盘接口模式支持
为了确保各种硬件和软件产品的互操作性,系统的 BIOS 是根据其硬件的需要量身定制的,并提供了一种让软件寻址硬件的标准方式。这些被称为 BIOS 服务并被许多操作系统和应用程序使用。它们为硬盘提供统一的接口,因此应用程序无需知道如何单独与每种类型的硬盘通信。
使用各种 BIOS 设置在 BIOS 中配置标准 IDE/ATA 硬盘。现代 BIOS 程序可以检测现代 IDE/ATA 磁盘以确定这些参数并自动配置它们。 BIOS 控制哪些类型的接口模式可以与硬盘一起使用,与主板上的系统芯片组和系统 I/O 总线一起使用。
INT 13H 接口和 INT 13H 扩展
BIOS 的主要接口是软件中断 13H,通常称为 INT 13H,其中 INT 代表中断,13H 是十六进制的数字 19。
我们将在本书的编程阶段详细学习和讨论中断在编程中的使用。 Int13H 接口支持许多不同的命令,这些命令可以提供给 BIOS,然后将它们传递到硬盘。中断 13H 包含了我们需要对磁盘执行的大部分任务,例如读取、写入、格式化等。
Int13H 的使用和工作要求调用程序知道硬盘的具体参数,并为例程提供准确的磁头、柱面和扇区地址以允许磁盘访问。
BIOS 使用在 BIOS 设置程序中设置的硬盘几何结构。 Int13H 接口为驱动器几何结构的规范分配 24 位,分解如下:
- 10 位柱面编号,或总共 1,024 个柱面。
- 8 位为磁头编号,或总共 256 个磁头。
- 6 位为扇区号,或总共 63 个扇区。
因此磁盘中的最大可能扇区数可以是
= 1024 * 256 * 63
= 16515072
正如我们在这里看到的,INT 13H 接口可以支持包含多达 16515072 个扇区的磁盘,每个扇区 512 字节。因此最大磁盘大小可能是,
= 16515072 * 512
= 8455716864 Bytes
~ 8.456 GB
因此,INT 13H 接口可以支持大约高达 8.456 GB(或 7.875 GiB)的磁盘大小。
今天,大多数计算机用户使用容量比 8 GB 大得多的硬盘,这就是为什么 INT 13H 接口在现代计算机系统中终于不再有用,并被称为 INT 的新接口所取代13H 扩展,但 INT 13H 仍可用于 DOS 和一些其他较旧的操作系统,并用于其他兼容性目的。
诠释 13H 扩展
当INT 13H 接口被开发出来时,没有人期望得到8 GB 大小的硬盘,这真是一个有趣的故事。但是今天我们可能会觉得 8 GB 硬盘的容量要小得多,即使对于家庭用户的个人电脑来说也是如此。
旧标准有一个重要限制,即它使用 24 位寻址信息,因此只能处理包含多达 16515072 个扇区、每个扇区 512 字节的驱动器,最大容量为 8.456 GB(或 7.875 GiB)。
因此,问题是将访问路径从 24 位扩大到更大,但无法扩展现有的 INT13H BIOS 接口,因为如果我们尝试这样做,许多旧硬件和软件将停止工作。实际上,由于许多旧硬件和软件无法与您的开发一起使用,因此没有希望在计算机世界中获得受人尊敬的位置。
因此,开发了一个新接口来替换 Int13H。这些例程称为 Int13H 扩展。这个新接口使用 64 位而不是 24 位进行寻址,并允许最大硬盘驱动器大小为 9.4 * 10 21 字节,即 9.4 万亿千兆字节。
我们将在本书的编程部分学习 INT 13H 和 INT 13H 扩展的用法。早期还有许多其他尺寸限制。下面描述了一些流行的逻辑和物理限制:
2.1 GB 限制
在一些较旧的 BIOS 中观察到此大小限制,这些 BIOS 仅为 CMOS RAM 中给出柱面数的字段分配 12 位。因此,这个数字最多可能是 111111111111B(最大可能的 12 位二进制数),相当于 4095。这样,可以访问的具有 16 个磁头的最大磁盘大小将是:
= 4095 * 16 * 63 * 512 Bytes
= 2113413120 Bytes are accessible.
33.8 GB 限制
这个硬盘大小障碍在 1999 年初被注意到。大磁盘报告有 16 个磁头、63 个扇区/磁道和 16383 个柱面。许多 BIOS 通过将总容量除以 16*63 来计算实际的柱面数。
对于大于 33.8 GB 的磁盘,这会导致柱面数大于 65535。在这种特殊情况下,某些版本的 Award BIOS 无法处理柱面数超过 65,535 的驱动器。现在 BIOS 崩溃或挂起。由于硬盘参数通常使用 16 个磁头和 63 个扇区,因此在发生故障之前,它的容量约为 33.8 GB 或 31.5 GiB。
解决方法是升级 BIOS 或使用跳线使磁盘看起来更小。
IDE 磁盘的 ATA 规范 - 137 GB 的限制
旧的 ATA 规范不允许访问大于 137 GB 的磁盘。实际上,它只使用 28 位来指定扇区号。但是,ATA-6 定义了一个 48 位扇区号的扩展。
磁盘大小的限制是由从 0 到 65535 计数的最多 65536 个柱面、从 0 到 15 计数的 16 个磁头和从 1 到 255 计数的每个磁道 255 个扇区的组合产生的,磁盘的最大总容量,
= 65535 * 16 * 255 Sectors
= 267386880 Sectors
= 136902082560 Bytes (Sector of 512 Bytes Each)
~ 137 GB
两盘和四盘 BIOS IDE 支持
今天大多数现代 BIOS 程序都支持硬盘自动检测,它允许 BIOS 询问每个硬盘以确定其逻辑几何结构、支持的传输模式和其他信息。这可以在设置时完成,也可以在每次机器启动时动态完成,具体取决于 BIOS。
系统 BIOS 提供对 IDE/ATA 硬盘的原生支持,因此可以设置许多参数来告诉 BIOS 系统中有哪些硬盘以及如何控制它们。系统中的每个硬盘都有自己的设置,因此有一组用于主主,一组用于主从,依此类推。然而,SCSI 硬盘是通过它们的主机适配器和内置的 SCSI BIOS 配置的。
由于无法使用传统的 IDE/ATA BIOS 几何参数来描述大小超过 8 GB 的硬盘驱动器,因此动态自动检测是设置现代驱动器的标准方法,尤其是在较旧的计算机系统的情况下,但用户仍然可以设置一些驱动器手动设置参数。
以下是 BIOS 设置程序中通常用于配置 IDE/ATA 硬盘的设置。尽管在现代系统上,一些最古老的兼容性设置甚至可能不再存在:
- 磁盘类型:它最初用于允许用户从预定义的列表中选择他的硬盘,但现在它用于控制驱动器的自动或手动参数设置。
- 大小: 硬盘驱动器的大小(以十进制兆字节为单位)。它是根据其他参数计算得出的,例如气缸、头部和扇区等。
- 柱面数:磁盘上的逻辑柱面数。
Heads:磁盘上的逻辑磁头数。
- 扇区数: 磁盘上每个逻辑磁道中每个 512 字节的逻辑扇区数。现代硬盘驱动器通常在一个磁道上有 63 个扇区。
- Write Precompensation:这是一个兼容性设置,用于指定对于非常旧的驱动器应在哪个柱面号写入调整。
- 着陆区(停放磁头): 着陆区是磁头被 BIOS 停放的柱面,以避免驱动器关闭时数据丢失或产生坏扇区。由于现代硬盘驱动器会自动停止磁头,因此如今很少需要它。
- 翻译模式: 用于支持 504 MB 以上硬盘的 BIOS 翻译模式。
- 块模式:控制 BIOS 以块为单位执行磁盘传输的能力。
- 可编程 I/O (DMA) 模式: 用于执行与硬盘之间的传输的可编程 I/O 模式或 DMA 模式。
- 32 位传输模式: 控制使用更高性能的 32 位数据传输。
文件系统的限制
每个文件系统都支持最大卷大小、文件大小和每个卷的文件数。
现在举例, 通常 FAT16 和 FAT32 卷分别限制为 4 GB 和 32 GB(通常)。您必须了解与 FAT 文件系统相关的一些限制,如下所示:
- FAT12: 小于 16 MB 的 FAT 卷被格式化为 FAT12。它是最古老的 FAT 类型,使用 12 位二进制来保存簇号。使用 FAT12 格式化的卷最多可以容纳 4,086 个簇,这等于 2 12 减去一些要在 FAT 中使用的保留值。 (我们将在本章接下来给出的磁盘的逻辑结构中详细讨论它)。因此 FAT12 最适合较小的体积。它用于小于约 16 MB 的软盘和硬盘分区。
- FAT16: FAT16 使用 16 位二进制数来保存簇号。使用 FAT16 的卷最多可以容纳 65,526 个簇,这等于 2 16 减去一些要在 FAT 中使用的保留值。 (我们将在本章接下来给出的磁盘的逻辑结构中详细讨论它)。 FAT16 用于大小从 16 MB 到 2,048 MB 的硬盘卷。运行 MS-DOS、Windows 95/98/ME 和许多其他操作系统的计算机无法访问大于 2 GB 的 FAT16 卷。出现此限制是因为这些操作系统不支持大于 32 KB 的群集大小,这导致了 2 GB 的限制。 (参见本章接下来给出的集群限制)。
- FAT32:理论上,最大的 FAT32 卷可能高达 2048 GB(大约 2 TB)。 Windows 95 的 OEM SR2 版本以及 Windows 98/ME 都支持 FAT32。 FAT32 使用 28 位二进制簇号(记住!不是 32,因为 32 位中有 4 位是“保留的”)。因此理论上 FAT32 可以处理超过 2.68 亿个簇(实际上是 268,435,456 个簇)的卷,并且将支持最大 2 TB 的驱动器。然而,要做到这一点,FAT 的大小会变得非常大。 (我们将在本章接下来给出的主题中讨论它)。
下表中给出了 FAT 类型的比较。
NTFS:NTFS 代表新技术文件系统。它由 Windows 2000/XP 使用。理论上,最大 NTFS 分区大小为 (2 64 – 1) 个簇。
NTFS 文件系统的详细描述超出了本书的限制,但下表给出了一些限制:
Description
|
Limit |
Maximum file size
|
16 Exabytes – 1 KB (2 64 Bytes – 1 KB) |
Maximum volume size
|
(2 64 – 1) clusters |
Files (and Folders) per volume
|
4,294,967,295 (2 32 – 1 ) Flies and Folders |
集群
任何软件都可以访问的硬盘上用于分配的最小空间单位是扇区,它包含 512 个字节。可以有一个磁盘分配系统,每个文件根据需要分配多个单独的扇区。例如,一个 1 MB 的文件需要大约 2,048 个单独的扇区来存储其数据。
在 FAT 文件系统的情况下,或者我们可以说在大多数文件系统中,不使用单个扇区。这有几个性能原因。当 DOS 将一些信息写入硬盘时,它不会按扇区分配空间,而是使用称为集群的新存储单元。
FAT 是多年前设计的,是一个简单的文件系统,不能管理单个扇区。相反,FAT 所做的是将扇区分组为更大的块,这些块称为簇或分配单元。
簇是可以分配给文件的最小磁盘空间单位。这就是簇通常被称为分配单元的原因。当文件被分成 512 字节的碎片时,管理磁盘可能会非常困难。
使用单独管理的 512 字节扇区的 20 GB 磁盘卷将包含超过 4100 万个单独的扇区,并且跟踪这么多信息非常耗费时间和资源。然而,一些操作系统确实按扇区为文件分配空间,但它们需要一些高级智能才能正确执行此操作。
集群是 DOS 在磁盘上存储任何信息时分配的最小空间。即使在磁盘上只存储一个字节长的信息,也需要在磁盘表面上至少有一个簇区域。
如果一个集群可以存储 512 字节的信息,那么要存储 513 字节,您将需要两个集群。每个文件必须分配整数个簇。这意味着如果一个卷使用包含 4,096 字节的集群,那么一个 610 字节的文件将使用一个集群,因此磁盘上的 4,096 字节,但一个 4,097 字节的文件使用两个集群,因此磁盘上的 8,192 字节。
这就是集群大小对于确保最大限度地有效利用磁盘非常重要的原因。因此我们可以理解,集群越大,空间浪费越多。
下图显示了名为 BINARY.C 的文件的属性,并阐明了该文件在磁盘中使用的空间这一事实。文件的实际大小为 610 字节,但由于单个簇为 4,096 字节,因此该文件使用磁盘中的一个簇(4,096 字节)。
一个簇可以由一个或多个扇区组成。这取决于所使用的磁盘类型。由于一个簇可以由多个扇区组成,使用簇作为分配单元可以减少 DOS 用来保存已用和空闲磁盘空间信息的文件分配表的大小。
集群大小主要由磁盘卷的大小决定。如果不是严格来说,通常较大的卷使用较大的集群大小。对于硬盘卷,每个簇的大小范围从 4 个扇区(2,048 字节)到 64 个扇区(32,768 字节)。
软盘使用小得多的簇,在某些情况下使用的簇大小仅为 1 个扇区。簇中的扇区是连续的,因此每个簇都是磁盘上连续的空间块。
集群大小以及分区或卷大小因为它们直接相关,所以对性能和磁盘利用率有重要影响。集群大小在磁盘卷分区时确定。
有一些实用程序,如 Partition Magic,可以在特定条件的限制内改变现有分区的集群大小,但对于一般情况,一旦选择了分区大小和集群大小,它就会固定。
正如我们之前讨论过的,柱面或磁道号从 0 开始,第一个扇区号始终取为 1,还有一点您应该记住的是,第一个簇号始终取为 2。
集群大小
集群仅用于为数据区分配存储区。 FAT 和目录区域不是根据簇大小分配的。在使用 512 字节扇区的磁盘上,512 字节簇包含一个扇区,而 4 KB 簇包含 8 个扇区。
下表列出了 DOS 用于各种磁盘格式的默认簇大小。但是,在某些情况下,集群的大小可能与默认大小不同:
Floppy Disk Drive (FDD) |
Drive Types |
Sectors/Cluster |
Total Cluster size in bytes (Sectors of 512 bytes Each) |
5.25” 360Kb FDD |
2 sectors |
1,024 |
5.25”1.2Mb FDD |
1 sector |
512 |
3.5” 720Kb FDD |
2 sectors |
1,024 |
3.5”1.44Mb FDD |
1 sector |
512 |
3.5”2.88MB FDD |
2 sectors |
1,024 |
FAT16、FAT32 和 NTFS 各自使用不同的簇大小,具体取决于分区的大小,并且每个文件系统都有它可以支持的最大簇数。集群越小,磁盘存储信息的效率就越高,因为集群中未使用的空间不能被其他文件使用。
下表显示了 FAT16 、 FAT32 和 NTFS 文件系统分区的默认簇大小。 FAT 32 允许更高效的存储和使用更大的硬盘驱动器,32 位 FAT 仅与 Windows 95 OSR-2 和 Windows 98/ME 兼容。 MS-DOS、Windows 3.1、Windows 95 和 Windows NT 支持 FAT 16。操作系统 Windows 2000/XP 使用 NTFS 文件系统。
笔记 : 这里 1 KiB 已被写入 1 Binary Kilobyte,这意味着 1 KiB 是 1024 字节,或者我们可以说两个 512 字节的扇区相当于 1 KiB.
随着 FAT16 分区大小的增加,磁盘空间的浪费也在增加。 FAT32 的使用减少了簇大小,从而提供了有效的存储。虽然 FAT32 确实允许使用更大的硬盘并大大减小了簇大小,但在使用 FAT32 时有一个重要的性能考虑因素,即数十 GB 的巨大硬盘使得 FAT32 对于较新的系统至关重要。相反,我们可以说,您通常在 FAT16 和 FAT32 之间没有实际的选择。
让我们考虑一个 2,048 MB 的分区,这是 FAT16 可以支持的最大分区。如果这个分区设置在 FAT16 下,会产生一个文件分配表,里面有 65526 个簇,每个簇占用 32KiB 的磁盘空间。
较大的集群大小确实会导致磁盘空间的大量浪费。因此建议在此分区上使用 FAT32,这将导致簇大小从 32 KiB 减少到 4 KiB。
事实上,这将大大减少磁盘上的 slack,最多可减少 30%,并可能释放数百兆字节的先前浪费的磁盘空间。在这种情况下,这通常是正确的做法。然而,它还有另一面。我们不会免费获得这种减少的集群大小。
由于每个集群都较小,因此必须有更多集群才能覆盖相同数量的磁盘。因此,我们现在将拥有 524,208 个集群,而不是 65,526 个集群。
此外,FAT32 中的 FAT 条目为 32 位宽(每个条目为 4 字节),而 FAT16 中的条目为 16 位(每个条目为 2 字节)。最终结果是 FAT32 的 FAT 大小是 FAT16 的 16 倍。下表总结:
FAT 16 and FAT 32 for 2,048 MB Disk Volume |
FAT Type |
FAT16 |
FAT32 |
Cluster Size |
32 KiB |
4 KiB |
Number of FAT Entries |
65,526 |
524,208 |
Size of FAT |
131052 Bytes
(~ 128 KiB) |
2096832 Bytes
(~ 2 MiB) |
如果我们将 FAT32 卷的大小从 2 GB 增加到 8 GB,则 FAT 的大小从大约 2 MiB 增加到 8 MiB。这样做的意义不在于 FAT32 卷必须在磁盘上浪费几兆字节的空间来保存 FAT。因为只有这样做才能比减小 FAT 的大小节省更多的空间。真正的问题是 FAT 保存卷中每个文件的所有簇指针。大幅增加 FAT 的大小会对系统速度产生负面影响。
因此,将文件分配表的大小限制为一个合理大小的数字非常重要。事实上,在大多数情况下,需要在簇大小和 FAT 大小之间找到平衡点。 FAT32 本身对簇大小的选择就是一个很好的例子。
由于 FAT32 最多可以处理大约 2.68 亿个簇,因此 4 KiB 的簇大小在概念上能够支持 1 TiB (1,024 GiB) 大小的磁盘卷,但这样做的问题是 FAT 大小将超过1 GB 相当于 2.68 亿乘以每个条目 4 字节。
因此,FAT32 仅对最大 8 GiB 的卷使用 4 KiB 簇,然后使用更大的簇(如前表所示)作为簇大小。官方声明的 FAT32 支持的最大分区大小为 2,048 GiB (2 TiB)。
硬盘的逻辑结构
基本上,我们可以将硬盘的逻辑结构分为以下五个逻辑术语:
- MBR(主引导记录)
- DBR(DOS 引导记录)
- FAT(文件分配表)
- 根目录
- 数据区
下图表示了这些逻辑术语的概念排列,这些逻辑术语构成了硬盘的逻辑结构:
主引导记录 (MBR) 或有时称为主分区表 (MPT),包含一个小程序,用于从硬盘驱动器加载和启动活动(或可引导)分区。主引导记录包含有关硬盘驱动器上所有四个主分区的信息,例如起始扇区、结束扇区、分区大小等。
MBR 位于绝对扇区 0,或者我们可以说位于柱面 0、磁头 0 和扇区 1,如果磁盘中存在多个分区,则扩展主引导记录位于每个分区的开头扩展分区卷(参见下图)。
MBR 是通过执行 DOS 的 FDISK.EXE 命令在硬盘驱动器上创建的。但是,还有许多其他软件可以完成相同的任务。使用 FDISK 可以使这些分区中的任何一个分区处于活动状态或可启动。
这允许活动分区的引导扇区在系统启动时接收控制。由于软盘上没有分区,因此软盘上没有 MBR。
由于 DOS 使用单个大写字母来命名分区,因此 DOS 允许的所有类型分区的最大数量为 24,从驱动器号 C (C:) 到驱动器号 Z (Z:) .因此即使存在多个物理硬盘驱动器,所有驱动器的分区总数也不能超过24。
开机自检 (POST) 后,BIOS 将 MBR(主引导记录)从硬盘加载到内存中,然后执行。首先 MBR 检查硬盘是否有活动分区,然后将 DOS 引导记录 (DBR) 加载到内存中,并将控制权交给操作系统引导代码,然后操作系统引导记录代码将操作系统的其余部分加载到记忆。
主引导记录格式
我们可以将硬盘驱动器划分为几个逻辑驱动器,这些逻辑驱动器通常由 DOS 分配它们自己的驱动器号。一次只能将一个分区标记为活动(或可引导)分区。
主引导记录在主分区表中有四个条目的限制。但是扩展主引导记录的位置可以通过包含扩展分区表的主引导记录来获得,其格式与主分区表完全相同,只是没有引导代码。
在扩展的主引导记录中,这个 446 字节的空间通常是为引导代码保留的,并且保持为空。主引导记录的所有 512Bytes 都被破坏如下,在表中给出:
Offset |
Description |
Size |
000H |
Initial Program Loader (IPL) , Executable Code (Provides very first booting to the Computer) |
446 Bytes |
1BEH |
First Partition Entry (See Next Table) |
16 Bytes |
1CEH |
Second Partition Entry |
16 Bytes |
1DEH |
Third Partition Entry |
16 Bytes |
1EEH |
Fourth Partition Entry |
16 Bytes |
1FEH |
Executable Marker or Bootable Sector Signature or Magic Number (AAH 55H) |
2 Bytes |
Total = 512 Bytes |
所有扩展分区都应该存在于扩展分区条目保留的空间内。仅打算使用两个扩展分区,第一个作为普通分区,第二个作为另一个扩展分区(如果存在)。因此,在一个主分区表的帮助下,我们可以获得另一个扩展主分区表的位置,如果存在的话。
分区表项格式
MBR 中任何一个 Partition 的分区表项的格式已在下表中给出。任何 MBR 的每个 Partition Entry 都可以分解为以下字节,并具有其特定含义:
Boot Type Indicator Byte (1 Byte) : 如果该字节为 00H,则表示该分区未激活,如果该字节为 80H,则表示该分区为 Active 分区或 Bootable 分区.尽管存在任何其他字节,但这些不是预期的,但如果存在任何其他字节,则可能是由于分区表损坏或分区表中的任何 VIRUS 攻击。
Starting Cylinder – Head – Sector Number of the Partition (3 Bytes) : 当我们计算任何磁盘的CHS(Cylinder, Head, and Sector)时,Physical CHS的计算如下:
- 物理扇区从 1 开始计算。
- 物理头从 0 开始计数。
- 物理圆柱从 0 开始计数(详见上一章)
- 偏移量 01H 处的字节表示分区的十六进制系统的起始磁头编号。
偏移 02H 处字节的 6 个最低有效位构成分区的起始扇区号和剩余 2 位(作为两个最高有效位)加上偏移 03H 处另一个字节的 8 位(其余 10 位编号的 8 个最低有效位)的组合) 制作分区的起始圆柱编号。
Offset |
Meaning |
Size |
Description |
00H |
Boot Type Indicator Byte |
1 Byte |
If Byte is 00H, the Partition is Inactive and if Byte is 80H , The Partition is Active (or Bootable) |
01H |
Head Number of Beginning of the Partition |
1 Byte |
Starting Head number of the Partition in Hexadecimal System |
02H |
Sector and Cylinder Number of Beginning of the Partition |
2 Bytes |
6 Bits of First Byte make Starting Sector Number and Combination of remaining 2 Bits (as Two Most Significant Bits) plus 8 Bits of another Byte (Rest 8 least Significant Bits of the 10-Bit Number ) make the Starting Cylinder Number of the Partition |
04H |
File System indicator Byte |
1 Byte |
File System Indicator Byte in Hexadecimal system (See the Table given next for Indicators) |
05H |
Head Number of End of the Partition |
1 Byte |
Ending Head Number of the Partition in Hexadecimal System |
06H |
Sector and Cylinder Number of End of the Partition |
2 Bytes |
6 Bits of First Byte make Ending Sector Number and Combination of remaining 2 Bits (as Two Most Significant Bits) plus 8 Bits of another Byte (Rest 8 least Significant Bits of the 10-Bit Number ) make the Ending Cylinder Number of the Partition |
08H |
Relative Sector number of Beginning of the Partition |
4 Bytes |
Number of Sectors Between the MBR and the First Sector in the Partition |
0CH |
Number of Sectors of the Partition |
4 Bytes |
Number of Sectors in the Partition |
Total = 16 Bytes |
圆柱和扇区编码已在接下来执行的示例分区表研究的示例中给出。
File System Indicator Byte (1 Byte) : 偏移量 04H 处的文件系统指示字节代表该分区的文件系统。本章接下来给出了列出各种文件系统的文件系统指示符字节的表格。
结束圆柱体 - 头部 - 扇区号(3 字节): 编码与Starting Cylinder – Head – Partition的扇区号相同。
分区开始的相对扇区数(4 字节): 十六进制的分区中 MBR 和第一个扇区之间的扇区数。
分区的扇区数(4字节):十六进制的分区中的扇区数。
应始终记住,Cylinder、Head 和 Sector 编号是应该传递给 BIOS 的那些。因此,如果 BIOS 使用转换(LBA 模式或 INT 13H 扩展支持),则这些值可能不代表物理 CHS 值。对于大型硬盘驱动器(大于 8.4 GB),CHS 值可能无效。通常应忽略这些值,而使用绝对扇区值。
下图显示了具有 FAT32 分区的磁盘的 MBR。图中最后高亮的64字节区域代表MBR的Master Partition Table。
开始和结束CHS的编码如下:
- 在偏移量 00H 处,80(十六进制)表示该分区是一个 Active 分区。
- 在偏移量 01H 处,01(十六进制)表示起始磁头编号 = 1。
- 偏移 02H 和 03H 处的两个字节组合形成起始扇区
和分区的柱面编号,根据接下来给出的编码:
因此分区的起始 C-H-S = 0-0-1。
同样,分区 Ending 的 Head 编号是 FE (Hex),即 254,分区的 Ending Cylinder 和 Sector 编号的编码已在下表中给出:
因此分区的结尾 C-H-S = 701-254-63。
偏移量 04H 处的字节 0B(十六进制)是分区的文件系统指示符字节。字节 0B (H) 表示分区具有 FAT32 文件系统。下面给出了各种文件系统及其文件系统指示字节的表:
File system Indicator Byte in Hexadecimal |
Partition/ File system Description |
00H |
Unused/Empty Partition-Table Entry
(Remember this is not used to designate unused area on the disk, but marks an unused partition table entry) |
01H |
DOS 12-bit fat
(The type 01H is for partitions up to 15 MB) |
02H |
XENIX: root file system |
03H |
XENIX /usr file system (obsolete)
(XENIX is an old part of Unix V7. Microsoft XENIX Operating System was announced in August 1980. It was a portable and commercial version of the Unix operating system for the Intel 8086, Zilog Z8000, Motorola M68000 and Digital Equipment PDP-11. Microsoft introduced XENIX 3.0 in April 1983. SCO delivered its first XENIX for 8088/8086 in 1983.) |
04H |
16-bit FAT, DOS 3.0+ (Partition size < 32M)
(Some old DOS versions have had a bug which required this partition to be located in the 1st physical 32 MB of the hard disk ) |
05H |
DOS Extended (DOS 3.3+ Extended Volume)
Supports at most 8.4 GB disks. With this type 05H DOS/Windows will not use the extended BIOS call, even if it is available.) |
06H |
16-bit FAT, DOS Big, DOS 3.31+ (Partition Size >= 32M)
(Partitions are at most 2 GB for DOS and Windows 95/98 with maximum 65536 clusters with each cluster, at most 32 KB. Windows NT can create up to 4 GB FAT16 partition using 64 KB clusters.) |
07H |
OS/2 IFS (Installable File System) (HPFS is the best known example of this file system. OS/2 only looks at partitions with ID 7 for any installed IFS this is the reason that EXT2 IFS packet includes a special "Linux partition filter" device driver to fool OS/2 into thinking Linux partitions have ID 07). |
07H |
Advanced Unix |
07H |
Windows NT NTFS |
07H |
QNX2.x (pre-1988)
(For the actual file system of partition type 07H, one should inspect the partition boot record) |
08H |
OS/2 (v1.0 to v1.3 only) |
08H |
AIX boot partition
[AIX (Advanced Interactive Executive) is the IBM's version of Unix] |
08H |
SplitDrive |
08H |
DELL partition spanning multiple drives |
08H |
Commodore DOS |
08H |
QNX 1.x and 2.x
("qny" according to QNX partitions) |
09H |
AIX data partition |
09H |
Coherent file system
[Coherent was a UNIX like Operating System for the 286-386-486 systems, marketed by Mark Williams Company led by Bob Swartz. It was renowned for its good documentation. It was introduced in 1980 and died 1 Feb 1995. The last versions are V3.2 for 286-386-486 and V4.0 (May 1992, using protected mode) for 386-486 only. It sold for $99 a copy and it is rumored that 40000 copies have been sold. A Coherent partition has to be primary. ] |
09H |
QNX 1.x and 2.x ("qnz" according to QNX Partitions) |
0aH |
OS/2 Boot Manager
(OS/2 is the operating system designed by Microsoft and IBM to be the successor of MS-DOS) |
0aH |
Coherent swap partition |
0aH |
OPUS
(Open Parallel Unisys Server) |
0bH |
WIN95 OSR2 32-bit FAT
(OSR2 stands for Microsoft’s “OEM Service Release 2”. It is for Partitions up to 2047GB. Almost always, Windows 95/98/ME have the same File system which is FAT-32, within the same partitions limits) |
0cH |
LBA-mapped WIN95 OSR2 32-bit FAT
(It is using Logical Block Addressing – mode of Interrupt 13H extensions therefore we can say that this is the Extended INT 13H equivalent of 0BH. Almost always, Windows 95/98/ME have the same File system which is FAT-32, within the same partitions limits) |
0eH |
LBA-mapped WIN95: DOS 16-bit FAT or Logical Block Addressable VFAT
(It is same as 06H but using LBA-mode of INT 13H) |
0fH |
LBA-mapped WIN95: Extended partition or Logical Block Addressable VFAT
(It is same as 05H but using LBA-mode of INT 13H. Windows 95 uses 0EH and 0FH as the extended INT13H equivalents of 06H and 05H. Windows NT does not recognize the four Windows 95/98/ME types 0BH, 0CH, 0EH and 0FH) |
10H |
OPUS
(Octal Program Updating System) |
11H |
Hidden DOS 12-bit FAT or OS/2 Boot Manager hidden 12-bit FAT partition or DOS Seen From OS/2 (When OS/2 Boot manager boots a DOS partition, it will hide all primary DOS partitions except the one that is booted, by changing its ID and 01H, 04H, 06H and 07H becomes 11H, 14H, 16H and 17H, respectively. |
12H |
Compaq Configuration/diagnostics partition
(It is used by Compaq for their configuration utility partition. It is a FAT-compatible partition that boots into their utilities, and can be added to a LILO menu as if it were MS-DOS. ) |
14H |
(Hidden DOS 16-bit FAT or OS/2 Boot Manager Hidden DOS 16-bit FAT) <32M Partition
(Partition size is less than 32M. ID 14H is resulted from using Novell DOS 7.0 FDISK to delete Linux Native partition. ) |
15H |
Hidden DOS-Extended |
16H |
(Hidden DOS 16-bit FAT or OS/2 Boot Manager hidden 16-bit FAT ) >=32M Partition |
17H |
OS/2 Boot Manager hidden HPFS partition or Hidden IFS (e.g., HPFS) |
17H |
Hidden NTFS partition |
18H |
AST SmartSleep Partition or AST special Windows swap file ("Zero-Volt Suspend" partition)
[AST Research, Inc. (named from first initials of the founders, Albert Wong, Safi Qureshey and Thomas Yuen). Ascentia laptops have a “Zero – Volt Suspend Partition” or `SmartSleep Partition' of size 2MB+memory size.] |
File system Indicator Byte in Hexadecimal |
Partition/ File system Description |
19H |
Willowtech Photon COS
(Code 19H is Claimed for Willowtech Photon COS by Willow Schlanger. |
1bH |
Hidden WIN95 OSR2 32-bit FAT or Hidden Windows 95 FAT32 Partition |
1cH |
LBA-mapped Hidden WIN95 OSR2 32-bit FAT
(It is hidden Windows95 FAT32 partition using LBA-mode of INT 13H Extensions) |
1eH |
LBA-mapped Hidden WIN95 16-bit FAT or Hidden LBA VFAT partition |
1FH |
LBA mapped Hidden WIN95 Extended or Hidden Extended LBA VFAT Partition |
20H |
OFSI
(Willowsoft Overture File System ) |
21H |
Officially listed as Reserved
(HP Volume Expansion, SpeedStor variant.) |
21H |
FSO2
(Claimed for FSO2 (Oxygen File System) by Dave Poirier) |
22H |
FSO2 Extended Partition
(Claimed for Oxygen Extended Partition by Dave Poirier) |
23H |
Officially listed as Reserved |
24H |
NEC DOS 3.x |
26H |
Officially listed as Reserved |
31H |
Officially listed as Reserved |
32H |
NOS (Network Operating System)
(32H is being used by the operating system NOS, being developed by Alien Internet Services in Melbourne Australia. The id 32H was chosen not only because of it was one of the few that are left available but also 32k is the size of the EEPROM the OS was originally targeted for. |
33H |
Officially listed as Reserved |
34H |
Officially listed as Reserved |
35H |
JFS on OS/2 or eCS
[35H is used by OS/2 Warp Server for e-Business, OS/2 Convenience Pack (aka version 4.5) and eComStation (eCS, an OEM version of OS/2 Convenience Pack) for the OS/2 implementation of JFS (IBM AIX Journaling File System)] |
36H |
Officially listed as Reserved |
38H |
THEOS v3.2 (2GB partition) |
39H |
Plan 9 partition
(Plan 9 is an operating system developed at Bell Labs for many architectures. Originally Plan 9 used an unallocated portion at the end of the disk. 3rd edition of Plan 9 uses partitions of type 39H, subdivided into sub partitions described in the Plan 9 partition table in the second sector of the partition.) |
39H |
THEOS v4 spanned partition |
3aH |
THEOS v4 (4GB partition) |
3bH |
THEOS v4 Extended partition
(THEOS is a multi-user multitasking Operating System for PCs founded by Timothy Williams in 1983.) |
3cH |
PartitionMagic recovery partition
(When a PowerQuest product like Partition Magic or Drive Image makes changes to the disk, it first changes the type flag to 3CH so that the Operating System will not try to modify it. At the end of the process, it is changed back to what it was at first. Therefore the only time you can see a 3CH type flag, is if the process was interrupted somehow such as power off, user reboot etc. If you change it back manually with a partition table editor or any disk editing program then most of the time everything is okay.) |
3dH |
Hidden NetWare |
40H |
Venix 80286
(It is a very old Unix-like operating system for PCs.) |
41H |
Linux/MINIX (sharing disk with DR-DOS)
(DR-DOS stands for Digital Research-Disk Operating System.) |
41H |
Personal RISC Boot |
41H |
PPC PReP (Power PC Reference Platform) Boot Partition |
42H |
Linux swap (sharing disk with DR-DOS) |
42H |
SFS (Secure File System)
(SFS is an encrypted file System driver for DOS on 386+ PCs, written by Peter Gutmann.) |
File system Indicator Byte in Hexadecimal |
Partition/ File system Description |
42H |
Windows 2000 Dynamic Extended Partition Marker
(If a partition table entry of type 42H is present in the legacy partition table, then Windows 2000 ignores the legacy partition table and uses a proprietary partition table and a proprietary partitioning scheme (LDM or DDM). Pure dynamic disks (those not containing any hard-linked partitions) have only a single partition table entry, type 42H to define the entire disk. Dynamic disks store their volume configuration in a database located in a 1-MB private region at the end of each dynamic disk.) |
43H |
Linux native (sharing disk with DR-DOS) |
44H |
GoBack partition
(GoBack is a utility that records changes made to the disk, allowing you to view or go back to some earlier state. It takes over disk I/O like a Disk Manager would, and stores its logs in its own partition.) |
45H |
Boot-US boot manager
(Boot-US (Ulrich Straub) boot manager can be installed to MBR, a separate primary partition or diskette. When installed to a primary partition this partition gets the ID 45H. This partition does not contain a file system, it contains only the boot manager and occupies a single cylinder (below 8.4 GB). ) |
45H |
Priam |
45H |
EUMEL/Elan |
46H |
EUMEL/Elan |
47H |
EUMEL/Elan |
48H |
EUMEL/Elan
(EUMEL, later known as Ergos L3, are the multi-user multitasking systems developed by Jochen Liedtke at GMD, using Elan programming Language. It was used at German schools for the computer science education.) |
4aH |
AdaOS Aquila |
4aH |
ALFS/THIN lightweight filesystem for DOS |
4cH |
Oberon partition |
4dH |
QNX4.x |
4eH |
QNX4.x 2nd partition |
4fH |
QNX4.x 3rd partition
(QNX is a POSIX (Portable Operating System Interface for Unix)-certified, microkernel, distributed, fault-tolerant Operating System for the 386 and later, including support for the 386EX in embedded applications.) |
4fH |
Oberon boot/data partition |
50H |
OnTrack Disk Manager (older versions), Read-Only Partition (Disk Manager is a program of OnTrack to enable people to use IDE disks that are larger than 504MB under DOS. Linux kernel versions older than 1.3.14 do not coexist with DM.) |
50H |
Lynx RTOS (Real-Time Operating System)
(Lynx RTOS gives users the ability to place up to 14 partitions of 2 GB each on both SCSI and IDE drives, for a total of up to 28 GB of file system space.) |
50H |
Native Oberon |
51H |
OnTrack Disk Manager (DM6.0 Aux1), Read/Write Partition |
51H |
Novell |
52H |
CP/M |
52H |
Microport SysV/AT or Microport System V/386 |
53H |
OnTrack Disk Manager (DM6.0 Aux3), Write-Only partition |
54H |
OnTrack Disk Manager 6.0 Dynamic Drive Overlay |
55H |
EZ-Drive Partition
(EZ-Drive is another disk manager like program developed by MicroHouse in 1992. Now It is marketed by StorageSoft.) |
56H |
Golden Bow VFeature Partitioned Volume.
(This is also a Disk Manager like Utility software. This is a Non-Standard DOS Volume.) |
56H |
DM converted to EZ-BIOS |
57H |
DrivePro
(DrivePro was developed by MicroHouse in 1992. Now It is marketed by StorageSoft.) |
57H |
VNDI Partition |
5cH |
Priam EDisk Partitioned Volume
(Priam EDisk is Disk Manager type utility software. This is a Non-Standard DOS Volume.) |
61H |
SpeedStor
(Storage Dimensions SpeedStor Partitioned Volume. This is a Non-Standard DOS Volume. It is Disk Manager type utility software.) |
63H |
Unix System V/386, 386/ix, SCO, ISC Unix, UnixWare, Mach, MtXinu BSD 4.3 on Mach, GNU Hurd |
64H |
Novell NetWare 286, 2.xx |
File system Indicator Byte in Hexadecimal |
Partition/ File system Description |
64H |
PC-ARMOUR protected partition
(64H is used by PC-ARMOUR disk protection by Dr. A. Solomon, intended to keep the disk inaccessible until the right password was given and then an INT 13H hook was loaded above top-of-memory that showed C-H-S = 0-0-2, with a copy of the real partition table, when 0-0-1 was requested). |
65H |
Novell NetWare 3.86, 3.xx or 4.xx
(Novell Netware 3.0 and later versions use one partition per drive. It allocates logical Volumes inside these partitions. The volumes can be split over several drives. The file system used is called Turbo FAT and it only very vaguely resembles the DOS FAT file system. Novell Netware used to be the main Network Operating System available. Netware 68 or S-Net (1983) was for a Motorola 68000, Netware 86 for an Intel 8086 or 8088. Netware 286 was for an Intel 80286 and existed in various versions that were later merged to Netware 2.2. Netware 386 was a rewrite in C for the Intel 386 which was later renamed to Netware 3.x (3.0, 3.1, 3.10, 3.11 and 3.12 etc) versions. Its successor Netware 4.xx had versions 4.00, 4.01, 4.02, 4.10 and 4.11. Then came Intranetware) |
66H |
Novell Netware SMS Partition
(SMS stands for Storage Management Services. It is not used now.) |
67H |
Novell |
68H |
Novell |
69H |
Novell Netware 5+ and Novell Netware NSS Partition
(NSS stands for Novell Storage Services.) |
70H |
DiskSecure Multi-Boot |
71H |
Officially listed as reserved |
73H |
Officially listed as reserved |
74H |
Officially listed as reserved |
74H |
Scramdisk partition
(Scramdisk is a disk encryption software. It supports container files, dedicated partitions type 74H and disks hidden in WAV audio files.) |
75H |
IBM PC/IX |
76H |
Officially listed as reserved |
77H |
M2FS/M2CS partition |
77H |
QNX 4.x |
78H |
XOSL File System
(XOSL Boot loader file system) |
78H |
QNY 4.x |
79H |
QNZ 4.x |
7EH |
F.I.X. |
7Fh |
Alt-OS-Development Partition Standard |
80H |
Old MINIX, MINIX v1.1 to v1.4a |
81H |
MINIX 1.4b and Later
(MINIX is a Unix-like operating system written by Andy Tanenbaum and students at the Vrije University, Amsterdam, around 1989-1991. It runs on PCs (8086 and up), Macintosh, Atari, Amiga, Sparc. |
81H |
Early Linux |
81H |
Mitac Advanced Disk Manager |
82H |
Prime |
82H |
Solaris x86
(Solaris creates a single partition with ID 82H and then uses Sun disk labels within the partition to split it further.) |
82H |
Linux Swap partition |
83H |
Linux Native Partition or Linux native file system or Linux Ext2fs
(Linux is a Unix-like operating system written by Linus Torvalds and many others on the internet since 1991. It runs on PCs 386 and later and a variety of other hardware. It is distributed under GPL (General Public License) . Various file system types like xiafs, ext2, ext3, reiserfs, etc. all use ID 83H.) |
84H |
OS/2 hidden C: drive or OS/2-renumbered type 04 partition.
(OS/2-renumbered type 04h partition is related to hiding DOS C: drive) |
84H |
Hibernation partition
(Reported for various laptop models, e.g., used on Dell Latitudes (with Dell BIOS) that use the MKS2D utility.) |
85H |
Linux Extended partition |
86H |
Old Linux RAID partition super block |
86H |
FAT16 volume/stripe set (Windows NT) or NTFS volume set
(It is Legacy Fault Tolerant FAT16 volume.) |
87H |
HPFS Fault-Tolerant mirrored partition or NTFS volume set or NTFS volume/stripe set
(Legacy Fault Tolerant NTFS volume. HPFS Fault-Tolerant mirrored partition. ) |
8aH |
Linux Kernel Partition
(It is used by AiR-BOOT) |
File system Indicator Byte in Hexadecimal |
Partition/ File system Description |
8bH |
Legacy Fault Tolerant FAT32 volume |
8cH |
Legacy Fault Tolerant FAT32 volume using BIOS Extended INT 13H. |
8dH |
Free FDISK hidden Primary DOS FAT12 partition
(Free FDISK is the FDISK used by FreeDOS. It hides types 01H, 04H, 05H, 06H, 0BH, 0CH, 0EH and 0FH by adding decimal Number 140 (8CH).) |
8eH |
Linux Logical Volume Manager partition |
90H |
Free FDISK hidden Primary DOS FAT16 partition |
91H |
Free FDISK hidden DOS extended partition |
92H |
Free FDISK hidden Primary DOS large FAT16 partition |
93H |
Hidden Linux native partition |
93H |
Amoeba file system |
94H |
Amoeba bad block table
(Amoeba is a distributed operating system written by Andy Tanenbaum, together with Frans Kaashoek, Sape Mullender, Robert van Renesse and others since 1981. It runs on PCs (386 and up), Sun3, Sparc, 68030. It is free for universities for research and teaching purposes.) |
95H |
MIT EXOPC native partition |
97H |
Free FDISK hidden Primary DOS FAT32 partition |
98H |
Free FDISK hidden Primary DOS FAT32 partition (LBA) |
99H |
Mylex EISA SCSI or DCE376 logical drive
(It is used by the Mylex DCE376 EISA SCSI adaptor for partitions which are beyond the 1024 cylinder of a drive.) |
9aH |
Free FDISK hidden Primary DOS FAT16 partition (LBA) |
9bH |
Free FDISK hidden DOS extended partition (LBA) |
9fH |
BSD/OS |
a0H |
Phoenix NoteBIOS Power Management "Save-to-Disk" partition or Laptop hibernation partition
(It is Reported for various laptops like IBM Thinkpad, Phoenix NoteBIOS, Toshiba under names like zero-volt suspend partition, suspend-to-disk partition, save-to-disk partition, power-management partition, hibernation partition, usually at the start or end of the disk area.) |
a1H |
Laptop hibernation partition
(Used as "Save-to-Disk" partition on a NEC 6000H notebook. Types A0H and A1H are used on systems with Phoenix BIOS. The Phoenix PHDISK utility is used with these.) |
a1H |
HP Volume Expansion (SpeedStor variant) |
a3H |
Officially listed as Reserved |
a4H |
Officially listed as Reserved |
a5H |
BSD/386, 386BSD, NetBSD, FreeBSD
(386BSD is a Unix-like operating system, a port of 4.3BSD Net/2 to the PC done by Bill Jolitz around 1991.) |
a6H |
OpenBSD
(OpenBSD, led by Theo de Raadt, split off from NetBSD. It tries to emphasize on security.) |
a7H |
NEXTSTEP
(NEXTSTEP is Based on Mach 2.6 and features of Mach 3.0. It is a true object-oriented operating system and user environment. |
a8H |
Mac OS-X
(Apple's OS-X uses this type for its file system partition) |
a9H |
NetBSD |
aaH |
Olivetti Fat 12 1.44MB Service Partition
(It Contains a bare DOS 6.22 and a utility to exchange types 06H and AAH in the partition table.) |
abH |
Mac OS-X Boot partition
(Apple's OS-X (Darwin Intel) uses this type for its boot partition.) |
abH |
GO! partition |
aeH |
ShagOS file system |
afH |
ShagOS swap partition |
b0H |
BootStar Dummy
(The boot manager BootStar manages its own partition table, with up to 15 primary partitions. It fills unused entries in the MBR with BootStar Dummy values.) |
b1H |
Officially listed as Reserved |
b3H |
Officially listed as Reserved |
b4H |
Officially listed as Reserved |
b6H |
Officially listed as Reserved |
B6H |
Windows NT mirror set (master), FAT16 file system |
b7H |
BSDI file system (secondarily swap), BSDI BSD/386 file system |
B7H |
Windows NT mirror set (master), NTFS file system |
File system Indicator Byte in Hexadecimal |
Partition/ File system Description |
b8H |
BSDI BSD/386 swap partition (secondarily file system)
(BSDI (Berkeley Software Design, Inc.) was founded by former CSRG (UCB Computer Systems Research Group) members. Their operating system, based on Net/2, was called BSD/386.) |
bbH |
Boot Wizard hidden |
beH |
Solaris 8 boot partition |
c0H |
DR-DOS/Novell DOS secured partition |
C0H |
CTOS |
c0H |
REAL/32 secure small partition |
c0H |
NTFT Partition |
c1H |
DR DOS 6.0 LOGIN.EXE-secured 12-bit FAT partition |
c2H |
Reserved for DR-DOS 7+ |
c2H |
Hidden Linux |
c3H |
Hidden Linux swap |
c4H |
DR DOS 6.0 LOGIN.EXE-secured 16-bit FAT partition |
c5H |
DRDOS/secured (Extended) |
c6H |
DRDOS/secured (FAT-16, >= 32M)
(DR-DOS 6.0 will add C0H to the partition type for a LOGIN.EXE - secured partition so that User can not avoid the password check by booting from an MS-DOS floppy. Otherwise it seems that the types C1H, C4H, C5H, C6H and D1H, D4H, D5H, D6H are used precisely like 1H, 4H, 5H, and 6H.) |
c6H |
Corrupted FAT16 volume/stripe set (Windows NT)
(NTFS will add C0H to the partition type for disabled parts of a Fault Tolerant set. Thus, one gets types C6H, C7H.) |
c7H |
Windows NT corrupted NTFS volume/stripe set |
c7H |
Syrinx boot |
c8H |
Officially listed as Reserved |
c9H |
Officially listed as Reserved |
caH |
Officially listed as Reserved |
cbH |
Reserved for DR-DOS secured FAT32 |
ccH |
Reserved for DR-DOS secured FAT32 (LBA) |
cdH |
CTOS Memdump |
ceH |
Reserved for DR-DOS secured FAT16 (LBA) |
d0H |
REAL/32 secure big partition
(REAL/32 is a continuation of DR Multi-user DOS.) |
d1H |
Old Multi-user DOS secured FAT12 |
d4H |
Old Multi-user DOS secured FAT16 <32M |
d5H |
Old Multi-user DOS secured extended partition |
d6H |
Old Multi-user DOS secured FAT16 >=32M |
d8H |
CP/M-86 |
daH |
Non-FS Data |
dbH |
Digital Research CP/M, Concurrent CP/M, Concurrent DOS |
dbH |
CTOS (Convergent Technologies OS -Unisys) |
dbH |
KDG Telemetry SCPU boot
(KDG Telemetry uses ID DBH to store a protected-mode binary image of the code to be run on a 'x86-based SCPU (Supervisory CPU) module from the DT800 range.) |
ddH |
Hidden CTOS Memdump |
deH |
Dell PowerEdge Server utilities (FAT) |
dfH |
DG/UX virtual disk manager partition |
dfH |
BootIt EMBRM
(The boot manager BootIt manages its own partition table, with up to 255 primary partitions.) |
e0H |
Reserved by ST Microelectronics for a file system called ST AVFS. |
e1H |
DOS access or SpeedStor 12-bit FAT extended partition
(It is a SSTOR partition on cylinders more than 1023.) |
E2H |
DOS Read-Only |
e3H |
Storage Dimensions |
e4H |
SpeedStor 16-bit FAT extended partition < 1024 cylinders |
e5H |
Officially listed as Reserved |
e5H |
Tandy DOS with logical sectored FAT |
e6H |
Officially listed as Reserved |
ebH |
BeOS BFS (BFS1)
(BeOS is an operating system that runs on Power PCs) |
edH |
Reserved for Matthias Paul’s Sprytix |
eeH |
Indication that this legacy MBR is followed by an EFI Header |
efH |
Partition that contains an EFI file system |
f0H |
Linux/PA-RISC boot loader |
f1H |
Storage Dimensions |
f2H |
DOS 3.3+ secondary partition |
f2H |
Unisys DOS with logical sectored FAT |
f3H |
Officially listed as Reserved |
f4H |
SpeedStor large partition |
F4H |
Prologue single-volume partition |
File system Indicator Byte in Hexadecimal |
Partition/ File system Description |
f5H |
Prologue multi-volume partition
(The type F4H partition contains one volume, and is not used anymore. The type F5H partition contains 1 to 10 volumes called MD0 to MD9. It supports one or more systems. Each volume can have as file system the NGF file system or TwinFS file system. ) |
f6H |
Officially listed as Reserved |
F6H |
Storage Dimensions SpeedStor |
faH |
MandrakeSoft's Bochs x86 emulator |
fbH |
VMware File System partition |
fcH |
VMware Swap partition
(VMware offers virtual machines in which one can run Linux, Windows, FreeBSD.) |
fdH |
Linux raid partition with auto detect using persistent super block |
feH |
SpeedStor more than 1024 cylinders |
feH |
LANstep |
feH |
IBM PS/2 IML (Initial Microcode Load) partition
(It is located at the end of the disk.) |
feH |
Windows NT Disk Administrator hidden partition
(Windows NT Disk Administrator marks hidden partitions, i.e. present but not to be accessed, as type FEH.) |
feH |
Linux Logical Volume Manager partition (old) |
ffH |
XENIX Bad Block Table |
DOS 引导记录 (DBR) / DOS 引导扇区
在分区表之后,DOS 引导记录 (DBR) 或有时称为 DOS 引导扇区是硬盘驱动器上第二重要的信息。大多数用于磁盘恢复的商业应用程序都能够重新生成已损坏的引导记录
硬盘上第一个分区的 DOS 引导记录 (DBR) 通常位于 Absolute Sector 63(磁盘驱动器上的第 64 个扇区)或 CHS 形式,我们可以说 C–H–S =大多数驱动器为 0–1–1。
但是,此位置可能会因驱动器的 SPT(每磁道扇区)而异。例如,在只有 31 个 SPT 的旧 245MB 驱动器上,引导记录位于第 32 个扇区(绝对扇区 31)。
DBR 是由 DOS 的 FORMAT 命令创建的。该程序可以从 DOS 软盘(或直接从另一个卷,遵循某些操作系统限制)执行,以在使用 FDISK 命令完成分区后创建 DBR。
DBR 所在的扇区成为 DOS 特定分区的逻辑扇区 1。 DOS使用的扇区号从DBR所在的物理扇区开始。
每个 DOS 分区的第一个逻辑扇区将包含一个 DOS 引导记录 (DBR) 或 DOS 引导扇区。 DBR 的工作是将操作系统从硬盘驱动器加载到计算机的主存储器中,并将系统控制权交给加载的程序。
为此,DBR 包含一个由主引导记录 (MBR) 可执行程序执行的小程序。所有 DOS 分区都包含启动机器的程序代码,即加载操作系统,但只有该分区由主引导记录控制,主引导记录在分区表条目中指定为活动分区。
DBR 中的引导程序在分区的根目录中查找 IBMBIO.COM 或 IO.SYS 和 IBMDOS.COM 或 MSDOS.SYS 两个程序文件。 IBMBIO.COM 和 IBMDOS.COM 是 PC-DOS 系统或原始 IBM 系统上的两个隐藏系统程序文件。而 IO.SYS 和 MSDOS.SYS 是 IBM 兼容系统提供的 MS-DOS 操作系统上的两个隐藏系统程序文件。
之后,IO.SYS(或 IBMBIO.COM)程序加载 MSDOS.SYS(或 IBMDOS.COM)程序和 COMMAND.COM 程序。这个完整的过程称为计算机的“启动”。如果这些系统文件在目录中不可用,则此 MBR 程序会显示令人舒缓的错误消息,例如,
“系统磁盘无效或磁盘 I/O 错误,
更换磁盘,然后按任意键……”
在屏幕上等待用户将带有上述程序的可引导磁盘放入软盘驱动器并按下一个键。
由于软盘上没有分区,因此它的绝对扇区 0 上没有 MBR 或主分区表,而是在其第一个扇区包含 DBR。
下表给出了 3½ 英寸、1.44 MB 软盘在使用 FAT12 文件系统格式化后的简单布局图。它显示了引导记录、FAT 的两个副本、根目录和数据区的开头所在的位置:
Logical Map of 3½ Inches, 1.44 MB floppy disk, Formatted with the FAT12 File System and having 18 Sectors Per Track, 80 Tracks, 2 Sides and 512 bytes per Sector (using 1 Sector per Cluster). |
Absolute Sectors |
Contents |
0 |
Boot Record |
1 – 9 |
FAT 1 |
10 – 18 |
FAT 2 |
19 – 32 |
Root Directory |
33 – 2879 |
Data Area |
您还可以在数据区域中创建子目录,其中包含似乎包含在其中的文件。事实上,子目录只不过是一个特殊的文件,它列出了该目录中看似包含的所有文件以及每个文件的所有相关数据,例如每个文件的起始簇的位置、日期、时间和文件大小等。
DBR 还包含有关磁盘几何结构的一些重要信息。该信息位于每个分区的第一个扇区,如:
- 跳转代码 + NOP
- OEM 名称和版本
- 每扇区字节数
- 每个集群的扇区
- 保留部门
- FAT 副本数
- 最大根目录条目(但不适用于 FAT32)
- 分区中小于 32MB 的扇区数(因此不适用于 FAT32)
- 媒体描述符(F8h 用于硬盘)
- 每个 FAT 的扇区(在较旧的 FAT 系统中,不适用于 FAT32)
- 每个轨道的扇区
- 头数
- 分区中的隐藏扇区数
- 分区中的扇区数
- 每个 FAT 的扇区数
- FAT 信息描述符标志
- FAT32 驱动器版本
- 根目录开始的簇号
- 文件系统信息扇区的扇区号
- 备份引导扇区的扇区号
- 保留
- 分区的逻辑驱动器数
- 扩展签名 (29H)
- 分区序列号
- 分区的卷名
- FAT 名称
- 可执行代码
- 可执行标记或幻数 (AAH 55H)
DBR 的前 3 个字节包含一条 JMP 指令,用于跳过信息并使扩展成为可能,因为 MBR 将此扇区加载到内存中并将执行转移给它。通常这三个字节是十六进制数字,格式类似于 E9 XX XX (Hex) 或 EB XX 90 (Hex).
在初始 JMP 指令 OEM ID 之后是一个 8 位字段,由 Microsoft 保留用于 OEM 标识。 OEM ID 描述了创建引导记录的程序。这通常是 "MSWIN4.0" 用于 Windows 95/98/ME,"IBM 20.0" 用于 OS/2 和 "MSDOS5.0" > 适用于 MS-DOS 4.0 及更高版本。
引导扇区的第三个主要组成部分是 BIOS 参数块 (BPB)。磁盘参数块对于 DOS 来说是非常重要的数据区。它可以帮助 DOS 找到:
- 每扇区字节数
- 每个集群的扇区
- 保留部门
- FAT 数量
- 根目录条目数
FAT32 DOS Boot Record Format |
Offset |
Description |
Size |
00H |
Jump Code + NOP |
3 Bytes |
03H |
OEM Name and Version |
8 Bytes |
0BH |
Bytes Per Sector |
2 Bytes |
0DH |
Sectors Per Cluster |
1 Byte |
0EH |
Reserved Sectors |
2 Bytes |
10H |
Number of Copies of FAT |
1 Byte |
11H |
Maximum Root Directory Entries (but Not Available for FAT32) |
2 Bytes |
13H |
Number of Sectors in Partition Smaller than 32MB (Therefore Not Available for FAT32) |
2 Bytes |
15H |
Media Descriptor (F8H for Hard Disks) |
1 Byte |
16H |
Sectors Per FAT (In Older FAT Systems and Not Available for FAT32) |
2 Bytes |
18H |
Sectors Per Track |
2 Bytes |
1AH |
Number of Heads |
2 Bytes |
1CH |
Number of Hidden Sectors in Partition |
4 Bytes |
20H |
Number of Sectors in Partition |
4 Bytes |
24H |
Number of Sectors Per FAT |
4 Bytes |
28H |
Flags (Bits 0-4 Indicate Active FAT Copy) (Bit 7 Indicates whether FAT Mirroring is Enabled or Disabled <Clear is Enabled>) (If FAT Mirroring is Disabled, the FAT Information is only written to the copy indicated by bits 0-4) |
2 Bytes |
2AH |
Version of FAT32 Drive (High Byte = Major Version, Low Byte = Minor Version) |
2 Bytes |
2CH |
Cluster Number of the Start of the Root Directory |
4 Bytes |
30H |
Sector Number of the File System Information Sector (Referenced from the Start of the Partition) |
2 Bytes |
32H |
Sector Number of the Backup Boot Sector (Referenced from the Start of the Partition) |
2 Bytes |
34H |
Reserved |
12 Bytes |
40H |
Logical Drive Number of Partition |
1 Byte |
41H |
Unused (Could be High Byte of Previous Entry) |
1 Byte |
42H |
Extended Signature (29H) |
1 Byte |
43H |
Serial Number or 32 – Bit Binary ID of Partition
(Binary ID of 32 Bits provided by the OS itself) |
4 Bytes |
47H |
Volume Name of Partition |
11 Bytes |
52H |
FAT Name (FAT32 in this case) |
8 Bytes |
5AH |
Executable Code |
420 Bytes |
1FEH |
Executable Marker or Magic Number (AAH 55H) |
2 Bytes |
- 逻辑卷中的总扇区(小,对于小于或等于 32 MB 的逻辑卷)
- 媒体描述符字节
- 每个 FA 的扇区数
此信息有助于我们找到 FAT 的位置和其他一些重要值。在此处输入错误信息或破坏这些值会导致无法从硬盘驱动器引导。有时磁盘参数块中的错误信息会阻止从硬盘驱动器和软盘驱动器启动。
每个扇区的字节数几乎总是 512。 如果不是这样,那么它必须是 2 的整数幂(例如 64、128 和 256)。
每个集群的扇区数取决于集群的大小。 (参见本章前面给出的集群部分)。 FAT 的副本数几乎总是 2。
根目录数: 这取决于文件系统和卷大小。 (参见前面给出的文件系统限制和下面给出的根目录的描述)。
扇区总数:不包括隐藏扇区。如果在 BPB 中为 0,则使用扩展引导记录信息中的字段,反之亦然。请注意,可以通过检查偏移 26H 处的签名字节来确定扩展信息(DOS 4.0 及更高版本)是否可用。
逻辑 DOS 驱动器的引导扇区之前的任何扇区都被视为“隐藏”扇区。 DOS 不解释隐藏扇区。普通软盘驱动器有 0 个隐藏扇区。硬盘分区将有一个编号,反映它们在驱动器上的位置。请注意,第一个柱面的整个第一个磁头通常是为分区表保留的,即使它只是实际使用的第一个扇区。
媒体描述符:用于指示媒体或磁盘类型。扩展 DOS 分区的正常值为 0,硬盘驱动器的正常值为 F8H。下表给出了媒体描述符字节的值。
Media Descriptors |
Type |
Capacity |
Size and type |
F0H |
2.88 MB |
3.5", 2-Sided, 36 Sectors per Track |
F0H |
1.44 MB |
3.5", 2-Sided, 18 Sectors per Track |
F9H |
720 KB |
3.5", 2-Sided, 9 Sectors per Track |
F9H |
1.2 MB |
5.25", 2-Sided, 15 Sectors per Track |
FDH |
360 KB |
5.25", 2-Sided, 9 Sectors per Track |
FFH |
320 KB |
5.25", 2-Sided, 8 Sectors per Track |
FCH |
180 KB |
5.25", 1-Sided, 9 Sectors per Track |
FEH |
160 KB |
5.25", 1-Sided, 8 Sectors per Track |
F8H |
--------- |
Fixed Disk |
FAT 的扇区数:必须计算。 FAT 大小的计算方法已在本章给出的 FAT 描述中给出。
下图给出了 FAT32 文件系统的 DBR:
Sectors Per Track(或 Sectors Per Head):Sectors Per Head 是分组在 onehead 下的扇区数。同样,每个气缸的头数反映了每个气缸头的气缸数。如果此分区是 CHS 分区,则这些值必须与 BIOS 返回的值相同。如果不相同,则必须考虑磁盘配置错误,分区可能无法使用。
隐藏扇区:正如我们已经讨论过的,这是物理磁盘上卷开始之前、引导扇区本身之前的扇区数。在引导序列期间使用它来计算到根目录和数据区域的绝对偏移量。将其视为该分区的开头与分区表本身之间的扇区数。
此字段应与分区表中的“分区前扇区数”相同。请注意,不一定是第一个扇区的物理 LBA 地址,因为可能存在二级分区。
如果隐藏扇区与分区表中的不同,您可能会认为引导扇区已损坏并且分区不可用。另请注意,在旧版本的 DOS 中,高位字通常包含垃圾。
如果您怀疑引导扇区已损坏,您可以检查上面列出的几个字段,看看那里列出的值是否有意义。
例如, 在绝大多数情况下,每个扇区的字节数为 512。您可能还希望在引导扇区的可执行代码部分中看到适用于格式化磁盘的操作系统的文本字符串。
例如,由 MS-DOS 格式化的 FAT 卷上的典型文本字符串包括:"系统磁盘无效。"、"磁盘 I/O 错误。"、"更换磁盘,然后按任意键”、“非系统磁盘或磁盘错误”、“准备好后更换并按任意键。”和“磁盘引导失败。”由 Windows NT 格式化的 FAT 卷上的文本字符串包括:“引导:无法(或无法)找到 NTLDR”、“读取磁盘的 I/O 错误。”和“请插入另一个磁盘”。
但请记住,您不应认为此列表包罗万象。如果您在引导扇区中发现其他消息,这并不一定表明引导扇区存在问题。不同版本的 MS-DOS 和 Windows NT 有时在它们的引导扇区中可能会有稍微不同的消息字符串。
另一方面,如果您没有找到任何文本,或者如果该文本显然与 MS-DOS 或 Windows NT 无关,您应该考虑您的引导扇区可能已被病毒感染或某些可能发生了其他形式的数据损坏。
要从已感染病毒的引导扇区中恢复,通常最好使用商业防病毒程序。许多病毒和木马不仅仅是将数据写入引导扇区,因此不建议手动修复引导扇区,因为它可能无法完全消除病毒或木马,在某些情况下可能弊大于利。但是我们将在本书的编程部分处理 DBR。
如果您怀疑引导扇区因其他原因损坏,则可以通过手动修改上述字段来从引导扇区损坏中恢复,而无需重新格式化驱动器。我们将在本书的恢复编程技术中尝试克服这些编程问题。
文件分配表 (FAT)
DBR 之后是文件分配表。文件分配表 (FAT) 于 1977 年推出,用于将数据存储在 Microsoft 独立 Disk Basic 的软盘上。 FAT 已经过多次修改以适应不断扩大的需求。它的开发是为了满足快速灵活的系统管理可移动和固定媒体上的数据的要求。
1996 年,FAT32 随 Windows 95 OSR2 一起推出。如前所述,Windows 98/ME 支持硬盘大小的 FAT32。现在这些操作系统普遍使用的是 FAT32 文件系统。
第一个 DOS FAT 文件系统 (DOS 1.x) 使用 12 位 FAT 系统,至今仍用于软盘。 DOS 2.x 增加了对硬盘的支持,由于更大的卷,转移到了 16 位 FAT 条目。
大约在 1987 年,DOS 4.0 将低级扇区处理改为使用 32 位参数来解决大磁盘支持问题,因为我们已经讨论了文件系统的局限性。
FAT 保存磁盘驱动器的整个表面的映射,这样,哪个区域是空闲的,哪个区域是坏的,哪个区域被哪个文件占用等等。当存储在磁盘表面上的一些数据要被访问时, DOS 查阅 FAT 以找出硬盘表面包含数据的区域。
要使用的 FAT 类型由硬盘驱动器分区期间的 FDISK 程序决定。但实际的FAT是由DOS的FORMAT程序编写的。
FAT 不会跟踪磁盘表面上的每个扇区,而是在称为“簇”或“分配单元”的一组扇区中管理磁盘区域(参见前面讨论过的簇,在同一章中) .
簇是 DOS 分配给文件的最小硬盘空间单位,它由一个或多个扇区组成,具体取决于驱动器大小。簇大小由 DOS FORMAT 程序在硬盘驱动器的高级格式化过程中决定和固定。 (参见前面给出的“集群大小”讨论)
实际上,FAT 是整个卷的簇的索引。 FAT 对每个簇都有一个条目。 FAT 中的前两个条目包含有关 FAT 的信息。 FAT 中的第三个和后续条目分配给磁盘空间簇,从第一个可供文件使用的簇开始
由于 FAT 是如此重要的项目,DOS 保留了 FAT 的两个副本,主 FAT 或 FAT1 和辅助 FAT 或 FAT2(通常有两个副本,但是许多新的操作系统会创建两个以上的 FAT 副本)。
每个 FAT 占用磁盘上的连续扇区,第二个 FAT 紧跟第一个 FAT 不会使 DOS 使用第二个 FAT 来纠正问题,而是在更新第一个 FAT 时 DOS 将其复制到第二个 FAT,从而破坏第二个 FAT 也在处理中。
每次 DOS 发现第一个和第二个 FAT 不匹配时,都会进行此更新。因此,如果第一个 FAT 出现任何损坏,应立即使用一些磁盘编辑器软件进行修复,并将第一个 FAT 与第二个 FAT 进行比较。这应该在 DOS 将损坏的 FAT 复制到第二个 FAT 之前完成。
随着 FAT32 的引入,FAT 条目和扇区编号现在都是 32 位的。这意味着现在有 4,294,967,296 个不同的 32 位值乘以每个扇区 512 字节,得出 2 TB(2,199,023,255,552 字节)作为 FAT32 下可能的最大磁盘大小。
FAT 32 中每个文件的目录条目大小为 4 个字节,以包含文件起始簇的值,而不是 FAT16 下所需的 2 个字节。值越大,可能的集群数量就越多。
传统上,每个目录条目是一个 32 字节的记录,并且保持不变。在目录记录的中间有 10 个字节(字节 12 到 21),Microsoft 保留了供自己将来使用。其中两个字节现在用于容纳在 FAT32 下指定起始簇所需的额外字节。
正如我们已经讨论过的,有 12 位、16 位和 32 位版本的 FAT。而 32 位 FAT 允许更高效的存储,可以提高 30% 的效率并使用更大的硬盘。
当程序调用操作系统的文件系统来查找文件的内容时,将读取该文件的目录条目中的第一个簇值并用于查找 FAT 链。 FAT 链是包含属于文件的数据的簇列表。
FAT32 Drive Layout |
Offset |
Description |
Start of Partition |
Boot Sector |
Start of Partition + Number of Reserved Sectors |
FAT Tables |
Start of Partition + Number of Reserved Sector + (Number of Sectors Per FAT * 2)
[Assuming that FAT Mirroring is Enabled, this is almost always true] |
Root Directory |
Start of Partition + Number of Reserved Sectors + (Number of Sectors Per FAT * 2) + Number of Sectors in root directory |
Data Area |
FAT 条目可以包含指示:
- 给定文件的 FAT 链中的下一个簇
- 免费集群,即未被任何文件使用的集群
- Bad Sectors 信息,即包含一个或多个物理损坏且不应使用的扇区的集群。
- 文件的最后一个簇
Entries of FAT Table |
Number (Hex.) |
Description |
0 |
Free cluster |
???? |
Cluster in use, next cluster in chain |
FF0-FF6 / FFF0-FFF6 |
Cluster is reserved |
FF7 /FFF7 |
Cluster contains bad sectors |
FF8-FFF / FFF8-FFFF |
End of file |
每个 FAT 条目代表一个簇地址并包含指向文件的下一个簇地址(FAT 条目)的指针。文件的最后一个 FAT 条目包含最终的簇值而不是指针。 FAT 中的前两个条目包含有关 FAT 的信息。 FAT 的这些字节包含一个媒体描述符字节。此字节可用于查找此 FAT 条目所在的磁盘介质的类型。
FAT 中的第三个和后续条目分配给磁盘空间簇,从可供文件使用的第一个簇开始。根据要传达的信息,FAT 条目可以具有上表中给出的任何值。
12 位 FAT 中的 000H 或 16 位 FAT 中的 0000H 表示该 FAT 位置对应的簇未分配或为空。 12 位 FAT 中从 FF8H 到 FFFH 的任何值或 16 位 FAT 中从 FFF8H 到 FFFFH 的任何值都表示该簇是文件簇链中的最后一个簇。
12 位中从 FF0H 到 FF7H 的值 – 位 FAT 表示保留的簇。 12 位 FAT 中的 FF7H 或 16 位 FAT 中的 FFF7H 表示对应于 FAT 位置的簇是坏簇,即这基本上是包含坏扇区的簇。该集群不用于数据存储。
FAT 表中的任何其他值都是指向文件分配链中下一个簇的指针。
Windows 如何检测不当 - 关机
这是很常见的事情,我希望您在使用 Windows 时已经注意到很多次,如果您的计算机有任何不正确的关闭,由于任何原因,如电源故障、软件损坏、意外关闭等,当您进一步重新启动您的计算机,在启动过程中屏幕上会显示错误 - 关闭的消息,并且操作系统会扫描磁盘以查找错误。
接下来的两个图显示了 32 位 FAT 开头的 256 个字节,但是我们只需要最初的 8 个字节来讨论这个问题。
实际上,当 Windows 操作系统将自身加载到内存中时,即 Windows 已启动,FAT 的第 8 个字节(或偏移量 7H)从 0FH 或 FFH 变为 07H 或 F7H。
Microsoft 仅将字节 0FH 用于包含正在运行的操作系统的卷,并将字节 FFH 用于它正在访问的任何其他卷。
Windows 开始启动后,第 8 字节更改为 07H 或 F7H,只有在 Windows 正确关闭时才会设置回 0FH 或 FFH。
如果出现电源故障,或者电脑的电源开关被意外关闭,或者由于某些软件问题而手动重启系统,则该字节将保持为07H或F7H,通知Windows操作系统下次启动时出现某种不正确的关闭,然后 Windows 使用它的磁盘扫描程序 (Scandisk) 来验证磁盘是否有错误。
根目录
在最后一个 FAT 之后是根目录。根目录就像是存储在硬盘驱动器上的信息的目录。根目录的位置可以通过将引导记录中的值相加来轻松确定,因为它位于 FAT 之后。
目录区保存了特定文件的文件名、文件创建日期和时间、文件属性、文件大小和起始簇等信息。每个描述文件信息的目录条目都是一个 32 字节的信息。
根目录包含有关从根目录分支的文件和目录的信息。所有其他目录本身都存储为文件,格式与根目录相同。以前根目录的大小是固定的,并且位于磁盘上的固定位置,但现在它可以根据需要自由增长,因为它现在被视为一个文件。
根目录中可以存储的文件数量取决于所使用的 FAT 类型。例如,对于具有 12 位 FAT 的 3½ 英寸 1.44Mb 软盘,它被限制为 224 个条目,如果尝试存储第 225 个文件 DOS 将显示“文件创建错误”。当使用 16 位 FAT 时,根目录中总共可以有 512 个条目。软盘或硬盘上的每个主目录也充当根目录条目。
下表列出了不同媒体和 FAT 的根条目限制:
Media and File System Description |
Maximum Root Directory Entries |
Single-sided 5¼ Inch 180K FDD |
64 |
Double-sided 5¼ Inch 320K FDD |
64 |
Double-sided 5¼ Inch 360K FDD |
112 |
Double-sided 3½ Inch 720K FDD |
112 |
Double-sided 5¼ Inch 1.2-megabyte FDD |
224 |
Double-sided 3½ Inch 1.44-megabyte FDD |
224 |
Double-sided 3½ Inch 1.68-megabyte DMF format disks (This is why Microsoft created CAB Files!) |
16 |
Double-sided 3½ Inch 2.88-megabyte FDD |
240 |
Hard Drives (FAT12 & FAT16) |
512 |
Hard Drives with FAT 32 (As it treats the route directory as a file) |
65,536 |
这并不意味着 16 位 FAT 仅限于在硬盘驱动器上存储 512 个文件。可以使用子目录存储任意数量的文件,仅受驱动器大小的限制。
请记住,软盘的卷标通常存储在引导扇区中,但硬盘驱动器的卷标存储为根目录条目,并且引导扇区中保留的空间用空格留空。 DOS的DIR命令如果存在则返回目录中的那个,否则返回引导扇区中的那个。
目录条目包含进入集群链的条目和文件名。因此最重要的目录条目是根目录,因为它包含指向所有子目录的集群索引。
所有目录都包含两个条目,“.”用于当前目录(此子目录)和“..”用于父目录(此子目录的父目录)。我们可以轻松地跟踪这些条目,因为如果集群包含目录,它们将始终位于集群的开头。
下表显示了根目录中目录条目的格式。下面给出的表格显示,根目录中文件的 32 字节目录条目如何被切片以存储有关它的各种信息:
Offset |
Size |
Description |
00H |
8 Bytes |
Filename
(Also see the next table for the special meaning of first character of file name) |
08H |
3 Bytes |
Extension |
0BH |
1 Byte |
File attributes(See The Table Of File Attributes) |
0CH |
10 Bytes |
Reserved |
16H |
2 Bytes |
Time Created or Last Updated (See Date–Time Format Table) |
18H |
2 Bytes |
Date Created or Last Updated (See Date–Time Format Table) |
1AH |
2 Bytes |
Starting or First cluster of file
(The value 0000H is used in Parent Directory ('..') entries to indicate that the Parent Directory is the Root Directory) |
1CH |
4 Bytes |
File size in Bytes. |
文件名包含大写的名称,如果文件名的大小小于 8 个字符,则空格用 ASCII 数字 32 的空格字符填充。扩展字段包含文件的扩展名,大写。
如果文件名超过 8 个字符,Windows 会通过将长文件名截断为六个大写字符并在基本文件名末尾添加“~1”来创建一个短文件名。
如果已经有另一个文件名具有相同的前六个字符,则数字会增加。扩展名保持不变,任何在早期版本的 Windows 和 DOS 中非法的字符都被替换为下划线。
长文件名存储在特殊格式的 32 字节长文件名 (LFN) 目录条目中,其属性字节设置为 0FH。对于给定的文件或子目录,一组一个或多个长文件名目录条目紧接在磁盘上的单个 8.3 目录条目之前。
每个 LFN 目录条目最多包含 13 个字符的长文件名,并且操作系统将尽可能多的字符串组合在一起以构成整个长文件名。
这就是为什么长文件名会减少文件系统中根目录条目的最大可能数量的原因。 Windows 如何支持长文件名,我们将在本章后面详细讨论。
文件名的第一个字节也可能包含一些关于文件的重要信息。该字节给出的信息可能是下表中给出的信息之一:
First Character of File Name |
Value |
Meaning |
00H |
Indicates that this directory entry is unused. |
05H |
Indicates that 1st character of filename is character E5H But actually the file has not been deleted. (See the Meaning of E5H) |
E5H |
The file has been Erased and this directory entry is a deleted file’s directory entry. The data area previously occupied by that file is now free for allocation for another new file. |
2EH |
This is a Sub-directory. The cluster number field of this entry will contain the cluster number of the directory. |
2EH 2EH |
Two 2EH in a directory entry indicate the parent directory entry of a Sub–Directory. The cluster number of this entry will contain the cluster number of the parent directory of this directory. The cluster number will be zero 0000H if the parent directory is root directory. |
The Attributes is an 8–Bit binary coded field. The following table tells about the Status for flag of attributes for the given file:
Attribute Bits |
Attribute |
Bit |
Binary |
Hex |
Read Only File Flag |
0 |
.......? |
01H |
Hidden File Flag |
1 |
......?. |
02H |
System File Flag |
2 |
.....?.. |
04H |
Volume Label Flag
(Indicates that the entry is a volume label) |
3 |
....?... |
08H |
Sub–directory
(in same format as directory) |
4 |
...?.... |
10H |
Archive Bit
(File Modified Since Last Backup) |
5 |
..?..... |
20H |
Reserved (Contains 0) |
6 |
.0...... |
- |
Reserved (Contains 0) |
7 |
0....... |
- |
一个文件可能有多个属性。例如,单个文件可能是只读文件和隐藏文件,或者单个文件可能同时具有系统文件和隐藏文件这两个属性。 (有关目录条目的编码,请参见下面给出的示例)。
时间和日期是一个特殊编码的 32 位字段(16 位时间和 16 位日期)。下表给出了这些位编码的划分,以组成文件的创建或上次更新时间和创建或上次更新日期:
Time of Create 或 Last Update of file 条目,即目录条目中的第 16 和 17 字节,具有上表中给出的格式。编码如下:
- H是小时的二进制数,范围为0到23
- M 是二进制的分钟数,取值范围为 0 到 59
- S 是以 2 秒为增量表示秒的二进制数
- 创建或最后更新文件的数据,即目录项中的第 18 和 19 字节,格式如下:
- Y 是 0 到 127 或 1980 年到 2107 年之间的二进制数
- M 是月份的二进制数,范围为 1 到 12
- D 是日期的二进制数,范围为 1 到 31
该目录条目根据第一个簇值与 FAT 条目链接。一旦 DOS 获得了目录中任何文件的起始簇值,DOS 就可以使用 FAT 找出完整的文件。链中的条目簇是组成文件的第一个簇。如果设置了属性的目录标志,则该字段指向一个新的目录条目。
Size of file 条目为 4 Bytes。由此我们可以计算出,FAT32 是如何支持最大为 4,294,967,295 字节的文件大小的,大约为 4 GiB。 4 字节有 32 位,由任何 32 位二进制组成的最大可能文件大小可以是,
= 11111111 11111111 11111111 11111111 (B) Bytes
= 4,294,967,295 (D) Bytes
~ 4 GiB
因此 FAT32 支持的最大文件大小高达 4 GiB.
文件的大小和文件的起始簇可能是恢复损坏文件时数据恢复的宝贵资源,因为我们可以计算文件应该包含多少个簇。
前面给出的图显示了七个不同文件的根目录条目。下表给出了这些条目的编码:
长文件名 (LFN)
正如我们之前在根目录讨论中所讨论的,以前根目录的大小是固定的,并且位于磁盘上的固定位置,但现在它可以根据需要自由增长,因为它现在被视为一个文件。
这对于长文件名非常重要,因为每个长文件名使用多个目录条目。为使用 8.3 文件名的操作系统添加长文件名支持并不像扩展目录条目以容纳超过 11 个字符那么简单。
如果这个新操作系统返回 255 个字符的文件名,许多预期接收不超过 11 个字符的旧应用程序将会崩溃,因为程序必须留出内存来存储它读取的文件名,如果它留出文件名有 16 个字节,操作系统将(比如说)32 个字符复制到该空间,然后其他数据被覆盖。破坏应用程序的可靠方法是将随机数据复制到其数据空间中。
为了克服这个问题,在 Windows 95 中找到了一个巧妙的解决方案,解决了支持长文件名的问题,同时保持与以前版本的 DOS 和 Windows 应用程序的兼容性。
当大多数应用程序(除了低级磁盘实用程序,例如 Norton Disk Doctor)向系统查询文件和子目录名称时,它们不是通过直接从磁盘读取目录条目,而是通过使用操作系统内置的枚举函数来查询.
我们知道,一个目录条目是用只读、隐藏、系统和卷标属性位的组合来标记的。很可能,如果 Directory Entry 的属性字节包含值 0FH,则内置于所有现有版本的 DOS 和所有 Pre-Windows 95 版本的 Windows 中的枚举函数将跳过该目录条目,就好像它不存在一样。
然后,解决方案是为每个文件和子目录存储两个名称,一个对所有应用程序可见的短名称和一个仅对 Windows 95(及更高版本)应用程序和已重写的应用程序可见的长名称添加对长文件名的支持。短文件名以 8.3 格式存储在传统的 32 字节目录条目中。
我们已经讨论过 Windows 通过将长文件名截断为六个大写字符并在基本文件名末尾添加“~1”来创建短文件名。
如果已经有另一个文件名具有相同的前六个字符,则数字会增加。扩展名保持不变,任何在早期版本的 Windows 和 DOS 中非法的字符都被替换为下划线。
长文件名存储在特殊格式的 32 字节长文件名 (LFN) 目录条目中,其属性字节设置为 0FH。对于给定的文件或子目录,一组一个或多个长文件名目录条目紧接在磁盘上的单个 8.3 目录条目之前。
每个长文件名目录条目最多包含 13 个字符的长文件名,并且操作系统会根据需要将尽可能多的字符组合在一起以构成完整的长文件名。
对于长文件名目录条目,文件名以 Unicode 格式存储,每个字符需要 2 个字节,而不是 1 个字节的 ASCII。文件名字符分布在三个单独的字段中:
- 长度的前 10 个字节(五个字符),
- 第二个12字节(六个字符),
- 第三个 4 字节(两个字符)。
- 目录条目第一个字节的最低五位保存一个序列号,用于标识目录条目相对于其他条目的位置
- 与同一文件关联的长文件名目录条目。
如果长文件名需要三个 LFN 目录条目,第一个的序号为 1,第二个的序号为 2,第三个的序号为 3,第一个字节的第 6 位第三个字节entry 设置为 1 表示它是序列中的最后一个条目。
属性字段出现在 LFN 目录条目中与 8.3 目录条目中相同的位置,因为文件系统在检查属性字节之前不知道它正在处理哪种类型的目录条目。起始簇号字段也出现在同一位置,但在 LFN 目录条目中,其值始终为 0。类型指示符字段在每个长文件名中也包含 0。
长文件名的问题之一是它们比短文件名消耗更多的磁盘空间。当长名称存储在子目录中时,这没什么大不了的,因为只要磁盘空间可用,子目录就可以增长以容纳添加的目录条目,但根目录中可用的目录条目的最大数量是固定的,并且长文件名浪费根目录中的空间,大小有限。
现在举例, 如果硬盘的根目录最多包含 512 个目录条目,因为 128 个字符的名称需要 11 个条目,长名称为 10,短名称为 1,因此您可以在根目录下仅创建 46 个文件和子目录,如果每个人都有一个 128 个字符的名字.
FAT32 的问题也消失了,因为 FAT32 下的根目录也可以增长,因为在 FAT32 系统中,根目录被视为可以增长的文件.
数据区(或文件区)
在根目录之后,数据区(或文件区)开始。相反,我们可以说根目录之后的卷的其余部分是数据区。
数据区包含存储在磁盘表面上的实际数据。 DOS 将簇号 2 用于数据区的第一个扇区,因此我们在执行各种计算时应牢记簇号应从 2 开始。
当我们格式化硬盘驱动器时,DOS 的 FORMAT 命令不会破坏或覆盖数据区的数据。 FORMAT 命令只删除目录项和 FAT 项,并不触及实际的数据区域。
这使得意外格式化的硬盘驱动器的恢复成为可能,这在所有意外格式化软盘的情况下都是不可能的。与 Windows 的完整格式一样,软盘的数据区域由 F6H 字符填充,所有信息都被覆盖。
DOS 使用称为“Last Cluster Used”(LCU)指针的 16 位/32 位指针来存储上次使用的集群编号。最初这个指针的值是零,当一些信息被写入一个特定的簇时,那个簇号被存储到 LCU 指针中。
此后,每次如果要写入新信息,DOS 就会从 LCU 号开始搜索空闲簇。这会强制写入磁盘上的新数据在数据写入新的未使用区域时保持连续。
现在,由于文件位于磁盘上的一个连续区域,因此在意外删除的情况下理解数据会容易得多。一旦到达磁盘末尾或系统重置,LCU 指针值将重置为零。
但问题并没有持续到这里。实际上不可能只在磁盘上创建新文件而从不删除或修改以前存储的文件中的任何文件。如果您创建和删除大量文件,则仅使用 LCU 会出现问题,因为这将迫使新数据越来越远地移动到硬盘的内部磁道中。
因此,如果存储在磁盘中的任何文件被移动或删除,则数据区域中被文件占用的簇现在被设置为数据区域中可用的未分配簇,并准备写入新数据在他们。通过这样做,操作系统不需要将所有数据移动到磁盘的内部磁道。
但是大量删除和创建文件会使磁盘上的数据碎片化,这会导致数据中的碎片化。
碎片化和碎片整理的数据
我们已经讨论过,磁盘中的每个文件都存储为集群的链表,通过集群链表,文件中包含的数据可以位于磁盘上的任何位置。如果您有一个使用 4,096 字节簇存储在磁盘上的 10 MB 文件,则它使用了 2,560 个簇。这些簇可以在不同的磁道、不同的磁盘盘片上,事实上,它们可以在任何地方。
虽然文件可以分布在整个磁盘上,但这远非首选情况。原因是不良的缓慢性能。硬盘是比较慢的设备,主要是因为里面有机械部件。每次硬盘必须将磁头移动到不同的磁道上,所花费的时间相当于数千个处理器周期。
因此,我们希望最小化每个文件在磁盘上的分布程度。在理想情况下,每个文件实际上都是完全连续的。这意味着它使用的每个集群将一个接一个地位于磁盘上。如有必要,这将使整个文件能够被读取,而无需硬盘进行大量机械移动。
实际上,文件系统开始时其全部或大部分文件是连续的,但由于在一段时间内创建和删除文件,磁盘上的数据变得越来越碎片化。
让我们考虑一个简单的例子来理解碎片。下表代表了 12 个集群的使用情况。最初,该表是空的:
cluster 1 |
cluster 2 |
cluster 3 |
cluster 4 |
cluster 5 |
cluster 6 |
cluster 7 |
cluster 8 |
cluster 9 |
cluster 10 |
cluster 11 |
cluster 12 |
现在让我们假设我们在这个磁盘中创建了四个文件,文件 A、B、C 和 D。文件 A 占用 1 个簇,文件 B 占用 4 个簇,文件 C 占用 2 个簇,文件 D 占用 3 个簇。我们将它们存储在可用空间中,它们一开始都是连续的,如下图所示:
一段时间后,让我们删除文件 C,通过这样做,文件 C 占用的两个簇现在都是空闲的或未分配的。这使磁盘如下图所示:
现在,我们创建一个需要 3 个集群的新文件 E。但是,由于磁盘上没有 3 个簇长的连续块,所以我们必须将 E 分成两个片段,使用以前由 C 占用的部分空间。现在我们的磁盘将如下图所示:
一段时间后,让我们删除文件 A 和 E,并创建文件 F,占用 5 个集群。磁盘现在如下图所示:
现在我们看到文件 F 最终被分成三个片段。磁盘中的这种数据称为碎片数据。上面给出的例子是一个非常简化的碎片化例子,因为真实的磁盘有上千个文件和上千个簇,所以这里的问题被放大了。这可以让您大致了解会发生什么。
碎片整理程序(如 Microsoft 的 DEFRAG Program、Norton 的 SpeedDisk)所做的是重新排列磁盘以使文件恢复为连续的形式。运行磁盘碎片整理实用程序后,我们正在讨论的磁盘上的碎片整理数据将如下图所示:
在许多情况下,碎片和碎片整理的数据在数据恢复过程中非常重要。
让我们考虑一下我们有两个用于数据恢复的崩溃磁盘,一个有碎片数据,一个最近进行了碎片整理。并且您必须通过从两个磁盘表面收集数据来进行数据恢复,因为文件的 FAT 和 Root 信息已损坏。在这种情况下,恢复的百分比将与磁盘中数据的碎片整理成正比。
显然,从碎片整理磁盘中恢复数据会很容易,并且数据恢复的百分比也会很高,但另一方面,从碎片磁盘中恢复数据会很困难,而且耗时以及百分比恢复的数据也将令人失望。
确定数据损坏的原因
如果按顺序执行某些特定步骤,可以帮助我们找到腐败区域。这些步骤已通过以下恢复过程进行了描述:
用软盘启动系统
使用您正在使用的操作系统的可引导软盘或 CD 引导您的系统。尝试读取逻辑驱动器 C: 或 D: 或其他。如果驱动器是可访问的,只需将所有数据从驱动器中复制出来。现在您可以轻松地找出磁盘无法正常启动的原因。
验证 MBR 信息
硬盘上第一个也是最重要的数据是 MBR 和它在其中承载的表,即分区表。本书随附的磁盘中提供了名为“TTEDITOR.EXE”的小磁盘编辑工具。或者您可以使用任何其他程序来分析硬盘。
Diskedit 将是分析磁盘以进行数据恢复的最合适的程序。好吧,无论您觉得易于使用哪个程序都在您身上。尝试读取 MBR,尤其是它的分区表。
正如你在本章讨论的 MBR 的描述中看到的,在 MBR 的后半部分,有一些可读的文本会显示为错误消息,如果它有问题的话。这些短信显示如下:
“Invalid partition table, Setup can not continue”
“Error loading operating system, Setup can not continue”
如果这些错误消息不可用,则表明 MBR 损坏。也可能有一些非法消息,而不是这样,“您的系统已被黑客入侵......”或任何其他意外消息。这表明MBR有严重问题,很可能是由于某种病毒感染
现在在最初的 446 字节之后检查 MBR 的分区表。如果分区表为空白,则在引导时您不会看到任何错误消息。 DOS 忽略非分区驱动器。如果驱动器 A: 中没有任何可引导软盘,系统将请求将可引导软盘插入驱动器 A:。
这里要注意的重要一点是,分区表在以前工作的驱动器上不应为空白,因此已将其删除。如果分区表为空,则从备份中恢复 MBR。
如果备份不起作用,即使在成功完成恢复过程后,该扇区也会有物理损坏。尝试数据恢复的编程技术,在接下来的章节中给出恢复数据。如果你根本不是程序员,最好去任何好的数据恢复中心。
如果您没有任何 MBR 备份,请尝试使用一些磁盘编辑工具(例如 Diskedit)手动写入分区表,但在某些情况下这样做非常困难。
对于那些不是程序员也没有任何备份的用户,可以使用我从数据恢复项目开发以来一直使用的方法,在我的大学时代。
你需要做的是,搜索你附近的电脑,它的磁盘大小几乎相同,分区数相同,最重要的是你电脑上的操作系统相同。
但它在大多数情况下完全有效。但如果不是这样,至少它可以帮助您访问磁盘的第一个分区。即使您的操作系统也将正常启动,如果它安装在第一个分区中并且其他信息没有损坏。
如果 MBR 正常,请验证 DBR
如果 MBR 正常,请验证 DBR(DOS 引导记录)。正如我们已经讨论过的,这是 DOS 分区中的第一个扇区,包含一个加载隐藏文件和引导操作系统的小程序。
DBR 还包含有关 FAT、根目录簇和分区大小等的许多重要信息。如果 DBR 损坏或有一些非法信息从备份中恢复 DBR,请使用一些类似 Diskedit 的实用程序来读取 DBR 信息.
所有专业的数据恢复软件,都可以重写DBR。我们将在本书的后续章节中讨论如何通过编程重写分区的 DBR。
您还可以在 Diskedit 的帮助下通过提供适当的信息来重写分区的 DBR。
还有一种非常简单的方法可以找出腐败的区域。屏幕上显示的错误消息有一些特定的原因要显示。一些重要错误信息的描述如下:
Message |
Description |
“Sector not found reading drive” |
This message can appear during any DOS operation. Generally, it is caused either by fading or the loss of a sector ID. |
“Data error reading drive” |
This message can appear during any DOS operation. It is caused by failing the data check – CRC (Cyclic Redundancy Check) or ECC (Error Correction Code). This “Data check” refers to the mechanism used to check whether the data read from the disk is reliable. |
“ 0 hard disk(s) found" |
It is displayed if the hard disk is not detected by the BIOS of the computer. Check the power and data cable connections of the hard disk. If connections are all right, the problem may be due to some hardware error of hard disk. |
“Hard Drive failure, press F1 to continue” |
Same as above |
“Invalid drive specification” |
It is displayed in the condition when either the system does not recognize the hardware, or there is no partition information, or the device driver of the drive is missing. |
“Invalid configuration press F1 to continue” |
If the hard disk is available, Either the battery in the motherboard is dead, and the system has lost its configuration SETUP information or the disk is not responding. |
“Invalid partition table” |
This is the MBR error message. It is displayed when the partition table of the MBR does not have the valid partition information. |
“Error loading operating system” |
This is the MBR error message. It is displayed due to any type of MBR information corruption. |
“Missing operating system” |
Same as above. |
“Disk boot failure” |
It is the DBR error message. Normally, The Hard drive should be accessible if you boot from the floppy. Though it is not bootable but that should not affect the access to the data of the drive. |
“non system disk or disk error” |
Same as above. |
“Bad or missing command interpreter” |
This message is displayed due to Bad or Missing Command Interpreter. For example if the operating do not find the command.com in current path or the command.com is corrupted. |
Page Modified on: 05/01/2022