分类: 服务器与存储
2011-12-21 11:25:48
硬盘结构
硬盘结构
硬盘有很多盘片组成,每个盘片的每个面都有一个读写磁头。如果有N个盘片。就有2N个面,对应2N个磁头(Heads),从0、1、2开始编号。每个盘片的半径均为固定值R的同心圆再逻辑上形成了一个以电机主轴为轴的柱面(Cylinders),从外至里编号为0、1、2……。每个盘片上的每个磁道又被划分为几十个扇区(Sector),通常的容量是512byte,并按照一定规则编号为1、2、3……形成Cylinders×Heads×Sector个扇区。
主引导扇区
主引导扇区位于整个硬盘的0柱面0磁头1扇区{(柱面,磁头,扇区)|(0,0,1)},bios在执行自己固有的程序以后就会jump到MBR中的第一条指令。将系统的控制权交由mbr来执行。主引导扇区主要由三部分组成:主引导记录 MBR(Master Boot Record或者Main Boot Record)、硬盘分区表 DPT(Disk Partition Table)和结束标志字三大部分组成。
对于硬盘而言,一个扇区可能的字节数为128×2n (n=0,1,2,3)。大多情况下,取n=2,即一个扇区(sector)的大小为512字节。在总共512byte的主引导记录中,MBR的引导程序占了其中的前446个字节(偏移0H~偏移1BDH),随后的64个字节(偏移1BEH~偏移1FDH)为DPT(Disk PartitionTable,硬盘分区表),最后的两个字节“55 AA”(偏移1FEH~偏移1FFH)是分区有效结束标志。
主引导记录MBR(master boot record)
主引导记录中包含了硬盘的一系列参数和一段引导程序。其中的硬盘引导程序的主要作用是检查分区表是否正确并且在系统硬件完成自检以后引导具有激活标志的分区上的操作系统,并将控制权交给启动程序。MBR是由分区程序(如Fdisk)所产生的,它不依赖任何操作系统,而且硬盘引导程序也是可以改变的,从而能够实现多系统引导。
硬盘分区表DPT(Disk Partition Table)
硬盘分区表占据MBR扇区的64个字节(偏移01BEH--偏移01FDH),可以对四个分区的信息进行描述,其中每个分区的信息占据16个字节。具体每个字节的定义可以参见硬盘分区结构信息。
结束标志字
结束标志字55,AA(偏移1FEH- 偏移1FFH)是MBR扇区的最后两个字节,是检验主引导记录是否有效的标志。
电脑启动过程
for short:
BIOS -> 硬盘MBR -> 活动分区DBR -> 操作系统
主引导扇区与硬盘分区
从主引导扇区的结构可以知道,它仅仅包含一个64个字节的硬盘分区表。由于每个分区信息需要16个字节,所以对于采用MBR型分区结构的硬盘(其磁盘卷标类型为MS-DOS),最多只能识别4个主要分区。所以对于一个采用此种分区结构的硬盘来说,想要得到4个以上的主要分区是不可能的。这里就需要引出扩展分区了。
扩展分区也是Primary partition的一种,但它与主分区的不同在于可以划分为无数个逻辑分区。
扩展分区中逻辑驱动器的引导记录是链式的。
每一个逻辑分区都有一个和MBR的分区表结构类似的扩展引导记录(EBR),其分区表的第一项指向该逻辑分区本身的引导扇区,第二项指向下一个逻辑驱动器的EBR。对于Windows系统而言,一般都是只划分一个主分区给系统,剩余的部分全部划为扩展分区。
扩展分区
简化模型:
<------------------------DISK------------------------------------>
|Boot |基本| 基本扩展分区 |
|Sector|分区| 扩展分区表1 |逻辑盘1 | 扩展分区表2 |逻辑盘2 |
| | |分区项1|分区项2 | | 分区项1|分区项2| |
------------------------------------------------------------------
<- 扩展分区1 -> <- 扩展分区2 ->
首先,主分区表中某一项为基本扩展分区表项,所有扩展分区隶属于
它,即所有扩展分区的空间均被该项所声明的空间包含。该分区表项
中的分区类型为0x05或0x0f。0x05为扩展分区类型,0x0f为Win95扩展
分区类型。
其次,除基本扩展分区外,其余扩展分区以链表形式级联存放,后一个
扩展分区的数据项记录存放于前一个扩展分区的分区表中。
最后,每一个扩展分区表只包含两个分区表项,第一个描述了自身的分
区情况,另一个描述了后续的扩展分区或者为空。
逻辑分区理论上可有无限个,但实际上因为有如下的分区数量总数的限制:
· SCSI 最多 15个;
· IDE 最多 63 个;
这取决于:
1) Linux下只有 /dev/hda, /dev/hda1, …, /dev/hda63等64个可能的设备文件;
2) Linux下只有 /dev/sda, /dev/sda1, …, /dev/sda15等16个可能的设备文件;
因此,实际上逻辑分区的数量上限是:
· SCSI有#4~#15共11个逻辑分区;
· IDE有#4~#63共59个逻辑分区;