用实验快速掌握grub和lilo
[实验目的]
1.灵活应用grub和lilo引导系统。
2.当系统出现无法引导时,会快速修复。
[实验要求]
1.RH8.0系统。
2.能够熟练应用rescue模式,应急实验中无法预料的错误。
[实验步骤]
1.安装grub。
情景:假设你现在用grub引导系统,今天grub.conf这个文件突然丢失啦,开机出现的grub如下:grub>,而且你又不能确定系统装在哪个分区。
1) 创建情景,手动删除/boot/grub/grub.conf
# mv /boot/grub/grub.conf /boot/grub/grub.conf.BAK
2) 重启,出现假设的情景。
# reboot
3) 首先,学会在不用光盘rescue模式进入系统。
① 用root (hdx,x)定位到每个分区。
grub> root (hd0,0)
注意:a.(hdx,x)是给BIOS看的,hd0表示第1个硬盘,hd1表示第2个硬盘,逗号后面的数字0表示第1个分区,1表示第2个分区以此类推。
b.作这一步的目的是找到含vmlinuz和initrd*.img文件的那个分区,及根目录分区/。
c.寻找的方法如下:
grub> root (hd0,0)
显示:什么文件系统,什么分区系统
grub> kernel /<tab键>
显示:有什么目录和文件。由此找出包含/boot/vmlinuz和initrd*.img文件的分区,及根目录/分区。也有可能,/boot和/在同一个分区。这里姑且,/boot和/独立分区。在同一分区的情况会另有说明。
d.root后,括弧前有个空格。
②根据上述方法,假设找到/boot分区在(hd0,0),/分区在(hd0,10)。
③现在打如下列命令,进入系统:
grub> root (hd0,0)<回车键>
grub> kernel /vmlinuz-<tab键>补全<空格键>ro<空格键>root=/dev/hda11<回车键>
grub> boot<回车键>
注意:a./dev/hdax是给linux内核看的,对于同一个分区,hdax里的x要比(hd0,x)里的x大1。
b.如果,你找出的/和/boot分区不在(hd0,)上,而在(hd1,x)上,那么可能在root=/dev/hda11这而变为:root=/dev/hdbx啦,x根据(hd1,x)里的x而定,比它大1,这个上面说过。
4) 创建一个/boot/grub/grub.conf,方法为拷贝文档里的样本。
# cp /usr/share/doc/grub-<tab键>补全/menu.lst /boot/grub/grub.conf
原文如下(等于号中间的部分):
=======================================
#
# Sample boot menu configuration file
#
# Boot automatically after 30 secs.
timeout 30
# By default, boot the first entry.
default 0
# Fallback to the second entry.
fallback 1
# For booting GNU/Hurd
title GNU/Hurd
root (hd0,0)
kernel /boot/gnumach.gz root=hd0s1
module /boot/serverboot.gz
# For booting GNU/Linux
title GNU/Linux
root (hd1,0)
kernel /vmlinuz root=/dev/hdb1
# For booting Mach (getting kernel from floppy)
title Utah Mach4 multiboot
root (hd0,2)
pause Insert the diskette now!!
kernel (fd0)/boot/kernel root=hd0s3
module (fd0)/boot/bootstrap
# For booting FreeBSD
title FreeBSD 3.4
root (hd0,2,a)
kernel /boot/loader
# For booting OS/2
title OS/2
root (hd0,1)
makeactive
# chainload OS/2 bootloader from the first sector
chainloader +1
# This is similar to "chainload", but loads a specific file
#chainloader /boot/chain.os2
# For booting Windows NT or Windows95
title Windows NT / Windows 95 boot menu
rootnoverify (hd0,0)
makeactive
chainloader +1
# For loading DOS if Windows NT is installed
# chainload /bootsect.dos
# For installing GRUB into the hard disk
title Install GRUB into the hard disk
root (hd0,0)
setup (hd0)
# Change the colors.
title Change the colors
color light-green/brown blink-red/blue
===================================================
现在假设,你只想引导linux和windows系统,那么只保留下面部分就行,其他的要么注释掉,要么删除。保留部分如下(等于号中间的部分):
==============================================
# For booting GNU/Linux
title GNU/Linux
root (hd1,0)
kernel /vmlinuz root=/dev/hdb1
# For booting Windows NT or Windows95
title Windows NT / Windows 95 boot menu
rootnoverify (hd0,0)
makeactive
chainloader +1
# For loading DOS if Windows NT is installed
# chainload /bootsect.dos
==============================================
根据测试,(hd0,0)为/boot分区,(hd0,10)为/分区,而且,用fdisk -l 找到C:\ ,这里假设为:/dev/hda2,那么给BIOS看的东西就是(hd0,1),所以,现在做相应修改如下(等于号中间的部分):
==============================================
# For booting GNU/Linux
title GNU/Linux
root (hd0,0)
kernel /vmlinuz ro root=/dev/hda11
# For booting Windows NT or Windows95
title Windows NT / Windows 95 boot menu
rootnoverify (hd0,1)
makeactive
chainloader +1
# For loading DOS if Windows NT is installed
# chainload /bootsect.dos
==============================================
如果你有其他系统,请做相应修改。另外,如果你觉的title太土的话,也可以修改一下。
5) 重新安装grub,检查一下上述文件有无错误。
# grub-install /dev/hda
6) 重启后,应该能看到grub的选择菜单,虽然土了一点,但绝对能用。
7) 其次,如果你有安装光盘,可以利用rescue模式,进入系统。
① 安装光盘放入光驱,写linux rescue | 选择English | 选择 us 键盘 | 点击Continu| OK| 进入虚拟系统。
② 进入硬盘linux环境。
# chroot /mnt/sys<tab键>补全
③接着以上 4) 直到 6)。
8) 上面提到,如果/和/boot在同一个分区,这样的话,在grub>提示下进入系统,具体操作如下修改,假设/和/boot在(hd0,10),那么进入系统的命令如下:
grub> root (hd0,10)
grub> kernel /boot/vmlinuz ro root=/dev/hda11
grub> boot
进入系统后,/boot/grub/grub.conf也做如下修改:
==============================================
# For booting GNU/Linux
title GNU/Linux
root (hd0,10)
kernel /boot/vmlinuz ro root=/dev/hda11
# For booting Windows NT or Windows95
title Windows NT / Windows 95 boot menu
rootnoverify (hd0,1)
makeactive
chainloader +1
# For loading DOS if Windows NT is installed
# chainload /bootsect.dos
==============================================
不知大家注意没有,grub>提示,手动进入的命令和/boot/grub/grub.conf的菜单几乎一样,只是少了titile。
2.安装lilo。
情景:你起初是用lilo引导,现在lilo坏了,无法引导,出现LI 或LIL等字样,无法进入系统。或者你起初是用grub引导,现在想用lilo引导。所以你现在必须安装lilo。
1) 因为lilo要求/boot下的文件要在前512柱面内,所以,如果条件不符合,无法用lilo引导,放弃此实验。
2)创造实验条件,破坏掉MBR内的LILO或grub。
# dd if=/dev/sero of=/dev/hda bs=446 count=1
# reboot
注意:上面的bs=446,千万不能大于446,否则可能损坏硬盘分区表。
3)重启后,出现系统无法引导。
4) 根据1的7)步,进入rescue模式,在进入硬盘linux环境。
5) 打开lilo.conf的manpage,拷贝里面的部分代码。
# man lilo.conf
6)拷贝其中的下列代码,制作新的文件/etc/lilo.conf
==================================
boot = /dev/hda
delay = 40
compact
vga = normal
root = /dev/hda1
read-only
image = /zImage-2.5.99
label = try
image = /zImage-1.0.9
label = 1.0.9
image = /tamu/vmlinuz
label = tamu
root = /dev/hdb2
vga = ask
other = /dev/hda3
label = dos
table = /dev/hda
=======================================
6) 编辑此/etc/lilo.conf 只保留下面部分(等于号中间的部分):
=======================================
boot = /dev/hda
image = /tamu/vmlinuz
label = tamu
root = /dev/hdb2
other = /dev/hda3
label = dos
=======================================
假设,/boot 分区在(hd0,0),/ 分区在(hd0,10) C:\在:(hd0,1)
现在做如下修改:
=======================================
prompt
boot = /dev/hda
image = /boot/vmlinuz
label = linux
root = /dev/hda11
other = /dev/hda2
label = windows
=======================================
注意:添加了prompt,其实不加也行,在开机时注意按<shift键>,这样,你才有机会选择系统,否则默认进入第一个操作系统。
7) 安装lilo,这是必须的。
#lilo
注意,如果无错,你会看到菜单。如果有错,它会提示你做相应修改。
8) 重启,后提示输入lilo的菜单选项,如果你不知道 的话,可以按<tab键>,它会显示所有菜单,这样,你就容易写如要进入的系统菜单名。
3.原来的lilo引导改为grub。
1) 采用1的7) 步,进入rescue模式,在利用chroot进入硬盘linux环境。
2)编辑/boot/grub/grub.conf文件。
3)安装grub。
# grub-install /dev/hda
4) 重启应该就是grub引导啦。
[实验总结]
通过此实验,大家可以对lilo和grub的菜单比较熟悉。如果菜单出错,你可以把配置文件修改为最简单,最必要的条目。另外,请大家一定要留意一下,最终的lilo.conf和grub.conf文件,这两个文件已经是精简的不能在精简啦。另外,比照最初的安装配置的lilo.conf或grub.conf,你会发现,最起码少了 initrd*.img这一项目,它的作用是为进行引导而初始化RAM。即便少了也不会影响正常引导。