频 道 直 达 - 新闻 - 读书 - 培训 - 教程 - 前沿 - 组网 - 系统应用 - 安全 - 编程 - 存储 - 操作系统 - 数据库 - 服务器 - 专题 - 产品 - 案例库 - 技术圈 - 博客 - BBS
51CTO.COM_中国领先的IT技术网站
找资料:

Linux开机流程分析(2)

作者: 出处:台湾省Linux社区  (  ) 砖  (  ) 好  评论 ( ) 条  进入论坛
更新时间:2005-12-07 17:24
关 键 词:Linux
阅读提示:对Linux开机流程进行了分析。
Lilo
好了,要开始来搞定 boot loader 啰!第一个介绍的事较老牌的 lilo 这个玩意儿!他算是最标准的 Linux boot loader 啰!目前我的几部主机里面,用的也大部分都是他呢!Lilo 的设定与安装方面必需要分成两个步骤,分别是设定 /etc/lilo.conf 这个设定档,设定完毕之后,还必需要给他改写进去 MBR 或者是 Super block 才行!
· 设定档 /etc/lilo.conf
基本上, lilo 是加载 Linux 核心的重要开机资料的安装程序,他的参数设定档案就放在 /etc/lilo.conf 里头,那么我们来看一看里面有什么设定参数吧,基本上他的设定参数有点像底下这样,可以分为两部分,一个是整体的设定方面,一个则是每一个开机设定的核心档案:
[root @test linux]# vi /etc/lilo.conf # 第一部份,整体的设定部分 prompt<==强制出现 boot 的开机讯息啰! Compact  <==可以整合一些读取的扇区,可以保持 map 较小,相当适合软盘开机时使用 delay=50 <==如果有多重开机的话,可以设定这个延迟时间,单位0.1秒 timeout=50 <==与 delay 有类似的关系!也是 0.1 秒,如果 5 秒内没有按键盘,直接以第一个 image 开机。 default=linux-2.4.18 <==如果开机的过程中,出现了boot之后,使用者没有动作, 则以此设定的核心开机,与底下的label需对应 boot=/dev/had <==Lilo 的开机信息写入到 /dev/hda 这颗硬盘的 MBR 当中。 map=/boot/map <==用来说明 local 主机的地图信息啰! install=/boot/boot.b <==关于开机区的讯息(boot sector),不用理他没关系! Linear<==在较大容量的硬盘使用时,可以加入这一个参数试试看! lba32 <==这个东西也是在大容量的硬盘使用时候会需要的参数! password=1234567 <==设定密码!如果为了安全起见,可以设定您的 lilo 密码哩! message=/boot/message <==那个 LILO 的讯息就是在里面出现的啦! # 第二部分,个别的开机设定部分,一个 image 或 other 均代表一个开机设定! image=/boot/vmlinuz-2.4.7-10 <==核心档案啦! label=linux-2.4.7<==请注意!label 前面以 [tab] 按键来作为分隔! 这个字眼则是显示在 boot 里头挑选项目。 initrd=/boot/initrd-2.4.7-10.img read-only  <==开机扇区挂载为只读!这是预设状况,实际在 挂加载 Linux 系统时,会重新挂载成可写! root=/dev/hda1  <==挂载成 / 这个 root 目录的磁盘! other=/dev/hdb1 <==如果是『非 Linux 核心』就以 other 来设定 开机的磁盘扇区! label=Windows2k <==同样的要有 label 来表示这个开机扇区的名称!
·  
注意一下上面那几个咚咚:
o delay 与 timeout 的设定是 0.1 秒,所以 delay=50 表示延迟时间为 5 秒!
o linear 与 lba32 通常用在 SCSI 或者是较大的硬盘,例如扇区超过 1024 磁道的硬盘,可以使用这个项目来除错!不过,如果是小于 8GB 的硬盘,这两个东西有没有设定就没有什么影响了!
o default 需要设定成底下几个 image 或者是 other 的 label 才成!这个地方最常被忘记!因为常常会记得修改 label ,但是忘记跟着改变 default 的内容!此外,如果你想要修正开机预设的操作系统选项,在这里改啦!
o password 的用途在于安全防护方面,不过有个困扰,就是『如果你的计算机因为不正常关机(如断电后重开)而在电源恢复的时候重新开机时,则会卡在这个阶段无法直接进入 Linux 系统』,因为你必须提供 password 才能继续的工作呀!
o boot 显示的是开机的扇区选择! 这里也蛮重要的,如果你想要安装在 MBR 里面的话,如同上面的书写模式,就是写入 /dev/hda ,后面不要加上每个 partition 的代码!但是,如果你是想写入 Super Block ,例如我想要写入的是 had5 这个 Logical 的 partition 时,那么这里就必需要改写为 /dev/hda5 啰!所以,您应该只要一看到这个 boot 后面接的内容,就会知道那个安装的扇区是 MBR 还是 Super Block 啰!
o image 可以设定成多数个!如果你的 Linux 系统有多个核心档案的时候,例如我们刚刚编译完成的一个新的核心,然而你又不想丢掉旧核心,就可以设定成两个不同核心的开机系统啰!
大致上就是这样吧!其它不明了是什么东西的选项,可以使用 man lilo.conf 来看看里头的设定!因为还有很多开机时后需要加载的参数可以来设定一番呢!
· 以预设的 lilo.conf 新增一个开机档
好啦!为了测试一下您是否已经知道了 lilo.conf 的设定方式,所以我们来做个实验吧!请在您的『实验主机』上面,不要在提供服务的主机上面完呦!否则死掉了不要怪我没警告您…我们先试图安装在 super block 上面好了!以下面为例,黄色字体的部分是经过我的修改之后的结果,您的 /etc/lilo.conf 应该会长的跟我的差不多才是!
boot=/dev/hda1 map=/boot/map vga=normal default=linux keytable=/boot/us.klt prompt nowarn timeout=100 message=/boot/message menu-scheme=wb:bw:wb:bw image=/boot/vmlinuz label=linux root=/dev/hda1 initrd=/boot/initrd.img append="devfs=mount" read-only image=/boot/vmlinuz label=failsafe root=/dev/hda1 initrd=/boot/initrd.img append="devfs=nomount failsafe" read-only image=/boot/vmlinuz <==就给他新增加一个 label ,但是内容不变! label=linux-test root=/dev/hda1 initrd=/boot/initrd.img append="devfs=mount" read-only
·  
这样就设定好了!接着下来看一下怎么安装他吧!
·
· 安装 lilo
既然设定好了,自然就是要安装他啰!安装的方式很简单,直接输入 lilo 即可!
 
