| 订阅 | 在线投稿
分享
 
 
 

深入Linux的LILO

来源:互联网网民  宽屏版  评论
2006-12-17 09:48:04

深入Linux的LILO

深入Linux的LILO 深入Linux的LILO

作者: 江永忠

Linux的引导可以采用多种方式,其加载器LILO(Linux Loader)

是一个灵活的引导加载程序,与其他常用的引导加载程序相比,LILO

引导方式显得更具有艺术性,对其深入的理解,将有助于我们方便地

处理多重系统、网络引导、大硬盘及大内存等诸多棘手的问题。

一、LILO的引导机制

众所周知,计算机的最初启动是由BIOS控制的,在对一些硬件

(如:内存、键盘等)初始化之后,它会试图加载硬盘的主引导记录

(MBR)或软盘的引导扇区。

MBR可通过两种方式运行,其一是定位到活动分区并加载相应的

引导扇区,然后由引导扇区完成该分区内操作系统的基本组件的加载

;其二是直接从一指定分区中加载信息,并通过它装入任一分区的操

作系统,诸如LILO、OS/2 boot loader及Partition Magic等引导加载

程序都可以配置成这种方式。

软盘的引导扇区相当于硬盘活动分区的引导扇区,它通常用于装

入软盘上的操作系统。

由此可见,只要把LILO安装在MBR、活动分区或者引导软盘上,

就能接管计算机的控制权,然后由LILO完成后继的引导过程。LILO中

建有一个引导表地址编码,借此它的引导程序就能定位到Linux的内

核文件,这种地址编码既可以按照柱面/磁头/扇区(CHS)模式,又可

以采用LBA的线性块号模式,因此,即使对某些SCSI控制程序LILO也

能运转良好。

当LILO定位到配置文件后,经过预引导过程,就显示提示符:

LILO boot:

此时,系统允许选择引导不同的操作系统或者不同的内核配置,

按Tab键显示可选项列表,然后输入可选项或者直接回车选择缺省配

置,如果选择了引导Linux,还可以直接传递参数到系统内核。

和其他系统的引导加载程序相比,LILO具有更大的灵活性,其引

导方式也更丰富多彩。

●当LILO被安装在硬盘的MBR、活动分区或引导软盘上时,作为

原引导程序的替身,它能引导任一硬盘任一分区上的Linux和其他操

作系统;

●除了引导扇区,它没有任何隐含文件,也不需要使用特定的分

区,它的配置文件可以在任何分区、甚至是存放在与Linux毫不相干

的DOS分区的某个子目录下;

●它能引导几个不同的内核配置,甚至是几个不同的内核;

●它能引导同一机程序上的多个Linux版本;

●它能从网络上引导Linux。

LILO的灵活性使得其配置变得相当复杂,当有多个系统共存时,

建议先安装其他操作系统,最后再装Linux,这样,设置LILO对其他

系统的引导会相对简单一些。

二、几个重要的LILO引导参数

LILO的引导参数有很多,在此只对一些比较重要的参数作一介绍

1.“boot=”

此参数指明包含引导扇区的设备名(如:/dev/had),若此项忽

略,则从当前的根分区中读取引导扇区。

2.“root=”

此参数告诉内核启动时以哪个设备作为根文件系统使用,其设定

值为构造内核时根文件系统的设备名,可用的设备名有:

(1)/dev/hdaN~/dev/hddN:ST-506兼容硬盘,a到d上的N个分区

(2)/dev/sdaN~/dev/sdeN:SCSI兼容硬盘,a到e上的N个分区

(3)/dev/xdaN~/dev/xdbN:XT兼容硬盘,a到b上的N个分区

(4)/dev/fdN:软盘,A:(N=0)或B:(N=1)

(5)/dev/nfs:由网络取得根文件系统的标志

3.“nfsroot=”

若需通过NFS提供根文件系统来引导无盘工作站,此参数为内核

指定了网络根文件系统所在的机程序、目录及NFS,其格式为:nfsroot=

(〈server_ip〉:)〈root_dir〉(,nfs_options〉)

4.“nfsaddrs=”

设定网络通讯所需的各种网络界面地址,如无此参数,则内核会

试图用反向地址解析协定(RARP)或启动协定(BOOTP)找出这些参数,

其格式为:

