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/hda <==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 ,例如我想要写入的是 hda5 这个 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: 的字样,出现这个字样之后,马上按下 <tab> 按键,那么就会出现目前 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 登入图标: |