[root @test root]# lilo Added linux *  <==有打星号的是『预设的开机设定档!』 Added failsafe Added linux-test
·  
看到没有!要像上面这样才是安装成功呦!如果出现了错误的讯息,那么肯定是有地方没有安装好!这个时候请特别的再重新设定一次 /etc/lilo.conf 呢!有打星号的是『预设的开机设定档!』
· 而如果您还要看看更多的讯息,那么就需要这样:
 
[root @test root]# lilo -v LILO version 22.3.2, Copyright (C) 1992-1998 Werner Almesberger Development beyond version 21 Copyright (C) 1999-2002 John Coffman Released 11-Jul-2002 and compiled at 21:48:42 on Aug 13 2002. Reading boot sector from /dev/hda1 Using MENU secondary loader Calling map_insert_data Mapping message file /boot/message -> message-text Calling map_insert_file Boot image: /boot/vmlinuz -> vmlinuz-2.4.19-16mdk Mapping RAM disk /boot/initrd.img -> initrd-2.4.19-16mdk.img Added linux * Boot image: /boot/vmlinuz -> vmlinuz-2.4.19-16mdk Mapping RAM disk /boot/initrd.img -> initrd-2.4.19-16mdk.img Added failsafe Boot image: /boot/vmlinuz -> vmlinuz-2.4.19-16mdk Mapping RAM disk /boot/initrd.img -> initrd-2.4.19-16mdk.img Added linux-test /boot/boot.0301 exists - no backup copy made. Writing boot sector.
·  
如果你需要更多的讯息,那么就使用『 lilo –v –v –v 』多一点 –v 就对啦!
·
· 一些问题的解决之道
好了! lilo 安装完成之后,总是会有一些问题会发生吧!那么如何来解决问题呢?嗯!可以看一下底下的一些解决之道:
o 我要如何选择不同的开机设定档?开机的时候我只看的到 boot: 而已?
开机之后,如果是以 lilo 来激活 kernel 时,那么他会出现 boot: 的字样,出现这个字样之后,马上按下 按键,那么就会出现目前 lilo 所记忆的开机设定文件啰!然后在 boot 后面输入想要的开机档案,就可以啰!
o 安装好了 Linux 之后,在开机的过程中却只出现『 LI 』就停止了!该如何是好?
这个问题可能发生的原因是 Lilo 没有设定好,或者是由于 Linux 安装在非 /dev/hda ( MBR )的硬盘之中,解决的方法可以如下:
1. 用 Linux 光盘开机,然后在出现 boot: 处输入
linux root=/dev/hda1 (这个与你的 Linux 安装的 partition 有关)
顺利开机之后,以 vi 修改 /etc/lilo.conf 将
linear
这一行取消(如果没有这一行的话,那就在 lilo.conf 中加入吧!)然后执行
lilo
再取出光盘并重新开机试试看;
2. 进入 BIOS ,将硬盘的 mode 改成 LBA 试看看;
3. 将Linux往前面一点的扇区安装,例如你可能安装在 /etc/hdc1 ,那你可以重新安装 Linux 在 /dev/hda2 试看看
o 安装Linux完成之后,却是出现 010101... 等数字在屏幕上,无法进入 Linux ...
这个问题的发生很有可能是硬盘出了问题了!这个时候可以使用 fsck 来扫瞄啰!
1. 用软盘或者是光盘开机后,使用fsck这个硬盘修正软件扫瞄一下您的 root partition ,例如:fsck /dev/hda1
2. 进入 BIOS ,将硬盘的 mode 改成 LBA 试看看;
o 我们知道 DOS 需要在第一颗硬盘的第一个扇区才能正常开机使用!那要是他并非在第一个扇区呢?例如当 DOS 系统在 /dev/hdb1 (第一条排线的 slave )?
解决知道就是以 lilo 修正磁盘的配置啦!如下所示来修改 /etc/lilo.conf
other=/dev/hdb1
 label=DOS
 map_drive=0x80
 to=0x81
 map_drive=0x81
 to=0x80
