整理自《鸟哥的Linux私房菜》,整理者:华科小涛http://www.cnblogs.com/hust-ghtao/
我们在上一篇中说到:分区表只有记录4组数据的空间,那么是怎么做到一个磁盘分成4个以上分区的?是通过扩展分区来处理的。
1.扩展分区与逻辑分区
扩展分区的想法是:既然第一个扇区所在的分区表只能记录4条数据,那么就利用额外的扇区来记录更多的分区信息。实际上如图所示:
在此例中,硬盘的4个分区记录只用到2个,P1为主分区,P2为扩展分区。请注意:扩展分区的目的是使用额外的扇区来记录分区信息,扩展分区本身不能被拿来格式化。然后我们可以通过扩展分区所指向的那个区块继续作分区的记录。
图中扩展分区继续分出5个分区,这5个分区就被称为逻辑分区。同时注意一下,由于逻辑分区是由扩展分区继续切出来的分区,所以它们使用的范围就是扩展分区的范围。上述分区在Linux中的设备文件名分别如下:
- P1:/dev/hda1
- P2:/dev/hda2
- L1:/dev/hda5
- L2:/dev/hda6
- L3:/dev/hda7
- L4:/dev/hda8
- L5:/dev/hda9
而/dev/hda3和/dev/hda4保留给主分区或扩展分区,所以逻辑分区的设备号从5开始。
关于主分区、扩展分区和逻辑分区的特性:
- 主分区与扩展分区最多可以有4个(硬盘的限制)。
- 扩展分区最多只能有一个(操作系统的限制)。
- 逻辑分区是由扩展分区继续分割出来的分区。
- 能够被格式化后作为数据访问的分区为主分区与逻辑分区。扩展分区无法格式化。
- 逻辑分区的数量依操作系统而不同,在Linux中,IDE硬盘最多有59个逻辑分区(5-63),SATA硬盘则有11个逻辑分区(5-15)。
2.开机流程与主引导分区
我们知道操作系统要运行在计算机上,我们的计算机是如何认识这个操作系统并且执行它的。开机时我们的计算机还没有任何软件系统,那么它要如何读取硬盘内的操作系统文件?这就要涉及到开机程序了!
这里就要不得不提一个概念BIOS,它是一个写入到主板上的韧体(韧体就是写入到硬件上的一个软件程序)。这个BIOS就是开机的时候计算机执行的第一个程序了。简单地说,整个开机流程到操作系统之前的流程:
(1)BIOS:开机主动执行的韧体,会认识第一个可开机的设备。
(2)MBR:第一个可开机设备的第一个扇区内的主引导分区块,内含引导加载程序。
(3)引导加载程序(Boot loader):一个可读取内核文件来执行的软件。
(5)内核文件:开始操作系统的功能。
其中Boot loader是操作系统安装到MBR的一套软件。由于MBR仅有446B,所以这个引导加载程序是小巧而完美的:
- 提供菜单:用户可以选择不同的开机选项,这也是多重引导的重要功能。
- 载入内核文件:直接指向可开机的程序区段来开始操作系统。
- 转交其他loader:将引导加载功能转交给其他loader负责。
我们看第三点,这说明引导加载程序不但可以安装到MBR还可以安装在每个分区的引导扇区(boot sector)。这个特色造就了“多重引导”功能。
我们举个例子如下图:
假设计算机只有一个硬盘,分成4个分区,其中第1、2分区分别安装了Windows和Linux,要如何在开机时候选择Windows和Linux呢?假设MBR内装的是可同时识别Windows/Linux的引导加载程序,则流程就如上图所示。由图中我们可以看到,MBR的引导加载程序提供两个菜单,菜单一(M1)可以直接加载Windows的内核文件来开机;菜单二(M2)将引导加载工作交给第二个分区的启动扇区。当用户选择M2时,那么整个引导加载工作就会交个第二分区的引导加载程序了。
我们将上图做个总结:
- 每个分区都有自己的启动扇区(boot sector)。
- 图中的系统分区为第一和第二分区。
- 实际可开机的内核文件是放置到各分区的。
- loader只会认识自己分区内的可开机内核文件,以及其他loader而已。
- loader可直接指向或者是间接将管理权交给另一个管理程序。