文章并没有完全一对一翻译,主要是意译,有时会省略原文内容,有时会增加自己理解。
摘要
概述
- 配置多位置启动和备份启动选项
- 安装和配置一种启动管理器,如GRUB,GRUB2,或者是LILO
- 在启动时增加内核启动参数或者运行加载器命令
- 从常见的启动问题中恢复
- 使用GRUB启动GRUB2
本文讨论了PC的启动流程和用于Linux系统的三种主要的启动加载器(GRUB,GRUB2,LILO),以此来帮助读者为LPI101的目标102.2做准备。这个要求的权重是2。
启动流程概述
在我们详解一个具体的启动加载器之前,先来看看PC是怎样开始启动的。一种被称为BIOS的代码存储在向ROM,EEPROM,或者flash这样的非易失内存中。当PC开机或者重启时,这段代码被执行。通常他执行加电自检。最后,它加载启动硬盘的MBR中的可执行代码。
关于MBR的知识,文章IBM的LPI复习资料之LPI101-Topic102:Linux安装和包管理(1)硬盘分区已经进行详细说明,MBR不仅有可执行代码还有分区表。不仅仅是硬盘,就算是软盘的MBR里也都存放着一段可执行代码,即使这段代码的功能仅仅是打印像“Non-bootable disk in drive A"这样的消息。这段代码通常被叫做"first stage boot loader"或者"stage 1 boot loader"。
MS DOS,PC DOS,以及Windows系统使用的MBR的功能是:检查MBR中的分区表,找到带有启动标志的分区,然后加载这个分区的第一个扇区(称为分区启动记录),并把控制权交给这个扇区的代码。由于空间还是局限于一个扇区(512字节),所以这段代码的功能还是很有限,但是能加载本分区里的更多内容(这些内容就是stage 2 boot loader)。对于MS-DOS,PC-DOS来说,这个stage 2 boot loader的作用就是直接加载操作系统内核。就这样,操作系统就启动了。
这对于只有一个系统的机器来说没有什么问题。但是如果需要同时安装多个操作系统,比如既有OS/2,WindowsXP,又有多个Linux发行版,该怎么办?你可以使用一些像fdisk之类的工具修改MBR分区表中的活动分区标记,把要启动的OS所在的分区设置为可启动。但这并不能完全解决问题。比如标准的MBR最多只能由4个主分区,并且只能有一个活动分区,并且不能从逻辑分区启动。而我们一共有5个操作系统需要共存,这就不能通过修改MBR中的分区表来解决了。
解决上述问题的办法是使用一段特殊的代码,这段代码的功能是可以让用户选择启动哪个分区。这样的程序已经存在,如:
Loadin--这个程序运行在DOS中,所以必须先进入DOS才能运行
OS/2 Boot Loader--这个程序需要安装到一个单独的分区中,这个分区设置为活动分区,这样MBR就会加载这个程序。
更聪明的启动加载器--这个程序不需要单独占用一个分区,可以和操作系统共存同一个分区中,并且既可以通过MBR直接加载,也可以被分区引导记录加载。这样的程序有:
BootMagic, LILO, GRUB, GRUB2。
显然,只要你能够把系统的控制权交给一个体积大于512字节的程序,这个程序就不难去完成像启动逻辑分区,或者启动其他硬盘上的分区的任务。上面提到的程序都有这些功能。
链式加载
Linux的启动加载器
GRUB
grub的安装位置
GURB启动盘的制作
GRUB2
- 配置文件改名为grub.cfg,而且配置文件不能手动修改了,只能通过grub-mkconfig命令生成。
- 分区编号不再从0开始,而是从1开始,硬盘编号还是从0开始。
- Grub2除了支持传统的PC BIOS启动方式,还支持PC EFI,PC corboot, PowerPC, SPARC,MIPS lemote Yeeloogn。
- GRUB2能直接从LVM和RAID中读取文件。
- 镜像文件改变了,GRUB中的stage1,stage1.5,stage2不再存在。
- 'stage1', 对应GRUB2中的boot.img,作用完全相同
- _stage_1_5',Grub中的stage1.5的功能是识别文件系统,以加载存储在文件系统中的stage2。某种意义上,这与GRUB2中的core.img类似,但是core.img得功能更多更强大。
- 'stage2',GRUB2没有单独的stage2镜像文件,对应的是core.img会动态加载/boot/grub里的模块文件。
- ‘stage2_eltorito',在GRUB2中,为了能从CD启动,会把cdboot.img和core.img两个文件合并成一个。最好是使用grub-mkrescue命令来合并这两个文件。
- 'nbgrub',没有对应的。
- 'pxegrub',在GRUB2中,从PXE网络启动的镜像是通过合并pxeboot.img和core.img完成的。
- 对于boot.img,只能安装到MBR上,这与GRUB legacy不同。
- core.img有两个安装位置:
- 一个是MBR和第一个分区之间的空闲部分,这部分通常叫做boot track,MBR gap,或者embedding area。这部分通常至少会有31KB大小。这种方式的问题是,把代码存放到这里不安全,一些软件可能会修改这里的信息,另外也不能保证MBR和第一扇区之间一定有足够的空间。
- 一个是安装到一个分区的文件系统里,然后把它所占用的块表编号存储在这个分区的第一个扇区内。这种方式的问题是,core.img所占用的块可能会被文件系统移动(系统优化时这种情况经常发生)