然后再执行 lilo 写入 MBR 当中!
o 我不要玩 Linux 了,如何移除 lilo ?
只要以 Windows 的开机片开机,然后以 Windows 系统的 fdisk 下达:
fdisk /mbr
就可以将 Lilo 自 MBR 当中移除啰!
o 无法正常的进入 Lilo 怎么办?
这的时候开机片就很重要啦!使用开机片,在出现 boot: 的时候,输入
linux -s
就可以进入啦!这里请特别留意!那个 linux 指的是 label 呢!就像刚刚我们有三个 label ,分别是 linux, linux-test 与 failsafe ,那么如果我要以 linux-test 这个开机设定文件的单人维护模式登入,就必需要改写成
linux-test –s
linux-test single
请特别留意!!
Grub
grub 是较新的 boot loader 程序,他具有相当多的优点,这里不一一列举啦!无论如何, lilo 能做的, grub 几乎都可以做的到,包括选单、密码、指向等等的功能!不过, grub 比 lilo 要先进的几点是:
1. 他可以让您在开机的时候『自行编辑与修改开机设定项目』,有点像是 bash 的指令模式;
2. 他可以自动『动态寻找设定文件』,亦即他可以依据 /boot/grub/menu.lst 的设定而改变其设定!因此,修改设定只要改 /boot/grub/menu.lst 即可,不需要再重新安装 grub !
很棒吧!不过,在设定底下的工作之前,请先确认您的 grub 这个套件已经安装上来来!如果还没有安装的话,那么先查阅一下 RPM 的安装方法再说!底下假设 grub 这个套件已经安装在您的主机上啰!
· 设定档 /boot/grub/menu.lst
Grub 的设定档也很简单,就是 /boot/grub/menu.lst 这个档案,请注意,那个 lst 是 L 的小写呢!如果有兴趣的话,可以使用 info grub 好好的去看一下他的所有功能,底下仅列出一些我们常用的功能与设定而已喔!
o 关于硬盘的代号:
在 grub 里面,有一点是比较让人觉得不适应的,那就是他的硬盘代号与 lilo 还有 Linux 传统的代号不一样~他的代号主要有点像这样:
(hd0,0)
hd 指的是 IDE 的硬盘,而里面的 0,0 代表什么呢?第一个 0 代表他是第一个 IDE 的 master ,而第二个 0 代表他是第一块 partition 的代号,所以呢,这个代号就是 hda1 啦!所以,我们可以得到底下这个对应表:
装置 Lilo Grub
IDE1 master hda, hda1, hda2 (hd0), (hd0,0), (hd0,1)
IDE1 slave hdb, hdb1, hdb2 (hd1), (hd1,0), (hd1,1)
IDE2 master hdc, hdc1, hdc2 (hd2), (hd2,0), (hd2,1)
IDE2 slave hdd, hdd1, hdd2 (hd3), (hd3,0), (hd3,1)
这里需要先记忆一下啰!
·
好了,那么将我的 menu.lst 列出来一下吧先!
 
