标题：硬盘数据结构
硬盘的数据结构
(1)基本结构
1.磁道，扇区，柱面和磁头数 
硬盘最基本的组成部分是由坚硬金属材料制成的涂以磁性介质的盘片，不同容量硬盘的盘片数不等。每个盘片有两面，都可记录信息。盘片被分成许多扇形的区域，每个区域叫一个扇区，每个扇区可存储128×2的N次方（N=0.1.2.3）字节信息。在DOS中每扇区是128×2的2次方=512字节，盘片表面上以盘片中心为圆心，不同半径的同心圆称为磁道。硬盘中，不同盘片相同半径的磁道所组成的圆柱称为柱面。磁道与柱面都是表示不同半径的圆，在许多场合，磁道和柱面可以互换使用，我们知道，每个磁盘有两个面，每个面都有一个磁头，习惯用磁头号来区分。扇区，磁道（或柱面）和磁头数构成了硬盘结构的基本参数，帮这些 参数可以得到硬盘的容量，基计算公式为： 
存储容量=磁头数×磁道（柱面）数×每道扇区数×每扇区字节数 
2.簇 
“簇”是硬盘上存储数据进行分配的最小单位。当创建一个很小的文件时，如是一个字节，则它在磁盘上并不是只占一个字节的空间，而是占有整个一簇。操作系统视不同的存储介质（如软盘，硬盘），不同容量的硬盘，簇的大小也不一样。簇的大小可在称为磁盘参数块（BPB）中获取。簇的概念仅适用于数据区。 
(2)数据结构
格式化好的硬盘，整个磁盘按所记录数据的作用不同可分为五部分：主引导记录（MBR:Main Boot Record），操作系统引导记录（OBR:OS Boot Record），文件分配表（FAT:File Assign Table），根目录（DIR:Directory）和数据区（DATA）。前5个重要信息在磁盘的外磁道上，原因是外圈周长总大于内圈周长，也即外圈存储密度要小些，可靠性高些。其中只有主引导扇区是唯一的，其它的随你的分区数的增加而增加。 
1.主引导扇区
主引导扇区位于整个硬盘的0磁道0柱面1扇区，包括硬盘主引导记录MBR（Main Boot Record）和分区表DPT（Disk Partition Table）。其中主引导记录的作用就是检查分区表是否正确以及确定哪个分区为引导分区，并在程序结束时把该分区的启动程序（也就是操作系统引导扇区）调入内存加以执行。至于分区表，很多人都知道，以80H或00H为开始标志，以55AAH为结束标志，共64字节，位于本扇区的最末端。值得一提的是，MBR是由分区程序（例如DOS 的Fdisk.exe）产生的，不同的操作系统可能这个扇区是不尽相同。如果你有这个意向也可以自己去编写一个，只要它能完成前述的任务即可，这也是为什么能实现多系统启动的原因（说句题外话:正因为这个主引导记录容易编写，所以才出现了很多的引导区病毒）。
2.操作系统引导扇区
OBR（OS Boot Record）即操作系统引导扇区，通常位于硬盘的0磁道1柱面1扇区（这是对于DOS来说的，对于那些以多重引导方式启动的系统则位于相应的主分区/扩展分区的第一个扇区），是操作系统可直接访问的第一个扇区，它也包括一个引导程序和一个被称为BPB（BIOS Parameter Block）的本分区参数记录表。其实每个逻辑分区都有一个OBR，其参数视分区的大小、操作系统的类别而有所不同。引导程序的主要任务是判断本分区根目录前两个文件是否为操作系统的引导文件（例如MSDOS或者起源于MSDOS的Win9x/Me的IO.SYS和MSDOS.SYS）。如是，就把第一个文件读入内存，并把控制权交予该文件。BPB参数块记录着本分区的起始扇区、结束扇区、文件存储格式、硬盘介质描述符、根目录大小、FAT个数、分配单元（Allocation Unit，以前也称之为簇）的大小等重要参数。OBR由高级格式化程序产生（例如DOS 的Format）。
3.文件分配表
FAT(File Allocation Table)即文件分配表，是DOS/Win9x系统的文件寻址系统，为了数据安全起见，FAT一般做两个，第二FAT为第一FAT的备份, FAT区紧接在OBR之后，其大小由本分区的大小及文件分配单元的大小决定。关于FAT的格式历来有很多选择，Microsoft 的DOS及Windows采用我们所熟悉的FAT12、FAT16和FAT32格式，但除此以外并非没有其它格式的FAT，像Windows NT、OS/2、UNIX/Linux、Novell等都有自己的文件管理方式。
4.根目录区
DIR是Directory即根目录区的简写，DIR紧接在第二FAT表之后，只有FAT还不能定位文件在磁盘中的位置，FAT还必须和DIR配合才能准确定位文件的位置。文件目录是文件组织结构的又一重要组成部分。文件目录分为两类：根目录，子目录。根目录有一个，子目录可以有多个。子目录下还可以有子目录，从而形成“树状”的文件目录结构。子目录其实是一种特殊的文件，文件系统为目录项分配32字节。目录项分为三类：文件，子目录（其内容是许多目录项），卷标（只能在根目录，只有一个。目录项中有文件（或子目录，或卷标）的名字，扩展名，属性，生成或最后修改日期，时间，开始簇号，及文件大小。定位文件位置时，操作系统根据DIR中的起始单元，结合FAT表就可以知道文件在磁盘的具体位置及大小了。在DIR区之后，才是真正意义上的数据存储区，即DATA区。
5.数据区
DATA虽然占据了硬盘的绝大部分空间，但没有了前面的各部分，它对于我们来说，也只能是一些枯燥的二进制代码，没有任何意义。在这里有一点要说明的是，我们通常所说的格式化程序（指高级格式化，例如DOS下的Format程序），并没有把DATA区的数据清除，只是重写了FAT表而已，至于分区硬盘，也只是修改了MBR和OBR，绝大部分的DATA区的数据并没有被改变，这也是许多硬盘数据能够得以修复的原因。但即便如此，如MBR/OBR/FAT/DIR之一被破坏的话，也足够咱们那些所谓的DIY老鸟们忙乎半天了……需要提醒大家的是，如果你经常整理磁盘，那么你的数据区的数据可能是连续的，这样即使MBR/FAT/DIR全部坏了，我们也可以使用磁盘编辑软件（比如DOS下的DiskEdit），只要找到一个文件的起始保存位置，那么这个文件就有可能被恢复（当然了，这需要一个前提，那就是你没有覆盖这个文件……）。
硬盘分区方式
我们平时说到的分区概念，不外乎三种:主分区、扩展分区和逻辑分区。
1.主分区
主分区是一个比较单纯的分区，通常位于硬盘的最前面一块区域中，构成逻辑C磁盘。在主分区中，不允许再建立其它逻辑磁盘。
2.扩展分区、逻辑分区
扩展分区的概念则比较复杂，也是造成分区和逻辑磁盘混淆的主要原因。由于硬盘仅仅为分区表保留了64个字节的存储空间，而每个分区的参数占据16个字节，故主引导扇区中总计可以存储4个分区的数据。操作系统只允许存储4个分区的数据，如果说逻辑磁盘就是分区，则系统最多只允许4个逻辑磁盘。对于具体的应用， 4个逻辑磁盘往往不能满足实际需求。为了建立更多的逻辑磁盘供操作系统使用，系统引入了扩展分区的概念。
所谓扩展分区，严格地讲它不是一个实际意义的分区，它仅仅是一个指向下一个分区的指针，这种指针结构将形成一个单向链表。这样在主引导扇区中除了主分区外，仅需要存储一个被称为扩展分区的分区数据，通过这个扩展分区的数据可以找到下一个分区（实际上也就是下一个逻辑磁盘）的起始位置，以此起始位置类推可以找到所有的分区。无论系统中建立多少个逻辑磁盘，在主引导扇区中通过一个扩展分区的参数就可以逐个找到每一个逻辑磁盘。
需要特别注意的是，由于主分区之后的各个分区是通过一种单向链表的结构来实现链接的，因此，若单向链表发生问题，将导致逻辑磁盘的丢失。
数据存储原理
1.文件的读取
操作系统从目录区中读取文件信息（包括文件名、后缀名、文件大小、修改日期和文件在数据区保存的第一个簇的簇号），我们这里假设第一个簇号是0023。
操作系统从0023簇读取相应的数据，然后再找到FAT的0023单元，如果内容是文件结束标志（FF），则表示文件结束，否则内容保存数据的下一个簇的簇号，这样重复下去直到遇到文件结束标志。
2.文件的写入
当我们要保存文件时，操作系统首先在DIR区中找到空区写入文件名、大小和创建时间等相应信息，然后在Data区找到闲置空间将文件保存，并将Data区的第一个簇写入DIR区，其余的动作和上边的读取动作差不多。
3.文件的删除
看了前面的文件的读取和写入，你可能没有往下边继续看的信心了，不过放心，Win9x的文件删除工作却是很简单的，简单到只在目录区做了一点小改动――将目录区的文件的第一个字符改成了E5就表示将改文件删除了。