Linux 版 (精华区)

发信人: netiscpu (网中鸟~~flying), 信区: Linux
标  题: 深入Linux的LILO
发信站: 紫 丁 香 (Mon Nov  1 05:56:51 1999) WWW-POST

深入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=/vmlunuz 

  append="hd=2100,16,23" 

  root=/dev/hda2 

  label=linux 

  四、LILO的卸载 

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

中xxyy是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值得探讨的问题还有很多,但只要懂得了其内部机制,对更复杂的实际情况

也能较圆满地解决。 


--

                              Enjoy Linux!
                          -----It's FREE!-----

※ 修改:·netiscpu 於 Nov  1 05:56:51 修改本文·[FROM: ustsu54-nc2.ust] 
※ 来源:·紫 丁 香 bbs.hit.edu.cn·[FROM: ustsu54-nc2.ust] 
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.684毫秒