Linux 系统开机加电后发生了什么?( 四 )


每个主分区的16个字节,由6个部分组成:

  • 第1个字节:如果为0x80,就表示该主分区是激活分区,控制权要转交给这个分区 。四个主分区里面只能有一个是激活的 。
  • 第2-4个字节:主分区第一个扇区的物理位置(柱面、磁头、扇区号等等) 。
  • 第5个字节:主分区类型 。
  • 第6-8个字节:主分区最后一个扇区的物理位置 。
  • 第9-12字节:该主分区第一个扇区的逻辑地址 。
  • 第13-16字节:主分区的扇区总数 。
最后的四个字节(”主分区的扇区总数”),决定了这个主分区的长度 。也就是说,一个主分区的扇区总数最多不超过2的32次方 。
如果每个扇区为512个字节,就意味着单个分区最大不超过2TB 。再考虑到扇区的逻辑地址也是32位,所以单个硬盘可利用的空间最大也不超过2TB 。
如果想使用更大的硬盘,只有2个方法:
  • 一是提高每个扇区的字节数,
  • 二是增加扇区总数 。
MBR:第一个可开机设备的第一个扇区内的主引导分区块,内包含引导加载程序
引导加载程序(Boot loader): 一支可读取内核文件来执行的软件
内核文件:开始操作系统的功能
引导操作系统的过程由硬盘启动时,BIOS通常是转向第一块硬盘的第一个扇区,即主引导记录(MBR) 。装载GRUB和操作系统的过程,包括以下几个操作步骤:
装载记录
基本引导装载程序所做的唯一的事情就是装载第二引导装载程序 。
装载Grub
这第二引导装载程序实际上是引出更高级的功能,以允许用户装载一个特定的操作系统 。
装载系统
如linux内核 。GRUB把机器的控制权移交给操作系统 。
不同的是,微软操作系统都是使用一种称为链式装载的引导方法来启动的,主引导记录仅仅是简单地指向操作系统所在分区的第一个扇区 。
加载主引导加载程序-基本装载程序众所周知,硬盘上第0磁道第一个扇区被称为MBR,也就是Master Boot Record,即主引导记录,它的大小是512字节,别看地方不大,可里面却存放了预启动信息、分区表信息 。
按照BIOS所设定的系统启动流程,如果检测通过,则根据引导次序(Boot Sequence)开始在第一台设备上支持启动程序,我们的启动设备主要包括硬盘、USB、SD等,我们一般用的是硬盘,然后进行读取第一个设备就是硬盘,第一个要读去的就是该硬盘的主引导记录MBR(Master Boot Record),然后系统可以根据启动区安装的引导加载程序(Boot Loader)开始执行核心识别的工作 。
MBR程序只是找到只是硬盘分区内最前面的446个字节的Boot Loader,然后查找相关配置和定义 。
然后将控制权交给主引导代码 。主引导代码的任务包括
  • 扫描分区表,找到一个激活(可引导)分区;
  • 找到激活分区的起始扇区;
  • 将激活分区的引导扇区装载到内存7C00处;
  • 将控制权交给引导扇区代码;
加载次引导记载程序–高级装载程序bootload如GRUB系统读取内存中的grub配置信息(一般为menu.lst或grub.lst),并依照此配置信息来启动不同的操作系统 。
这时,计算机的控制权就要转交给硬盘的某个分区了,这里又分成三种情况 。
情况A:卷引导记录
上一节提到,四个主分区里面,只有一个是激活的 。计算机会读取激活分区的第一个扇区,叫做“卷引导记录”(Volume boot record,缩写为VBR) 。“卷引导记录”的主要作用是,告诉计算机,操作系统在这个分区里的位置 。然后,计算机就会加载操作系统了 。
情况B:扩展分区和逻辑分区
随着硬盘越来越大,四个主分区已经不够了,需要更多的分区 。但是,分区表只有四项,因此规定有且仅有一个区可以被定义成“扩展分区”(Extended partition) 。所谓“扩展分区”,就是指这个区里面又分成多个区 。这种分区里面的分区,就叫做”逻辑分区”(logical partition) 。
计算机先读取扩展分区的第一个扇区,叫做“扩展引导记录”(Extended boot record,缩写为EBR) 。它里面也包含一张64字节的分区表,但是最多只有两项(也就是两个逻辑分区) 。
计算机接着读取第二个逻辑分区的第一个扇区,再从里面的分区表中找到第三个逻辑分区的位置,以此类推,直到某个逻辑分区的分区表只包含它自身为止(即只有一个分区项) 。因此,扩展分区可以包含无数个逻辑分区 。


推荐阅读