nfsaddrs=〈客户端IP〉:〈服务端IP〉:〈网关IP〉:〈子网屏蔽〉:

〈客户端名称〉:〈网络设备名〉:〈auto〉

5.“image=”

指定Linux的内核文件。

6.“delay=”

设定引导第一个映像前的等待时间。

7.“disk=”

此参数为某一特殊的硬盘定义非标准参数。

8.“append=”

为内核传递一个可选的参数行,其典型的应用是为不能完全由系

统自动识别的硬盘指定参数,如:append = "hd=64,32,202"

9.“label=”

此参数为每个映像指定一个名字,以供引导时选择。

10.“read-only”

设定以只读方式挂入根文件系统,用于文件系统一致性检查(fsck)

11.“install=”

安装一个指定文件作为新的引导扇区,缺省为/boot/boot.b。

12.“loader=”

说明所使用的链加载程序(chain loader),缺省为/boot/chain.b,

如果不是从首硬盘或软盘启动,那么,此选项必须说明。

13.“table=”

说明包含分区表的设备名,如果此参数忽略,引导加载程序将不

能传递分区信息到已引导的操作系统。当此参数指向的分区表被修改

时,必须重新运行/sbin/lilo。

14.“init=”

内核初始化时执行的程序,通常过程为init、getty、rc和sh,

版本1.3.43以来的Linux内核能够执行/sbin/init说明的命令行,若

在引导过程中出现问题,则可设置init=/bin/sh直接跳到Shell。

15.“ramdisk_start=”

由于内核不能放在压缩的内存文件系统映像内,为使内核映像能

够和压缩的内存映像放在一张软盘内,加入“ramdisk_start=〈offset〉”,这样内核才?

开始执行。

16.“mem=”

此参数的目的之一是为Linux指定使用的内存数量:如mem=96MB,

目的之二是指定mem=nopentium告诉内核不要使用4MB分页表。

17.“vga=”

设置显示模式,如80×50、132×44等。

三、LILO典型配置方法

通常情况下,Linux的安装程序自身就可以完成LILO的安装配置,

从而较好地解决多重系统的引导问题,如果系统不能自动完成这种配

置,则可以通过手工修改配置文件/etc/lilo.conf来实现不同条件下

的引导。

1.当系统能自动完成配置时

对于这种情况只有一个建议:将LILO安装到Linux分区的根上,

而不是MBR这个多事地带。假设当前hda1中装有DOS/Windows,hda2中

安装了Linux,则/etc/lilo.conf的内容大致如下:

boot=/dev/hda2#指定引导位置compact delay=50#延时5秒root=current

#根在当前分区image=/boot/vmlinuz#指定linux的内核文件label=linux

#用linux为代表名称other=/dev/hda1#其他操作系统所在的分区table=/dev/hda

#指定包含分区表的硬盘label=dos#用dos为代表名称

2.当系统无法自动完成配置时

系统无法自动完成配置的情况不外乎两种:

(1)BIOS不能直接看到Linux的根分区;

(2)BIOS只能读写标准IDE硬盘的前504MB。

这时,必须遵循一个最基本的原则:建立一个BIOS能存取的较小

的Linux分区,其中包含内核文件、映射文件及链加载程序等必要内

容,而根则可以是另外一个独立的分区。至于配置上的其他细节,我

们通过以下实例来进行说明。

例1:主硬盘为IDE接口,第二硬盘为SCSI接口,根文件在SCSI

上。

对策:在IDE硬盘上划分一个较小的Linux分区(/dev/hda2),

其中包含基本文件,挂接到/u2下,其配置文件/etc/lilo.conf的主

要内容为:

boot=/dev/hda#lilo装在主ide的mbr

install=/u2/etc/lilo/boot.b#从boot.b安装lilo引导记录

map=/u2/etc/lilo/map#安装程序建立此映射文件,告诉引导载入程序内核块的位置

compact

timeout=50

image=/u2/vmlinuz #内核文件应事先拷贝到/u2下

label=linux

root=/dev/sda1#告诉内核根系统在scsi硬盘上read-only

other=/dev/hda1

loader=/u2/etc/lilo/chain.b #指明加载程序label=dos

例2:一个标准的IDE大硬盘需安装Linux和DOS/Windows。

