lilo是linux 的引导管理程序,它和OS/2、NT的BootManager,以及许多人用的system commander的作用类似,当你在这个提示符下按下Tab键的时候,它会显示出当前可以引导的系统:lilo:dos smplinux实际上,lilo就是一小段引导程序,可以位于任何有可能用来引导系统的位置,但是通常我们把它放在硬盘的主引导区,这个概念对任何与病毒打过交道的用户都应该是非常熟悉的。系统自检完毕之后,就会从硬盘上读入主引导区的内容,于是,lilo接管了系统的控制权,可以引导Linux了。理论上,许多书籍建议你用软盘引导服务器以便避免可能的破坏,这倒是那种“教科书的解决方案”的一个典型。你可以看到在上面显示出了多个系统名字,输入某一个名字引导相应的系统,lilo会自动选择对应的分区以及启动文件来启动系统。与lilo决斗是系统管理员生活的一部分,硬盘可能会损坏,病毒可能更改了引导记录,错误地编译内核使系统报销,甚至一些愚蠢的反病毒程序也可能会使得lilo被破坏,这时你也许必须从DOS上引导,然后重新配置lilo。如何从DOS下启动Linux等一会再说,现在让我们把主要精力拿来对付lilo。lilo的配置是靠编辑/etc/lilo.conf实现的,这个文件的规则很简单,举例来说,这是我的lilo文件:[wanghy@openlab /etc]$ cat lilo.confboot=/dev/hdainstall=/boot/boot.bprompttimeout=50default=smpimage=/boot/bzImagelabel=smpread-onlyappend="mem=256M"root=/dev/hda1image=/boot/vmlinuz-2.2.12-20label=linuxread-onlyroot=/dev/hda1 other = /dev/hda3label = dostable = /dev/hda首先是boot=/dev/hda,这表示你用的启动磁盘是第一个IDE硬盘(由于这个原因,通常你不能从从盘上启动Linux)。接下来,install=/boot/boot.b将/boot.b表示要将/boot/boot.b文件的内容写到引导记录中。这个文件在安装Linux的时候就已经创建了。prompttimeout=50default=smp这两行表示系统启动时将会显示一个lilo:提示信息并等待5秒钟,注意timeout的单位是0.1秒。如果5秒钟之内没有输入系统的名字,那么缺省将引导标号为"smp"的系统。接下来定义的是各个引导项目,首先定义了两个Linux引导项目,image=/root/bzImage这样的行定义了启动时使用的内核映像,接下来,label=smp定义了这个启动选择项的名字是smp。在下面的几行则是用bzImage启动系统时的一些附加参数:read-only使用只读方式连接文件系统,由于系统启动的时候要检测文件系统完整性,因此要使用这个选项,当系统启动后,启动脚本会自动将它切换为read-write模式。append="mem=256M"缺省下,Linux内核只使用64MB以下的内存空间,由于这个系统有256MB内存,必须用命令行直接通知内核,append后的内容就是启动时加给内核的命令行参数。必须注意,有时你需要把它写成mem=255M,原因是在许多系统上bios会占用部分存储空间,如果你没有把握,就从内存量中减去一。root=/dev/hda1当这个内核启动以后,用/dev/hda1文件系统作为本机文件系统的根。接下来的段落的效果与刚才我们解释的一样,刚才定义了一个名叫"smp"的启动项,它启动Linux并且连结/dev/hda1文件系统,而从image=/boot/vmlinuz-2.2.12-20开始的段落则定义一个名叫“Linux"的选项,它使用/boot/vmlinuz-2.2.12-20作为内核映像,挂接/dev/hda1文件系统,但是只使用缺省的64MB内存。再往下的段落other=/dev/hda3label=dostable=/dev/hda定义了一个名叫dos的启动项,这个启动项用来启动位于/dev/hda3上的MS-DOS分区。由于DOS不使用内核映像而是利用引导记录,系统必须能够找到分区表信息以便定位引导记录,table=/dev/hda表示系统的DOS类型的分区表在/dev/hda上。当完成了lilo.conf的设置工作后,执行/sbin/lilo会出现这样的信息:[openlab]# /sbin/liloAdded smp *Added linux Added dos*表示这个加入的项是缺省启动项。三行信息表示我们定义的三个启动项都已经被加入,以后再启动就可以使用新的启动定义了。lilo还支持很多其他的定义,但是对于系统管理员来说,上面解释的已经足够了,想要了解进一步的内容,执行man lilo.conf。前面提到了内核映像这个概念,Linux在编译内核时将内核做成压缩的二进制内存映像,启动中自动拷贝到内存中并解压,然后让核心代码接管系统。核心代码得到系统的控制权之后,下一步需要检测系统设备并激活必须的设备,在这个过程中,一串初始化信息在屏幕上滚过:Linux version 2.2.14 (root@openlab.asnc.edu.cn) (gcc version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)) #9 SMP Sat Jan 29 10:07:06 EST 2000Intel MultiProcessor Specification v1.1Virtual Wire compatibility mode.OEM ID: MSIProduct ID: 440BXAPIC at: 0xFEE00000Processor #0 Pentium(tm) Pro APIC version 17Processor #1 Pentium(tm) Pro APIC version 17I/O APIC #2 Version 17 at 0xFEC00000.Processors: 2mapped APIC to ffffe000 (fee00000)mapped IOAPIC to ffffd000 (fec00000)Detected 451033204 Hz processor.Console: colour VGA+ 80x25Calibrating delay loop... 448.92 BogoMIPSMemory: 257700k/262144k available (1044k kernel code, 424k reserved, 2920k data, 56k init)Dentry hash table entries: 32768 (order 6, 256k)Buffer cache hash table entries: 262144 (order 8, 1024k)Page cache hash table entries: 65536 (order 6, 256k)VFS: Diskquotas version dquot_6.4.0 initializedChecking 386/387 coupling... OK, FPU using exception 16 error reporting.Checking 'hlt' instruction... OK..............这个信息很长,几乎每个被初始化的设备都会显示一段讯息,从这里可以看出系统中那些设备已经开始工作,那些设备失败了。如果信息滚动过快,可以在启动完成之后用dmesg命令显示全部信息。当需要直接在内核映像中启动的设备(这些设备是在编译内核时确定的)初始化完毕后,Linux连结在lilo.conf的root=行中定义的根文件系统,启动init进程(应该记得它是一切程序的最初启动者),寻找/etc/inittab文件并且进入运行级的设置。