[root @test root]# vi /boot/grub/menu.lst timeout 10<==多久之后键盘没有动静,就直接以 default 的设定开机,这里是秒数! Color black/cyan yellow/cyan <==设定颜色的参数 i18n (hd0,0)/boot/grub/messages <==设定 i18n 多国语系的讯息提示 keytable (hd0,0)/boot/us.klt<==设定键盘形式,通常使用美规的键盘即可! Default 0<==预设的开机选项,依照底下的排序,第一个为 0 ! title linux <==这是第一个开机设定档,亦即排序为 0 号! kernel (hd0,0)/boot/vmlinuz root=/dev/hda1 devfs=mount initrd (hd0,0)/boot/initrd.img <==上面两个则是开机设定档的基本内容,分别是核心档案所在地与 Ramdisk 的设定内容! title failsafe  <==这是第二个开机设定档,亦即排序为 1 号! kernel (hd0,0)/boot/vmlinuz root=/dev/hda1 devfs=nomount failsafe initrd (hd0,0)/boot/initrd.img title windows chainloader (hd1,0) +1
·  
o default 与 title 的计算方式:
基本的说明已经在上表当中了,这里需要在说明的是关于 default 开机档的计算。如果今天我有四个开机设定档,那么 default 算的是什么呢?就是『排序』啦!假如我底下依序出现的设定档 title 分别是 linux, linux-test, windows, failsafe 的话,那么开机的时候, grub 的选单就会显示:
  linux
  linux-test
  windows
  failsafe
其中,linux 就是 0 ,而 failsafe 就是 3 ,如果您要调整开机时后的选单顺序,就在 /boot/grub/menu.lst 修改一下他们的顺序即可!但是记得 default 要跟着变,因为他也是依据排序而变的呦!这点请不要忘记了?
o title 内容的设定方式:
基本上,如果是一般的硬盘环境中,我们仅需要两行就可以设定好 title 的内容了,分别是:
root  [开机根目录 / 所在的磁盘代号] kernel [开机档案的所在地完整档名] [root=/dev/硬盘代号] 范例: root  (hd0,0) kernel /boot/vmlinuz-2.4.19-16mdk root=/dev/hda1 设定上面就是这样而已!所以,开机完毕之后,请将您的 kernel 文件名称(完整檔名)与开机的根目录所在的磁盘代号记忆一下,那么下次就可以手动设定开机设定项目呢!但如果是 windows 方面的设定时,那就直接使用 chainloader 这个项目即可,有点像这样: chainloader [硬盘代号] +1 范例: chainloader (hd1,0) +1
·安装 grub 在系统中
要安装 grub 跟 /boot/grub/menu.lst 并没有相关性!因为刚刚我们就提过了, grub 为动态去搜寻设定文件的,所以写入 MBR 或 super block 时,并没有将 menu.lst 写入ㄋㄟ?好了,那我们就来安装看看吧!安装的方式主要也是分为安装在 MBR 与 super block 呢!底下我们就来谈谈这两种安装的方式:基本上的动作就是:
1.使用 root [磁盘代号] 选择开机根目录 / 所在磁盘代号;
2.使用 setup [磁盘代号] 选择 MBR 或 Super block 直接安装进去!
3.使用 quit 就可以离开 grub 了!
[root @test root]# grub # 先安装在 Super Block 底下试看看: grub> root (hd0,0) <==这里输入我要的 root 硬盘扇区! Filesystem type is ext2fs, partition type 0x83 grub> setup (hd0,0) <==实际安装上来!使用 setup 指令! Checking if "/boot/grub/stage1" exists... yes Checking if "/boot/grub/stage2" exists... yes Checking if "/boot/grub/e2fs_stage1_5" exists... yes Running "embed /boot/grub/e2fs_stage1_5 (hd0,0)"... failed (this is not fatal) Running "embed /boot/grub/e2fs_stage1_5 (hd0,0)"... failed (this is not fatal) Running "install /boot/grub/stage1 (hd0,0) /boot/grub/stage2 p /boot/grub/menu .lst "... succeeded Done. # 再安装在 MBR 试看看: grub> root (hd0,0) Filesystem type is ext2fs, partition type 0x83 grub> setup (hd0) Checking if "/boot/grub/stage1" exists... yes Checking if "/boot/grub/stage2" exists... yes Checking if "/boot/grub/e2fs_stage1_5" exists... yes Running "embed /boot/grub/e2fs_stage1_5 (hd0)"... 17 sectors are embedded. succeeded Running "install /boot/grub/stage1 (hd0) (hd0)1+17 p (hd0,0)/boot/grub/stage2 /boot/grub/menu.lst"... succeeded Done. grub> quit <==离开 grub 啰!
这样就安装进去啰!很方便吧!并不难吧!
·开机手动设定选项
事实上,每次动手修改完 /boot/grub/menu.lst 就已经完成了 grub 的设定啰!因为他相当的聪明!但是,如果我设定错误怎么办?没关系!有很多的方法可以使用呢!如果您可以顺利的以硬盘进入 grub 画面,那么恭喜您,可以继续下面的行动了!但是如果您的 Linux 竟然无法顺利的开机了,也就是说,使用硬盘开不了机!那么也没有关系,别担心,就直接给他使用 CD 开机,然后在进入 grub 画面之后,再继续下面的动作!
o在 grub 画面下进行手动加入的动作:
在 grub 画面中,通常画面的最下方都会显示一些基本的讯息,例如下方的 Mandrake 预设文字接口 grub 登入图标:

在这个画面中,您可以输入 e 或 c 来选择『编辑』或『进入指令列模式』,无论如何,这两个选项将使您进入指令列模式当中啦!所以您就可以看到一个大大的 grub> 提示字符,然后就可以修改或者是自订一些项目啦!而这些修改或者设定的项目,并不会主动的去覆盖您的 /boot/grub/menu.lst ,而是这次登入所做的修改而已呢!通常我都是选择 e 进入编辑的画面,然后选择 kernel 与 root 那两项内容进行编辑即可!例如我们上面提过的,我的 root 与 kernel 已经知道了正确的讯息,所以我就可以按下 c 来输入底下的字样:
grub> root (hd0,0)
grub> kernel /boot/vmlinuz-2.4.19-16mdk root=/dev/hda1
这样就可以进入我们的主机了呢!很厉害吧!
--------------------------------------------------------------------------------
可开机磁盘与救援磁盘制作
不论任何时候,制作可以开机的磁盘与救援的磁盘,都是一件很值得鼓励的事情!这里我们提供简单的方式来让您的磁盘可以开机呦!
# 制作软盘开机片:
[root @test root]# mkbootdisk --device /dev/fd0 `uname -r`
Insert a disk in /dev/fd0. Any information on the disk will be lost.
Press to continue or ^C to abort:
# 制作救援磁盘:
[root @test root]# mkrescue --device /dev/fd0
不过, mkrescue 比较麻烦的一点是,这个程序仅支持 lilo 这个 loader 的 image file ,所以如果刚刚您是使用 grub 来设定 MBR 的话,那么 mkrescue 就无法动作了?

共2页: 上一页 [1] 2
【内容导航】
发表
查看
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 领 先 的 IT 技 术 网 站 ·
技 术 成 就 梦 想
·Windows XP远程桌面连接图解(.. (查看30702次)
·Windows Vista 初步 (查看20844次)
·Solaris基础知识入门 (查看19036次)
·Linux的安装 (查看16857次)
·Windows操作系统安装 (查看15831次)
订阅技术快讯
电子杂志下载
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。
名称:Vista精品应用黄皮书
简介:《Vista精品应用黄皮书》囊括了Vista的各方面内容。此次的精简版,是将里面的内容做了提取,便于用户下载和使用。内容包含了各种Vista的安装与实施、技巧与解析以及各种Vista相关学习文档和相关软件的安全下载。该电子书是了解和应用Vista人员必备的工具手册,并且也是第一本
名称:2006中国IT论坛精品集合
简介:本书由“51CTO论坛推广联盟”制作完成。书中所有内容均来自各联盟成员的论坛(网站)。制作本书的目的是为了集中大家的优势资源,将更多更精彩的内容带给广大技术爱好者。本书是联盟成立以来制作的第一本书。
关键字阅读
频道精选
主编信箱 热线:010-66476606 告诉我们您想看的:专题 文章
关于我们 | 诚聘英才 | 联系我们 | 网站大事 | 意见反馈 | 网站地图
Copyright©2005-2007 51CTO.COM 版权所有