对于大硬盘问题,很多人只知道低于1024个柱面的限制,而不知

为什么标准的IDE硬盘只能认前504MB。

其实,BIOS的int13调用是采用三个位元组的CHS编码,10位为柱

面号,8位为磁头号,6位为扇区号。可能的柱面号码是0~1023,可

能的磁头号码是0~255,而磁道上可能的扇区号码是1~63,以这24

位最多可以定址8455716864个位元组(7.875GB)。

但不幸的是,标准的IDE介面容许256个扇区/磁道、65536个柱

面及16个磁头。它自己本身可以存取237= 137438953472(128 GB),

但是加上BIOS方面63个扇区与1024个柱面的限制后只剩528482304(504

MB)可以定址得到。

对策:在硬盘的前500MB中划分350MB(/dev/hda1)给DOS,150MB(/dev/hda2)给Linux,

谙嘤Φ呐渲梦募杏λ得饔才痰牟问?

boot=/dev/hda

... ...

disk=/dev/hda

bios=0x80

sectors=63

heads=16

cylinders=2100

image=/vmlinuz

append="hd=2100,16,23"

root=/dev/hda2

label=linux

四、LILO的卸载

当LILO覆盖了引导扇区时,它会保留一个引导扇区的备份在/boot/boot.xxyy中,其中

xyy是16进制的设备主/次号码

(major/minor numbers),利用命令“ls -l /dev/device”就可

获得硬盘或分区的主/次号码。如果这些备份文件已经存在,那么,当你重新安装LILO或?

构内核时,它将不再生成此文件,这就保证了此备份文件是最原始的引导扇区。

若要卸载LILO,你只需恢复初始的引导扇区就可以了。例如:LILO

安装在/dev/had,对应的备份文件为/boot/boot.0300,简单地使用

下面的命令即可:

dd if=/boot/boot.0300 of=/dev/had bs=446 count=1

当然,若想完全卸掉Linux,必须用Linux的fdisk对Linux分区进

行破坏,因为DOS的fdisk无法移去非DOS分区。

关于LILO值得探讨的问题还有很多,但只要懂得了其内部机制,

对更复杂的实际情况也能较圆满地解决。

 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
