📄 00000052.htm
字号:
<HTML><HEAD> <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人: fkbch (无灵子@笨愚斋), 信区: Linux <BR>标 题: [转载]关于LiLo--原理篇 (转载) <BR>发信站: BBS 水木清华站 (Thu Dec 30 17:08:46 1999) <BR> <BR> hehe, 看着挺乱的, 就给排了一下版. 感觉舒服多了. <BR>-------------------------------------------------------------- <BR>【 以下文字转载自 FreeBSD 讨论区 】 <BR>【 原文由 stable 所发表 】 <BR> 作者 joe (左右为难) 站内 Linux <BR> 标题 关于LiLo--原理篇 <BR> 时间 Wed Aug 25 15:18:42 1999 <BR>────────────────────────────────── <BR> <BR> 1一般的开机引导过程。 <BR>在PC机上,最初的启动由BIOS完成。当开机自检结束时(Power-On Self Test,POST), <BR>BIOS尝试读入软盘的第一个扇区,把它看作引导扇区。若没有软盘,则尝试读入硬盘 <BR>的第一个扇区。新的BIOS可以改变这种次序,先从硬盘启动。甚至从光盘启动。由于 <BR>大多数BIOS不提供SCSI支持,若要从SCSI磁盘启动,SCSI适配器要提供他自己的 <BR>BIOS.如果什么都找不到,老的BIOS会启动内置的ROM BASIC,或直接打印"NO <BR>ROM-BASIC". <BR> 操作系统的启动分几步完成。由于引导扇区比较小,通常它主要任务是读入第二 <BR>个loader,第二个loader再读入第三个loader,直到整个操作系统被完全读入。 <BR> <BR> DOS 引导区: <BR>OFFSET <BR>0x000 JMP xx Near jump into the program code <BR>0x003 Disk parameters <BR>0x03E Program code loading the DOS kernel <BR>0x1FE 0xAA55 Magic number for BIOS <BR> 可见,引导区的结构相对比较简单。它的长度总是512字节。以上,磁盘参数 <BR>只对DOS有意义。重要的是引导区从0开始,以BIOS的magic number 结束。 <BR> 从软盘启动比较简单,因为只有一个引导扇区:第一个扇区。硬盘则困难一些, <BR>它被分成很多分区。但是,BIOS根本不管分区信息,它象对待软盘一样对待硬盘, <BR>仍读入第一个分区,叫作:master boot record.(MBR). <BR> 所以MBR也应该和上面介绍的结构一样:从0开始,以BIOS的magic number 结束 <BR>在MBR的最后部分,有分区表。如下图: <BR> <BR>OFFSET Length <BR>0x000 0x1BE code loading and starting the boot sector of the active <BR> partitian <BR>0x1BE 0x010 partition1 <BR>0x1CE 0x010 partition2 <BR>0x1DE 0x010 partition3 <BR>0x1EE 0x010 partition4 <BR>0x1FE 0x0012 0xAA55 Disk parameters <BR> <BR>每个分区信息占16字节,结构如下: <BR> 1 BOOT Boot flag: 0=not active ,0x80 active <BR> 1 HD Begin:head number <BR> 2 SEC CYL Begin:sector and cylinder number of boot sector <BR> 1 SYS System Code:0x83 linux , 0x82 linux swap etc. <BR> 1 HD End:head number <BR> 2 SEC CYL End: sector and cylinder number of boot sector <BR> 4 low byte high byte Relative sector number of start sector <BR> 4 low byte high byte Number of sectors in the partition <BR> 所以硬盘可以有4个分区。这四个分区叫做主分区:primary prititions.假如它 <BR>们不够用,可以设置所谓的扩展分区。 扩展分区包含至少一个逻辑分区。扩展 <BR>分区的第一个扇区结构类似MBR,它的分区表的第一表项对应第一个逻辑分区。如果 <BR>存在第二个逻辑分区,那么分区表的第二个表项就包含了一个指针。这个指针指向 <BR>第一个逻辑分区后面的一个地址。这个地址包含一个分区表。该分区表的第一表项 <BR>对应第二个逻辑分区。这样就组成一个链表,从而扩展分区可以有任意多的逻辑分 <BR>区。 <BR> 每一个主分区和扩展区都包含一个引导扇区。系统只能从这几个地方之一启动。 <BR>BOOT标志决定哪个区被引导。 <BR> 原来,只有主分区,因此,MS-DOS的fdisk和大多数同类工具只能激活主分区.. <BR>MBR的代码要作以下的操作: <BR> 1:确定活动分区。 <BR> 2:使用BIOS,将活跃分区的启动扇区读入。 <BR> 3:跳到启动扇区的0位置。 <BR> MBR的空间足够完成这些工作。如上所述,每个分区理论上包含一个引导扇区, <BR>而且,存在的第二个硬盘也包含和第一个类似的结构。MBR完全可以容纳一个复杂 <BR>的引导程序。即所谓的boot manager,动态的决定活动分区。Linux 为我们提供了lilo <BR> <BR>2 LILO:the linux loader <BR> LILO引导扇区包括一个分区表的空间,所以,LILO即可以安装在MBR中,也可以安 <BR>装在某个分区的引导扇区。LILO拥有DOS引导扇区的所有功能,而且,它还可以引导 <BR>逻辑扇区和第二硬盘分区。LILO还可以和另外的引导者合作(例如:NT loader),这样, <BR>用户就可以有很多选择。 <BR>(注:以下几个标题,为防止引起歧义,用原文) <BR>2.1 LILO started by MS-DOS MBR <BR>如果系统至少有一个linux主分区,(非交换区,且在第一硬盘上),那么LILO就可 <BR>以安装在这些分区中的一个。当 LILO对应分区被激活后,引导过程如下: <BR> BIOS 读入 MBR <BR>MBR 读入 活跃主分区:LILO所在的分区。 <BR>LILO 引导Linux或另外的操作系统。 <BR>要引导其它OS且不用LILO很简单,激活那个分区。Linux分区没有任何变化,非常安全。 <BR> <BR>2.2 LILO started by a boot manager <BR>假如用户不想删除老的boot manager,或者某个OS LILO不能引导,可以考虑该途径。 <BR>1. 假如boot manager可以引导扩展区,那儿是LILO的好去处。 <BR>2. 假如 boot manager 可以引导第二硬盘分区,linux可以装在第二硬盘上。 <BR>3 有些 boot manager 甚至可以引导逻辑分区,那LILO就可以装在逻辑分区上。 <BR>当然,也要注意以下情况: <BR>1 某些操作系统直接改写MBR,这会将原来的boot manager破坏。 <BR>2 重新分区会破坏扩展分区的引导扇区,这是LILO可能要重装。 <BR> 当安装新的系统时,是否要重新安装(linux)依靠新的boot manager,要么LILO引 <BR>导扇区被注销,要么boot manager 为它提供一个引导项。重新分区或分区格式化会将 <BR>LILO和linux全部删除。 <BR> <BR>2.3 LILO占据MBR <BR>假如整个linux系统都在第二硬盘上,且第一硬盘没有扩展分区,那么,LILO只有装 <BR>在MBR上。这样,会将老的MBR冲去,所以,在安装LILO前,要将老的MBR(包括分区 <BR>表)做一个备份。DOS下有很多工具可以完成这个任务。在linux下,这样备份: <BR> <BR> # dd if=/dev/hda of=/backup/MBR bs=512 count=1 <BR> <BR>写会使用命令: <BR> # dd if=/backup/MBR of=/dev/hda bs=446 count=1 <BR>这样,原来的MBR就被写会但不包括分区表。如果分区表也要恢复,那么bs=512. <BR>注意,这样,新的分区表会被破坏! <BR> <BR>2.4 LILO 文件 <BR> 与LILO有关的文件通常放在/boot/下,配置文件lilo.conf在/etc/下。包含实际 <BR>引导系统信息的映射文件有/sbin/lilo安装。对于任何LILO安装,配置文件应该被定 <BR>置以适合个人需要。 <BR>The configuration file:配置文件 <BR> 基本上,配置文件是一些变量赋值。每一行包含一个标志变量或一个变量赋值. <BR>配置文件被特殊的变量赋值分成几个区,每个区引导一个linux或其它OS. <BR> 下面解释常见的行: <BR> <BR>boot = device <BR>说明那一个设备或哪一个分区包含引导扇区。假如没有给boot赋值,取当前缺省值。 <BR> <BR>compact <BR>激活一种模式,在此模式下,LILO一次向BIOS请求读入相邻的几个分区。这极大的 <BR>缩短了装载时间,特别是从软盘启动。 <BR> <BR>delay=tenths <BR>以10秒为单位,规定LILO在引导第一个引导配置前应等待用户的时间。若没有定义,则 <BR>直接引导。 <BR> <BR>Linear <BR>使LILO生成线性地址,而不使用通常的Sector/Head/Cylinder机制。Linux地址机制 <BR>可以不依赖磁盘的物理结构。 <BR> <BR>install = boot sector <BR> 使用指定的boot sector写入引导扇区,缺省用/boot/boot.b <BR> <BR>disktab=disktab <BR> 使用指定的disktab,缺省使用/boot/disktab.disktab保存了硬盘物理结构信息。 <BR> <BR>map=map file <BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -