当前位置导航:炫浪网>>网络学院>>操作系统>>Linux教程

关于LiLo--原理篇


  1一般的开机引导过程
  在PC机上,最初的启动由BIOS完成。当开机自检结束时(Power-On Self Test,POST),BIOS尝试读入软盘的第一个扇区,把它看作引导扇区。若没有软盘,则尝试读入硬盘的第一个扇区。新的BIOS可以改变这种次序,先从硬盘启动。甚至从光盘启动。由于大多数BIOS不提供SCSI支持,若要从SCSI磁盘启动,SCSI适配器要提供他自己的BIOS.如果什么都找不到,老的BIOS会启动内置的ROM BASIC,或直接打印"NO ROM-BASIC".
  
  操作系统的启动分几步完成。由于引导扇区比较小,通常它主要任务是读入第二个loader,第二个loader再读入第三个loader,直到整个操作系统被完全读入。
  
    DOS 引导区:
  OFFSET
  0x000  JMP xx     Near jump into the program code
  0x003  Disk parameters
  0x03E  Program code loading the DOS kernel
  0x1FE  0xAA55     Magic number for BIOS
  可见,引导区的结构相对比较简单。它的长度总是512字节。以上,磁盘参数只对DOS有意义。重要的是引导区从0开始,以BIOS的magic number 结束。
  
  从软盘启动比较简单,因为只有一个引导扇区:第一个扇区。硬盘则困难一些,它被分成很多分区。但是,BIOS根本不管分区信息,它象对待软盘一样对待硬盘,仍读入第一个分区,叫作:master boot record.(MBR).
  
  所以MBR也应该和上面介绍的结构一样:从0开始,以BIOS的magic number 结束在MBR的最后部分,有分区表。如下图:
  
  OFFSET Length
  0x000  0x1BE code loading and starting the boot sector of the active
         partitian
  0x1BE  0x010  partition1
  0x1CE  0x010  partition2
  0x1DE  0x010  partition3
  0x1EE  0x010  partition4
  0x1FE  0x0012 0xAA55   Disk parameters
  
  每个分区信息占16字节,结构如下:
     1 BOOT Boot flag: 0=not active ,0x80 active
     1 HD  Begin:head number
     2 SEC CYL Begin:sector and cylinder number of boot sector
     1 SYS System Code:0x83 linux , 0x82 linux swap etc.
     1 HD  End:head number
     2 SEC CYL End: sector and cylinder number of boot sector
     4 low byte high byte    Relative sector number of start sector
     4 low byte high byte    Number of sectors in the partition
  所以硬盘可以有4个分区。这四个分区叫做主分区:primary prititions.假如它们不够用,可以设置所谓的扩展分区。  扩展分区包含至少一个逻辑分区。扩展分区的第一个扇区结构类似MBR,它的分区表的第一表项对应第一个逻辑分区。如果存在第二个逻辑分区,那么分区表的第二个表项就包含了一个指针。这个指针指向第一个逻辑分区后面的一个地址。这个地址包含一个分区表。该分区表的第一表项对应第二个逻辑分区。这样就组成一个链表,从而扩展分区可以有任意多的逻辑分区。
  
  每一个主分区和扩展区都包含一个引导扇区。系统只能从这几个地方之一启动。
  BOOT标志决定哪个区被引导。
  
  原来,只有主分区,因此,MS-DOS的fdisk和大多数同类工具只能激活主分区..
  MBR的代码要作以下的操作:
    1:确定活动分区。
    2:使用BIOS,将活跃分区的启动扇区读入。
    3:跳到启动扇区的0位置。
    MBR的空间足够完成这些工作。如上所述,每个分区理论上包含一个引导扇区,而且,存在的第二个硬盘也包含和第一个类似的结构。MBR完全可以容纳一个复杂的引导程序。即所谓的boot manager,动态的决定活动分区。Linux 为我们提供了lilo
  
  2 LILO:the linux loader
   LILO引导扇区包括一个分区表的空间,所以,LILO即可以安装在MBR中,也可以安装在某个分区的引导扇区。LILO拥有DOS引导扇区的所有功能,而且,它还可以引导逻辑扇区和第二硬盘分区。LILO还可以和另外的引导者合作(例如:NT loader),这样,用户就可以有很多选择。
  (注:以下几个标题,为防止引起歧义,用原文)
  2.1 LILO started by MS-DOS MBR
  如果系统至少有一个linux主分区,(非交换区,且在第一硬盘上),那么LILO就可以安装在这些分区中的一个。当 LILO对应分区被激活后,引导过程如下:
    BIOS 读入 MBR
  MBR 读入 活跃主分区:LILO所在的分区。
  LILO 引导Linux或另外的操作系统。
  要引导其它OS且不用LILO很简单,激活那个分区。Linux分区没有任何变化,非常安全。
  
  2.2 LILO started by a boot manager
  假如用户不想删除老的boot manager,或者某个OS LILO不能引导,可以考虑该途径。
  1. 假如boot manager可以引导扩展区,那儿是LILO的好去处。
  2. 假如 boot manager 可以引导第二硬盘分区,linux可以装在第二硬盘上。
  3 有些 boot manager 甚至可以引导逻辑分区,那LILO就可以装在逻辑分区上。
  当然,也要注意以下情况:
  1 某些操作系统直接改写MBR,这会将原来的boot manager破坏。
  2 重新分区会破坏扩展分区的引导扇区,这是LILO可能要重装。
    当安装新的系统时,是否要重新安装(linux)依靠新的boot manager,要么LILO引导扇区被注销,要么boot manager 为它提供一个引导项。重新分区或分区格式化会将LILO和linux全部删除。
  
  2.3 LILO占据MBR
  假如整个linux系统都在第二硬盘上,且第一硬盘没有扩展分区,那么,LILO只有装在MBR上。这样,会将老的MBR冲去,所以,在安装LILO前,要将老的MBR(包括分区表)做一个备份。DOS下有很多工具可以完成这个任务。在linux下,这样备份:
  
       # dd if=/dev/hda of=/backup/MBR bs=512 count=1
  
  写会使用命令:
    # dd if=/backup/MBR of=/dev/hda bs=446 count=1
  这样,原来的MBR就被写会但不包括分区表。如果分区表也要恢复,那么bs=512.注意,这样,新的分区表会被破坏!
  
  2.4 LILO 文件
    与LILO有关的文件通常放在/boot/下,配置文件lilo.conf在/etc/下。包含实际引导系统信息的映射文件有/sbin/lilo安装。对于任何LILO安装,配置文件应该被定置以适合个人需要。
  The configuration file:配置文件
    基本上,配置文件是一些变量赋值。每一行包含一个标志变量或一个变量赋值.配置文件被特殊的变量赋值分成几个区,每个区引导一个linux或其它OS.
    下面解释常见的行:
  
  boot = device
  说明那一个设备或哪一个分区包含引导扇区。假如没有给boot赋值,取当前缺省值。
  
  compact
  激活一种模式,在此模式下,LILO一次向BIOS请求读入相邻的几个分区。这极大的缩短了装载时间,特别是从软盘启动。
  delay=tenths
  以10秒为单位,规定LILO在引导第一个引导配置前应等待用户的时间。若没有定义,则直接引导。
  
  Linear
  使LILO生成线性地址,而不使用通常的Sector/Head/Cylinder机制。Linux地址机制可以不依赖磁盘的物理结构。
  
  install = boot sector
    使用指定的boot sector写入引导扇区,缺省用/boot/boot.b
  
  disktab=disktab
    使用指定的disktab,缺省使用/boot/disktab.disktab保存了硬盘物理结构信息。
  
  map=map file
  说明映射文件的路径。
  
  message=file 指
  定一个文件,该文件的内容将会在LILO引导是被显示。假如没有说明该文件,那么就只会出现"LILO"。
  
  verbose=level
    说明LILO的调试级别。从0(不显示任何信息)到5(所有的状态信息)。
  
  backup = backup file
    以前引导扇区内容的备份文件。缺省使用/boot/boot.device number
  
  force-backup=backup file
  和backup 相同,当时假如备份文件存在,被覆盖。
  
  prompt
    指定要用户通过键盘选择要引导的内核。不会缺省选择。
  
  timeout=tenths
  设置一个超时值,在此时间内必须有键盘输入,否则用第一个配置。类似,假如超时,就不能再输入密码。一般情况下,该取缺省值,无穷大。
    注:delay 与 timeout的区别(joe 认为),delay 是"LILO"出现后用户必须有输入的最长时间。timeout 是用户在按了任意键后,系统等待选择,用户 两次击键的最大间隔时间。
  
  serial=port,  bps parity bits
    设置串口参数。如果LILO会从该文件获取串口参数的话。如果其中之一无效,那所有三个参数都无效。Port从四个标准串口选择一个:0对应COM1 或者 /dev/ttyS0.。支持的波特率范围为:100-9600。所有校验设置都支持(n:none,e:even,o:odd) bits为7或者8。缺省为serial=0,2400n8.
  
  Ignore-table
    让LILO忽略被破坏的分区表。
  
  fix-table
    允许LILO将每个分区的(sector/head/cylinder)地址转化为线性地址。通常,分区地址从cylinder boudary开始。某些操作系统,会改变这一点。由于LILO只能将它的启动扇区写于两种地址都一致的分区上,不正确的3D地址可以用fix-table 来纠正。但是,这种纠正不能被保证是永远的,所以重分区以保证对齐cylinder boudary 是最好的选择。
  
  password=password
    为引导配置设置
相关内容
赞助商链接