深入Linux的LILO 深入Linux的LILO 深入Linux的LILO 作者: 江永忠    Linux的引导可以采用多种方式,其加载器LILO(Linux Loader) 是一个灵活的引导加载程序,与其他常用的引导加载程序相比,LILO 引导方式显得更具有艺术性,对其深入的理解,将有助于我们方便地 处理多重系统、网络引导、大硬盘及大内存等诸多棘手的问题。   一、LILO的引导机制   众所周知,计算机的最初启动是由BIOS控制的,在对一些硬件 (如:内存、键盘等)初始化之后,它会试图加载硬盘的主引导记录 (MBR)或软盘的引导扇区。   MBR可通过两种方式运行,其一是定位到活动分区并加载相应的 引导扇区,然后由引导扇区完成该分区内操作系统的基本组件的加载 ;其二是直接从一指定分区中加载信息,并通过它装入任一分区的操 作系统,诸如LILO、OS/2 boot loader及Partition Magic等引导加载 程序都可以配置成这种方式。   软盘的引导扇区相当于硬盘活动分区的引导扇区,它通常用于装 入软盘上的操作系统。   由此可见,只要把LILO安装在MBR、活动分区或者引导软盘上, 就能接管计算机的控制权,然后由LILO完成后继的引导过程。LILO中 建有一个引导表地址编码,借此它的引导程序就能定位到Linux的内 核文件,这种地址编码既可以按照柱面/磁头/扇区(CHS)模式,又可 以采用LBA的线性块号模式,因此,即使对某些SCSI控制程序LILO也 能运转良好。   当LILO定位到配置文件后,经过预引导过程,就显示提示符:   LILO boot:   此时,系统允许选择引导不同的操作系统或者不同的内核配置, 按Tab键显示可选项列表,然后输入可选项或者直接回车选择缺省配 置,如果选择了引导Linux,还可以直接传递参数到系统内核。   和其他系统的引导加载程序相比,LILO具有更大的灵活性,其引 导方式也更丰富多彩。   ●当LILO被安装在硬盘的MBR、活动分区或引导软盘上时,作为 原引导程序的替身,它能引导任一硬盘任一分区上的Linux和其他操 作系统;   ●除了引导扇区,它没有任何隐含文件,也不需要使用特定的分 区,它的配置文件可以在任何分区、甚至是存放在与Linux毫不相干 的DOS分区的某个子目录下;   ●它能引导几个不同的内核配置,甚至是几个不同的内核;   ●它能引导同一机程序上的多个Linux版本;   ●它能从网络上引导Linux。   LILO的灵活性使得其配置变得相当复杂,当有多个系统共存时, 建议先安装其他操作系统,最后再装Linux,这样,设置LILO对其他 系统的引导会相对简单一些。      二、几个重要的LILO引导参数   LILO的引导参数有很多,在此只对一些比较重要的参数作一介绍 。   1.“boot=”   此参数指明包含引导扇区的设备名(如:/dev/had),若此项忽 略,则从当前的根分区中读取引导扇区。   2.“root=”   此参数告诉内核启动时以哪个设备作为根文件系统使用,其设定 值为构造内核时根文件系统的设备名,可用的设备名有:   (1)/dev/hdaN~/dev/hddN:ST-506兼容硬盘,a到d上的N个分区   (2)/dev/sdaN~/dev/sdeN:SCSI兼容硬盘,a到e上的N个分区   (3)/dev/xdaN~/dev/xdbN:XT兼容硬盘,a到b上的N个分区   (4)/dev/fdN:软盘,A:(N=0)或B:(N=1)   (5)/dev/nfs:由网络取得根文件系统的标志   3.“nfsroot=”   若需通过NFS提供根文件系统来引导无盘工作站,此参数为内核 指定了网络根文件系统所在的机程序、目录及NFS,其格式为:nfsroot= (〈server_ip〉:)〈root_dir〉(,nfs_options〉)   4.“nfsaddrs=”   设定网络通讯所需的各种网络界面地址,如无此参数,则内核会 试图用反向地址解析协定(RARP)或启动协定(BOOTP)找出这些参数, 其格式为:   nfsaddrs=〈客户端IP〉:〈服务端IP〉:〈网关IP〉:〈子网屏蔽〉: 〈客户端名称〉:〈网络设备名 〉:〈auto〉   5.“image=”   指定Linux的内核文件。   6.“delay=”   设定引导第一个映像前的等待时间。   7.“disk=”   此参数为某一特殊的硬盘定义非标准参数。   8.“append=”   为内核传递一个可选的参数行,其典型的应用是为不能完全由系 统自动识别的硬盘指定参数,如:append = "hd=64,32,202"   9.“label=”   此参数为每个映像指定一个名字,以供引导时选择。   10.“read-only”   设定以只读方式挂入根文件系统,用于文件系统一致性检查(fsck) 。   11.“install=”   安装一个指定文件作为新的引导扇区,缺省为/boot/boot.b。   12.“loader=”   说明所使用的链加载程序(chain loader),缺省为/boot/chain.b, 如果不是从首硬盘或软盘启动,那么,此选项必须说明。   13.“table=”   说明包含分区表的设备名,如果此参数忽略,引导加载程序将不 能传递分区信息到已引导的操作系统。当此参数指向的分区表被修改 时,必须重新运行/sbin/lilo。   14.“init=”   内核初始化时执行的程序,通常过程为init、getty、rc和sh, 版本1.3.43以来的Linux内核能够执行/sbin/init说明的命令行,若 在引导过程中出现问题,则可设置init=/bin/sh直接跳到Shell。   15.“ramdisk_start=”   由于内核不能放在压缩的内存文件系统映像内,为使内核映像能 够和压缩的内存映像放在一张软盘内,加入“ramdisk_start=〈offset〉”,这样内核才? 开始执行。   16.“mem=”   此参数的目的之一是为Linux指定使用的内存数量:如mem=96MB, 目的之二是指定mem=nopentium告诉内核不要使用4MB分页表。   17.“vga=”   设置显示模式,如80×50、132×44等。      三、LILO典型配置方法   通常情况下,Linux的安装程序自身就可以完成LILO的安装配置, 从而较好地解决多重系统的引导问题,如果系统不能自动完成这种配 置,则可以通过手工修改配置文件/etc/lilo.conf来实现不同条件下 的引导。   1.当系统能自动完成配置时   对于这种情况只有一个建议:将LILO安装到Linux分区的根上, 而不是MBR这个多事地带。假设当前hda1中装有DOS/Windows,hda2中 安装了Linux,则/etc/lilo.conf的内容大致如下:   boot=/dev/hda2#指定引导位置compact delay=50#延时5秒root=current #根在当前分区image=/boot/vmlinuz#指定linux的内核文件  label=linux #用linux为代表名称 other=/dev/hda1#其他操作系统所在的分区table=/dev/hda #指定包含分区表的硬盘label=dos#用dos为代表名称   2.当系统无法自动完成配置时   系统无法自动完成配置的情况不外乎两种:   (1)BIOS不能直接看到Linux的根分区;   (2)BIOS只能读写标准IDE硬盘的前504MB。   这时,必须遵循一个最基本的原则:建立一个BIOS能存取的较小 的Linux分区,其中包含内核文件、映射文件及链加载程序等必要内 容,而根则可以是另外一个独立的分区。至于配置上的其他细节,我 们通过以下实例来进行说明。   例1:主硬盘为IDE接口,第二硬盘为SCSI接口,根文件在SCSI 上。   对策:在IDE硬盘上划分一个较小的Linux分区(/dev/hda2), 其中包含基本文件,挂接到/u2下,其配置文件/etc/lilo.conf的主 要内容为:   boot=/dev/hda#lilo装在主ide的mbr install=/u2/etc/lilo/boot.b#从boot.b安装lilo引导记录 map=/u2/etc/lilo/map#安装程序建立此映射文件,告诉引导载入程序内核块的位置 compact timeout=50 image=/u2/vmlinuz #内核文件应事先拷贝到/u2下 label=linux root=/dev/sda1#告诉内核根系统在scsi硬盘上read-only other=/dev/hda1 loader=/u2/etc/lilo/chain.b #指明加载程序label=dos   例2:一个标准的IDE大硬盘需安装Linux和DOS/Windows。   对于大硬盘问题,很多人只知道低于1024个柱面的限制,而不知 为什么标准的IDE硬盘只能认前504MB。   其实,BIOS的int13调用是采用三个位元组的CHS编码,10位为柱 面号,8位为磁头号,6位为扇区号。可能的柱面号码是0~1023,可 能的磁头号码是0~255,而磁道上可能的扇区号码是1~63,以这24 位最多可以定址8455716864个位元组(7.875GB)。   但不幸的是,标准的IDE介面容许256个扇区/磁道、65536个柱 面及16个磁头。它自己本身可以存取237= 137438953472(128 GB), 但是加上BIOS方面63个扇区与1024个柱面的限制后只剩528482304(504 MB)可以定址得到。   对策:在硬盘的前500MB中划分350MB(/dev/hda1)给DOS,150MB(/dev/hda2)给Linux, 谙嘤Φ呐渲梦募杏λ得饔才痰牟问?   boot=/dev/hda   ... ...   disk=/dev/hda   bios=0x80   sectors=63   heads=16   cylinders=2100   image=/vmlinuz   append="hd=2100,16,23"   root=/dev/hda2   label=linux   四、LILO的卸载   当LILO覆盖了引导扇区时,它会保留一个引导扇区的备份在/boot/boot.xxyy中,其中 xyy是16进制的设备主/次号码 (major/minor numbers),利用命令“ls -l /dev/device”就可 获得硬盘或分区的主/次号码。如果这些备份文件已经存在,那么,当你重新安装LILO或? 构内核时,它将不再生成此文件,这就保证了此备份文件是最原始的引导扇区。   若要卸载LILO,你只需恢复初始的引导扇区就可以了。例如:LILO 安装在/dev/had,对应的备份文件为/boot/boot.0300,简单地使用 下面的命令即可:   dd if=/boot/boot.0300 of=/dev/had bs=446 count=1   当然,若想完全卸掉Linux,必须用Linux的fdisk对Linux分区进 行破坏,因为DOS的fdisk无法移去非DOS分区。   关于LILO值得探讨的问题还有很多,但只要懂得了其内部机制, 对更复杂的实际情况也能较圆满地解决。
󰈣󰈤
 
 
 
>>返回首页<<
 
 热帖排行
 
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
©2005- 王朝网络 版权所有