当前位置:操作系统 > Unix/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

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,