LILO是一个在Linux环境编写的Boot Loader程序(所以安装和配置它都要在Linux下)。它的主要功能就是引导Linux操作系统的启动。但是它不仅可以引导Linux,它还可以引导其他操作系统,如DOS,WINDOWS等等。它不但可以作为Linux分区的引导扇区内的启动程序,还可以放入MRB中完全控制Boot Loadr的全过程。下面让我们看看几种典型情况下硬盘的主引导扇区和各个分区的引导扇区内程序的内容。
(1)计算机上只装了DOS一个操作系统
这种情况和刚才介绍的DOS硬盘启动相对应,如图13.6所示。
图13.6 只有DOS的硬盘分区图
(2)计算机上装了DOS和Linux操作系统,Linux由LOADIN启动,如图13.7所示。
图13.7 用LOADLIN从DOS下启动
Linux在这种情况下,DOS的主引导区没有发生变化,分区的引导扇区也没有变化,只是在DOS的配置文件Autoexec.bat中加入了Loadin程序而已。
(3)LILO存放在Linux分区的引导扇区内,如图13.8所示。
图13.8 LILO存放在Linux分区的引导扇区内
在这种情况下,LILO存放在硬盘上的一个基本分区内。如果希望从Linux启动,必须把Linux分区设为活动分区。而如果你想使用Windows,你必须把Windows所在的分区激活,然后重新启动以进入Windows,也就是说,你没办法在启动的时候选择从哪个操作系统进入,这样的多重启动显得太麻烦。回想Windows下的多重启动,你只要在引导时输入一个F3键,便能自动进入DOS6.22,这才是我们所希望的方式。Windows能做到,LILO当然可以做到,它还能做得更好。(LILO不仅允许你选择从哪个系统引导,它还允许你给Linux的内核传递参数)请看下面这种模式,如图13.9所示:
图13.9 LILO在分区引导扇区内的多重引导
无论从哪个分区引导,你都可以选择地进入Linux或是DOS,不过从DOS分区启动时,
如果你不想进入Linux,你需要单步执行autoexec.bat以跳过LOADLIN。而从Linux分区启动时,你仅需要在启动时敲键盘输入操作系统的名字(这个名字可以由你在配置LILO时自己设定)便可以选择进入哪个操作系统。这张表完全是用于说明LILO安装位置的,其实你可能已经看出来了,既然无论从哪个分区都能进入所有的操作系统,那么,只要有一个活动分区就够了,从方便的角度来讲,从Linux分区启动是个不错的选择。
(4)LILO放在硬盘的主引导扇区里。
如图13.10所示。LILO如果在安装时选择作为MRB,它将负责Boot Loader的全过程,不过这样做有一定的风险,因为它将覆盖MBR,有可能使你原来的系统无法启动,所以你需要先备份主引导扇区。
图13.10 LILO放在主引导扇区里
LILO的功能实际上是由几个程序共同实现的,它们是:
Map
Installer: 这是LILO用于管理启动文件的程序。它可以将LILO启动时所需的文件放置到合适的位置(这些文件的位置由LILO本身决定)并且记录下这些位置,以便LILO访问。其实,当你运行/sbin/lilo这个程序时,Map installer就已经工作了,它将boot loader写入引导分区(原来的boot loader将被备份),创建记录文件—map file以映射内核的启动文件。每当你的内核发生变化时(比如说内核升级了),你必须运行/sbin/lilo来保证系统的正常运行。
boot loader:这就是由BIOS读入内存的那部分LILO的程序,它负责把Linux的内核或其他操作系统的引导分区读入内存。另外,Linux的Boot Loader还提供一个命令行接口,可以让用户选择从哪个操作系统启动和加入启动参数。
其他文件:这些文件主要包括用于存放Map installer记录的map文件(/boot/map)和存放LILO配置信息的配置文件(/etc/lilo.conf),这些文件都是LILO启动时必需的,它们一般存放在/boot目录下。
LILO在引导Linux的同时还可以向Linux的内核传送参数。前面我们提到了,LILO提供了一个命令行解释程序,当系统加载LILO,并在屏幕上显示了“LILO” 字样时,你可以按下Ctrl或者Shift键(不同版本的LILO可能有所不同,我的系统需要按下Tab键),这时会出现“LILO boot”字样,表明命令行解释程序已经被激活,可以从键盘输入了。如果你相应的系统引导提示符是“Linux”,“Dos”的话,你可以键入“Linux”启动Linux,或者键入“Dos”启动Windows。如果你选择启动Linux,此时你还可以在“Linux”后面加入一些参数,LILO可以把这些参数传递给内核。例如:
LILO boot: Linux 1 告诉内核按照单用户模式启动。
LILO boot: Linux ether=eth0,0x280,10 告诉内核你的第一块网卡的端口地址是0x280,中断号是10。
LILO提供许多种参数,如Debug,等等,具体这些参数和它们的作用,请你查阅LILO的文挡。此外,并不是所有的硬件都需要加参数才能支持的。如果你的硬件设备在编译内核时已经被支持了,那么完全没有必要加参数。事实上,只有那些比较特殊(也比较不常用)的设备,才需要在启动时设定参数值,明确它的端口地址和中断号,以节省大量的用于检测端口地址和中断号的启动时间。
象可以预设默认的启动选项一样,在/etc/lilo.conf中也可以预先定义启动时要输入的参数,这样就可以避免每次启动都要重复输入。让我们看一个具体的lilo.conf的例子, 例子的左边是Script的脚本程序,右面是对程序的解释。从这个例子可以看出,lilo.conf的编制思想,同DOS下的config.sys差不多。
# /etc/lilo.conf
# LILO configuration file
# gernerated by 'liloconfig'
#
# Start LILO global section /*LILO的通用配置块*/
append = "ether=eth0,0x280,10" /*请注意,这就是向内核传递的参数,我们把它写在这里,就可以免去每次在启动时输入的麻烦*/
boot =
/dev/hda2
/*LILO安装在硬盘1的二号分区的分区表上*/
delay = 50 /*给用户选择从哪个操作系统启动的等待时间*/
vga = normal /*显示器设置为标准VGA*/
# ramdisk = 0
/*未安装虚拟启动盘*/
# End LILO global section /*通用配置块结束*/
# Linux bootable partition config begins /*用于启动Linux的配置块*/
root = /dev/hda2 /*Linux的根文件系统安装在硬盘1的二号分区上*/
image = /vmlinuz /*选择根目录下的vmlinuz作为内核*/
lable = linux /*启动选择的标识符为 linux*/
image = /zimage-
label = Newkernel
read-only /*以只读方式安装,防止启动中的误操作*/
#Linux bootable partition config ends /*Linux配置块结束*/
#DOS bootable partition config begens
/*用于启动DOS的配置块*/
other = /dev/hda1 /*该操作系统的boot loader安装在硬盘1的一号分区的分区表内*/
label = dos /*启动选择的标识符为 dos*/
table = /dev/hda /*该操作系统的根目录在硬盘1的一号分区 上*/
# Dos bootab le partion config ends /*Dos 配置块结束*/