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/had #指定包括分区表的硬盘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/had#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/had … … Disk=/dev/had bios=0x80 sectors=63 heads=16 cylinders=2100 image=/vmlinuz append=hd=2100,16,23 root=/dev/hda2 label=linux |