关于硬盘分区以及引导

关于硬盘分区以及引导 ------by vagrantx

分区表的结构:
硬盘的主分区信息(这只是分区信息的一部分,如果没有逻辑分区的话)是在硬盘的第一个sector上面,对于绝大多数硬盘,每一个sector有512个字节,从第一个字节到第446个字节,这一部分空间就是正常情况下MBR所在地,从第一项扇区的末字节向前数66个字节,除去最后两个字节,这一部分空间就事所谓的主分区表所在地,以每16个字节为一个表项,可以有四个表项,也就是说,一块硬盘最多只能分出四个主分区,这个时候,你就不可能再有多于四个的分区了。但是按照window的分区规则,我们可以把其中一个表项拿来记录这个分区作为扩展分区,然后在在扩展分区所指示的扩展分区开始扇区处建立逻辑分区信息,该信息也是记录在扇区的末尾处,一共两个表项,同上每个表项16个字节,第一个记录本逻辑分区的信息,第二个记录下一个逻辑分区的信息,然后在下一个逻辑分区的第一个扇区末尾处又有两个表的分区信息

.......

依此类推,直到你的最后一个逻辑分区。

扩展分区这种分区规则,并不是所有的操作系统都支持的。

主分区表由四个分区项构成, 每一项的结构如下:
BYTE State : 分区状态, 0 = 非启动分区, 0x80 = 启动分区(这占用一个字节空间)
BYTE StartHead : 分区起始磁头号
WORD StartSC : 分区起始扇区和柱面号, 底字节的低6位为扇区号,
高2位为柱面号的第 9,10 位, 高字节为柱面号的低 8 位
BYTE Type : 分区类型, 如 0x0B = FAT32, 0x83 = Linux 等,
00 表示此项未用
BYTE EndHead : 分区结束磁头号
WORD EndSC : 分区结束扇区和柱面号, 定义同前
DWORD Relative : 在线性寻址方式下的分区相对扇区地址
(对于基本分区即为绝对地址)
DWORD Sectors : 分区大小 (总扇区数)


第一个sector最后的两个标志“55 AA”是分区表的结束标志,如果这两个标志被修改,则系统引导时将报告找不到有效的分区表。



在标准MBR的情况下, 系统启动过程主要由一下几步组成(以硬盘启动为例):

1. 开机 :-)
2. BIOS 加电自检 ( Power On Self Test -- POST )
内存地址为 0ffff:0000
3. 将硬盘第一个扇区 (0头0道1扇区, 也就是Boot Sector)
读入内存地址 0000:7c00 处.
4. 检查 (WORD) 0000:7dfe (也就是第一个扇区的最后两个字节)是否等于 0xaa55, 若不等于
则转去尝试其他启动介质, 如果没有其他启动介质则显示
"No ROM BASIC" 然后死机.
5. 跳转到 0000:7c00 处执行 MBR 中的程序.
6. MBR 首先将自己复制到 0000:0600 处, 然后继续执行.
7. 在主分区表中搜索标志为活动的分区. 如果发现没有活动
分区或有不止一个活动分区, 则停止.
8. 将活动分区的第一个扇区读入内存地址 0000:7c00 处.
9. 检查 (WORD) 0000:7dfe 是否等于 0xaa55, 若不等于则
显示 "Missing Operating System" 然后停止, 或尝试
软盘启动.
10. 跳转到 0000:7c00 处继续执行特定系统的启动程序.
11. 启动系统 ...

以上步骤中 2,3,4,5 步是由 BIOS 的引导程序完成. 6,7,8,9,10
步由MBR中的引导程序完成.


如果还成了其它的引导管理器如lilo,MBR也就是lilo的主体程序了,在上面的第七步的时候lilo就将自己的配置文件读进来,显示一个供给用户的选择菜单,然后根据用户的选择,决定跳转到哪个分区的第一个扇区(1,在这个时候还需不需要再次利用分区表来定位,我认为不是必须的,因为这个东西是灵活的,你可以把它作为你的配置文件中的内容,至于lilo是不是这样实现的我不是很清楚,哪位研究过lilo的朋友可以在这里给大家介绍介绍;2,在这个时候lilo把用户所选择的启动分区相对应的表项的第一个字节改为了80H,以前的激活表项第一个字节改为0,其实我个人认为,如果要实现一个引导管理器而言,这个也不一定是必须的,我认为可以这样的原因就是前面一个理由,但是标准MBR是绝对不允许有两个以上表项的第一个字节都是80H的,我所见过的引导管理器也都没有让两个表项同时显示激活,我想这个或许是遵循标准或者是与操作系统或是杀毒软件兼容的原因吧)
对于这个问题,某个具体的引导管理器如何操作的,可以用磁盘编辑器看一看,最终目的只有一个,就是让操作系统的内核加载到内存中间。然后的事情就归操作系统开发人员决定了

你可能感兴趣的:(Linux基础)