深入解剖 LILO
发布时间:2006-10-14 8:55:06   收集提供:gaoqian
前面的文章我们讲述了 LILO 的配置,本文我们将深入底层来讲述LILO 的技术细节,也将告诉读者怎样
去掉LILO 以及重新安装LILO。
前文我们讲述了LILO 配置的灵活性,本文我们将讲述LILO 的内部技术细节以及启动时的主要操作及其功
能,以帮助我们调整LILO 的安装。LILO 最大的好处就是它独立于文件系统,可以启动各种操作系统:
从Microsoft、OS/2、SCO Unix、Unixware、PC-DOS到Linux等等。

LILO 能处理最多16个不同的映像,LILO 写入MBR 时就作为主引导程序,写入扩展分区的引导扇区时就是
第二引导程序。采用LILO,可以有多种组合方式启动系统。

我们先来看看引导过程,硬盘上的数据被准确的分配到对应的“磁道”和“扇区”,硬盘上的数据分布首
先是引导扇区,然后是文件分配表(FAT),接下来就是数据区。

硬盘分区时,被分为基本分区和扩展分区。基本分区可以作为引导分区,可以通过任何引导程序标记为可
引导。扩展分区可以分成好几个逻辑分区,很多的BIOS 不允许从逻辑分区启动。

Linux 最多支持4个基本分区,如果需要额外的分区,那么就要其中的一个基本分区变成扩展分区,然后在
扩展分区里面,划分逻辑分区。很重要的一点是有些逻辑分区的分区表不能被识别为设备的第一块。分区
表通常存放于分区的引导扇区,而且,通常只有整个盘的分区启动扇区用作引导扇区,称为主引导记录(MBR)。

LILO 可以用于以下情形:

1、第一硬盘的引导扇区。
2、软盘的引导扇区。
3、位于第一硬盘的Linux 文件系统分区上的引导扇区。

LILO 不能用于以下情形:

1、交换分区。
2、扩展分区中的逻辑分区的引导扇区。

所以,如果你在第二硬盘上安装了Linux ,而不能启动的话,可以采取在第一硬盘上建立 /boot 的办法来解决。

引导加载过程由很多程序组成,我们先来看看LILO 安装
时的各种不同程序:

MAP 安装程序:这个程序把LILO 的文件放到合适的位置
并记录这些信息(会在LILO 启动时用到),这个程序就是
/sbin/lilo ,每次配置文件有改动或者有新内核时,需要重新运行一遍。

/boot/*.*:其他LILO 启动时需要的文件存放在 /boot 目录下,map 文件是十分重要的,map 安装程序把新内
核的位置记录到这个文件。

引导加载程序:这个程序无需多言是最重要的部件了。它被
BIOS 调入内存,然后调用内核或者其他操作系统的引导扇区。

包含引导加载程序第一部分的引导扇区被调入内存,然后调用引导加载程序的第二部分,一般位于文件
 /boot/boot.b,接下来就启动内核。

如果从可引导软盘启动的话,BIOS 把软盘的第一个扇区调入内存,一般,这个扇区包含一段程序来启动对应的
操作系统。和软盘一样,如果LILO 写入MBR ,那么,MBR 就被调入内存,执行对应的操作,给用户提示选择需
要引导的操作系统。具体地说,MBR 的头 446 个字节由引导加载程序利用,剩余的64 字节是分区表信息。还剩
下的两个字节就是分区激活标志“55 AA” 了。

在软盘上备份 MBR 信息:

bash# dd if=/dev/hda of=/dev/fd0 bs=512 count=1 

恢复:(万一的情况下)

bash# dd if=/dev/fd0 of=/dev/hda bs=446 count=1 

删除 LILO:

c:> fdisk /mbr 

恢复 LILO:

重新安装 Windows 以后,就会把LILO 干掉。无论什么原因
我们都应该知道怎样恢复LILO。

最好手头有一张安装 CD ,这年头,干净并且确实好用的
软盘太少了。所以不推荐你使用软盘。当然,如果你认为
你的软盘质量可靠,那么可以从CD-ROM
上建立应急启动盘:

dd if=/cdrom/disks/rescue of=/dev/fd0

在 DOS 下面,采用:

rawrite image-name a:

也可以在 www.bootdisk.com上下载一个,按照说明制作一张启动磁盘。

如果从 CD 启动的话,各个不同的Linux 版本有不同的方法进入应急状态。Red Hat 启动后有一个应急模式,
SuSE 的话,需要先进入安装界面,然后按Ctrl+Alt+Fn 键找到shell 提示符,可以在这个提示符下来恢复。

下面介绍恢复步骤:

首先建立挂接点:
mkdir mount 

然后把丢失的 Linux 挂接到这里:
mount /dev/hda6 mount 

如果 /boot 位于另外的分区,
需要把他挂接到 mount/boot 目录下,例如:
mount /dev/hda1 mount/boot 

使用 chroot 命令,把 mount 作为根目录,cd /boot 
命令实际上进入的是 "mount/boot" 目录:

chroot mount 

运行 /sbin/lilo ,这样就把 LILO 安装回了 MBR,重新启动就会看到 LILO 提示符回来了。
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50