(一)安装linux时安装grub
# Y# L, Y) k. H! }" a3 p4 l! v3 K$ C9 M& E7 e3 s
安装redhatlinux时会提示安装引导
程序,如果选择grub为引导程序,建议把grub安装到
硬盘的引导扇区MBR.grub还可以引导其它
操作系统,如FreeBSD、NetBSD、OpenBSD、GNUHURD和DOS,以及
Windows95、98、NT、2000、
XP。
/ Q/ X" a+ t2 V) n7 J3 Q9 i9 o* ?7 ]
6 r/ U7 }6 t. L- h! { (二)grub的配置
% A7 k4 T$ d. }6 ~+ o) x
5 C( e& @* f' j' T: h% j# L G& i
一旦选择了grub为引导程序,下面我们来了解一下它的配置。/boot/grub/grub.conf是grub产生一个引导选择菜单以及设置一些选项。下面是我的grub.conf:
* \$ z) g3 d/ M, T# O6 b6 U) r/ u1 _. G; p2 ~
4 n- w! i8 c* ]# R& [
#==========例子开始==========#grub.confgeneratedbyanaconda##Notethatyoudonothavetorerungrubaftermakingchangestothisfile#NOTICE:Youhavea/bootpartition.Thismeansthat#allkernelandinitrdpathsarerelativeto/boot/,eg.#root(hd0,6)#kernel/vmlinuz-versionroroot=/dev/hda10#initrd/initrd-version.img#boot=/dev/hdadefault=0timeout=10splashimage=(hd0,6)/grub/splash.xpm.gz#--%26gt;
RedhatLinux8.0%26lt;--titleRedHat
Linux(2.4.18-14)root(hd0,6)kernel/vmlinuz-2.4.18-14roroot=LABEL=/initrd/initrd-2.4.18-14.img#--%26gt;
MicrosoftWindowsXP%26lt;--titleMicrosoftWindowsXProotnoverify(hd0,0)chainloader1#===========例子结束==========
; _% x" _5 I8 `% V- L# O( |+ G
~: }: V7 _4 D s4 U s" o6 A# [8 X# K" y# L* j9 s+ t; K6 U
配置选项解释:
) E" m! N8 ~: \8 A
2 G$ \& |. U- ] 以"#"开头的是注释行。我这里有两个
操作系统,分别是RedHatLinux和MicrosoftWindowsXP。其中,timeout标识默认等待
时间,我这设置为10秒,超过10秒用户还没作出选择的话,将自动选择默认的操作系统(我这里默认的是Redhatlinux8.0)
% x9 T: |- R! o
* v9 E6 R" k$ I' o$ u9 x
默认的操作系统是由default一项来控制的,default后的数字表明第几个是默认的,这里0表示第一个,1表示第二个。
* x/ p e& J. j; z, f/ L; @; @' ]: t6 e/ s( L+ I, N9 t6 d
所以如果你想修改默认的操作系统,就修改default后的数字。title一项是设置操作系统的名称,grub不支持中文(有点遗憾)。splashimage一项指定grub界面的背景图片,有兴趣的朋友可以修改grub的背景。
D( ]1 F) b7 c' X
2 j( q1 I$ q4 x: `; M9 c$ U, e. V root(hd0,6)标识从第一个硬盘,第7个分区来启动搜索引导内核。注意这儿的root与linux的root分区不同,此root非彼root也!grub的硬盘标识方法与linux的有点不同。在linux中第一个主分区为hda1,第二个主分区为hda1,第一个
逻辑分区为hda5,而在grub中是以(hdx,y)来标识的,如第一个主分区为(hd0,0)第一个逻辑分区为(hd0,1)依此
类推。
7 Q7 i0 |* [' q) U5 S+ Y: v0 s
9 s$ n. ]2 _1 l7 X' n! b
所以这儿root后面的是你的/boot所在分区标识。知道了内核在哪儿,还要具体指出哪个文件是内核文件,这就是ke
& u5 d8 P1 e$ z& Q1 @( B
- V" I. O% f; F: r6 a rnel的工作。kernel/vmlinuz-2.2.18-14ro
: v# b. `2 p e, m: B
' \( L Q. c: _. d1 M; s$ s7 M root=LABEL=/。说明/boot/vmlinuz-2.2.18-14就是要载入的内核。后面的都是传递给内核的参数。
8 A6 L; Y$ z: c( M0 }1 A" h B% ~1 @8 t9 \4 H
ro是以readonly的意思。注意我这里内核前面的路径是"/",因为我的boot单独分了一个区,如果你没有为boot单独分区,那么内核前面的路径就是"/boot"。initrd用来初始的linuximage,并设置相应的参数。
# e; L9 e; c( g8 p8 i4 B* J2 \/ p0 d/ R) D$ l d
再来看一看
windows的定义段吧。这里,我添加了一项来引导WindowsXP。要完成此操作,GRUB使用了"链式装入器"(chainloader)。链式装入器从分区(hd0,0)的引导记录中装入winXP自己的引导装入器,然后引导它。这就是这种
技术叫做链式装入的原因--它创建了一个从引导装入器到另一个的链。
$ G4 S" Q3 H$ |- |1 I* T# V8 K# ^
) F, m! }/ B p# O; p 这种链式装入技术可以用于引导任何版本的DOS或Windows。如果你在
计算机中装有win98,winme,win2k,winxp的话,chainloader会把引导权交与win的NTLoader来引导。
8 ?( P- q i, K$ X4 N! {
5 \4 ?8 V5 R" M% G+ D9 d; j% A& a+ ~! V (三)Grub启动盘的制作
; M: t' G D; f% S4 X8 c8 L4 ^
+ t* W! m) z8 K5 V 要制作引导盘,需执行一些简单的步骤。首先,在新的软盘上创建ext2文件系统。然后,将其安装,并将一些GRUB文件复制到该文件系统,最后运行"grub"程序,它将负责设置软盘的引导扇区。
- v( Y) B0 L; f& s) }
. o* f: E* q) D
将一张空盘插入1.44MB软驱,输入:
9 G2 t d/ I0 N4 D. m3 ? Q! n
0 V, s& t/ `' I( u
#mke2fs/dev/fd0创建了ext2文件系统后,需要安装该文件系统:#mount/dev/fd0/mnt/floppy现在,需要创建一些目录,并将一些关键文件(原先安装GRUB时已安装了这些文件)复制到软盘:#mkdir/mnt/floppy/boot#mkdir/mnt/floppy/boot/grub#cp/boot/grub/stage1/mnt/floppy/boot/grub#cp/boot/grub/stage2/mnt/floppy/boot/grub
( Y r5 t ?! u3 j, j
; Y0 T0 X- h1 R) s8 H: @ 再有一个步骤,就能得到可用的引导盘。
! X( b# t9 v, D. g
9 i y' j1 W" I! t
在linuxbash中,从root用户运行"grub",该程序非常有趣并值得注意,因为它实际上是GRUB引导装入器的半
功能性版本。尽管Linux已经启动并正在运行,您仍可以运行GRUB并执行某些任务,而且其界面与使用GRUB引导盘或将GRUB安装到硬盘MBR时看到的界面(即GRUB控制台)完全相同。在grub%26gt;提示符处,输入:
7 W# x$ }3 z. |4 T0 g( g; w
6 }; a" N2 s% p8 _grub%26gt;root(fd0)grub%26gt;setup(fd0)grub%26gt;quit
( e- d! J: L0 t* B0 x9 J
0 ]+ p8 b8 |9 s) `6 @5 N 现在,引导盘完成了。
7 J/ s8 u8 U2 E+ _/ P3 Q& D$ l
+ j3 y7 l& q# v, W# z4 O
(四)恢复被windows破坏的grub' f- U7 [; z9 m7 Z h
0 v& \! ]+ R% e+ [
如果你用grub来引导linux和windows,当windows出毛病重新安装后,会破坏MBR中的grub,这时需要恢复grub。
) [3 i$ \; z9 j, N* X9 l
! C) o' i9 w5 B3 H6 v 1.把linux安装光盘的第一张放到
光驱,然后重新启动
机器,在BOIS中把系统用光驱来引导。
: _& g4 \0 J( e' \ g7 Y; W3 S w& ?
R8 ~9 w4 i! A: Y 2.等安装界面出来后,按F4键,也就是linuxrescue模式。
) w; c) h n# H6 H& T+ ], `. n1 l" F) [4 w8 y! A0 a, @
3.一系列
键盘以及几项简单的配制,过后就“继续”了这个过程,这里不说了,比较简单。
9 K* B) |" P. K$ a- z; n! w
; j: {: K0 {/ x, a* l0 p m 4.然后会出现这样的提示符:
' s8 k! y# t8 C, m* z0 U. T8 I
0 Q. K7 _) P; @1 jsh#
9 e5 L# y0 ~8 k- y' } V5 o7 n7 U* C3 p' n& L0 D2 l
5.我们就可以操作GRUB了。输入grub:
' a6 {4 d1 e* n( o, V, U/ X' S% _" }& m, T. O+ g) Z5 J
sh#grub
( p0 }3 ~4 P: J2 m/ v 会出现这样的提示符:
. x. q6 N/ U6 m0 Y/ M
0 S# u. b) M8 ogrub%26gt;
+ Y6 R. i7 E% _3 ]& P) P" n
- A6 E/ ^7 F% D X2 R, h5 p( @1 l 我们就可以在这样的字符后面,输入:
# t" s1 j; y& f9 `5 Y e5 @/ }/ q; ^ v
grub%26gt;root(hdX,Y)grub%26gt;setup(hd0)
' e) V1 g3 ^4 `1 i6 b
& |- w. s2 [1 ^, l2 ^; c2 |2 W, Q; P2 j. N
如果成功会有一个successful......
0 o! E) g% D2 e. ^) S9 v8 Y
+ a6 {9 c! d K 这里的X,如果是一个盘,就是0,如果你所安装的linux的根分区在第二个硬盘上,那X就是1了;Y,就是装有linux系统所在的根分区。setup(hd0)就是把GRUB写到硬盘的MBR上。
2 Y! Q" l/ {; _
) M4 ^2 c9 b/ R& r/ J- `[color=#FFFFFF']
! k- _1 H$ c& d) j1 C' Z
6 ^; W/ p: t. T, Y* }# q
(五)用NTLoader来引导linux
2 D8 L. O- e- C) @3 w E
, e/ Y! m5 j/ M 如果你在安装linux时没有选择安装grub,不必着急,现在我们来看看如何在安装linux后安装grub。并用windows的NTLoader来引导linux。
5 ^5 S4 W9 x* X, L$ R# V8 `
3 m0 X8 [# N# f7 B 1.安装grub
* V; b9 w7 M( T
; W; ?3 `1 e1 L+ n( h) L 我用的grub是Redhat8.0带的grub安装包:grub-0.92-7.rpm
- A H- v" N( O" n0 {8 z: x
+ X$ R9 ^& w$ N# g 安装:rpm-ivhgrub-0.92-7.rpm
% B9 ]0 j2 R. \4 E/ O
, S* ?' Y e" W& a& `0 Z) H7 z
其他安装方式也一样,只要你安装上grub就行了。RH8缺省用的grub,1、2步骤可以省了。
+ r6 W) ~, F ~% J/ p
7 C, z, i1 k# { M' u
2.建立grub的
环境
( K* l! Z( T3 g% j0 x9 l
; M! b" c5 u1 E cp/usr/share/grub/i386-pc/*/boot/grub
/ r% G2 D1 o! ]- a* ]8 J8 j% @0 q5 _! g; ~' S. Z! M' M/ C) `3 J
3.生成grub的配置文件/boot/grub/menu.conf
6 g a! N2 i. ]' g$ H
; d2 v8 T- y/ ^7 c: u$ X
按照上面所讲的grub.conf来生成一个配置文件。
9 Q& y( g3 u* a0 ?) n/ ]
: T5 Z3 `5 b( t 注意了,这里我的linux在/dev/hda4,所以menu.conf那些分区位置为(hd0,3),
u F7 _& W7 j4 ]" P
- O9 D# _) t# b" V; G: `
你的可能不一样了,不能完全照着"画瓢"噢!下面第3步install的中的分区位置也应该和你的系统一致。
9 y7 ^8 Y2 Z0 I/ Q1 ?- j
/ w. B8 s7 |; \6 p( q$ R 安装grub至Linux分区boot
3 x( E) ~7 t) m8 l/ a' z) z$ R) _, v2 f7 ~8 R
将grub的stage1安装到/dev/hda4的boot扇区(hd0,3)。过程如下:
5 t9 @1 S) o, C% k1 Z: d+ {$ T$ c, N- H8 S4 }6 t8 ~5 j: ~
/sbin/grub(运行grub)grub%26gt;install(hd0,3)/boot/grub/stage1d(hd0,3)(hd0,3)/boot/grub/stage2p(hd0,3)/boot/grub/menu.conf
! s8 e4 x& H g& H6 r) k' J8 p* r
(注意,上面"grub%26gt;"为grub的提示符,其后内容写在一行上。)
G2 ? T) o/ p3 R! ]& A3 |
8 S8 B( l5 U, R+ @# p t 4.取得grub的boot
信息
- e% {/ K) i! U) |1 x7 X- u8 i5 o( m0 ?4 v! n" u3 _
过程如下:
. q* W8 S! p# }+ E+ {3 D& Z! |$ ]. ]/ [8 g3 W
ddif=/dev/hda4of=/grub.lnxbs=512count=1
! @$ R, N5 M) ?0 ~
2 K8 S Y. G5 n! o+ y7 I+ F0 g1 J4 w 这样得到grub的引导信息,只要用NTLoader来加载它就行了。
, n; v( b6 y) c9 r/ ?8 n2 l8 B' D- k
5.将上面得到的grub.lnx弄到Windows的C盘根目录下,可以先把grub.lnx弄得软盘上,然后启动windows,拷贝到C:\;情况允许也可以直接在Linux下拷贝到C:了。我的C盘(即设备/dev/hda1)为FAT32,可以直接从Linux下弄过去了。如下:
0 W, b% k1 b9 S6 y8 G/ I$ A- m
2 V& h7 @; X U* X5 B$ I9 Imount-tvfat/dev/hda1/mnt/ccp/grub.lnx/mnt/cumount/mnt/c
2 j3 V# ~& G! x$ I2 d* G$ m. T
2 n; Z t) g* m# s: d 6.修改NTLoader的boot.ini
& S z# m. S4 A4 y9 w& F
5 [' _4 m# ~! Y1 [' k% V" { 在其中加入一行:C:\grub.lnx="RedhatLinux-GRUB"
$ B$ _0 L! B ^) ]' Q
' C: y1 b" Z! F 加入后boot.ini的内容如下:
) l& l# n0 J/ A! M
- Q6 i* Q2 O @( L! B5 w[bootloader]timeout=15default=C:\boot.lnx[operatingsystems]multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="
MicrosoftWindowsXPProfessional"/fastdetect[VGAmode]"/basevideo/sosC:\grub.lnx="RedhatLinux-GRUB"
/ K; f! G6 J' Q: Q
o6 |& W3 B( K; S; z7 g3 S3 D+ l7 h2 H# f1 U3 C
可以用NTLoader加载Linux了,其实上面过程基本上和用NTLoader加载LILO一样。其基本思想就是用NTLoader来加载LILO或grub的引导区(grub.lnx),其中的关键就是LILO或grub的引导区的获取。
" r3 O' P. A* l3 g9 l. k$ M' W; B (六)活用grub的交互功能
. }( @, o3 `- X# r
- D. _% x$ Q$ ?1 M2 @# b/ u grub具有强大的交互功能。学会了将会使你受益非浅!
0 y4 k5 Y; n4 V% K/ s, d* ]
: m) w0 R" a4 f1 H7 T" R 1.grub没有显示菜单怎么办?
' d$ a7 i# Q. w: d& y3 L0 W' g9 n8 L# g" c' k6 v- f/ y
当开机后进入grub界面但没了菜单,只剩下一个grub%26gt;提示符,怎么启动呢?别急,看下面:
% O% t0 E4 v0 j9 G' n; H) S
# k$ q; n3 S$ x9 _& C5 dgrub%26gt;cat(hd0,6)/boot/grub/grub.conf(为了看参数)grub%26gt;root(hd0,6)grub%26gt;kernel(hd0,6)/vmlinuz-2.4.18-14roroot=LABEL=/grub%26gt;initrd(hd0,6)/initrd-2.4.18-14.imggrub%26gt;boot
- P$ K: T6 q$ c3 a5 y5 m8 s
" k' n% ]2 C0 N( `1 J+ n8 m 启动了吧!以上有些数字要根据你的实际情况更改。以上这个方法也可以用于
测试新编译的内核。
" u; F( P- L* o/ n. C* R
7 m9 a( L4 E' S8 Z8 _ 2.进入单用户模式。
, _' S4 z2 ]! p* T, p" {# w
3 P5 |6 L) @. A' H2 A( w 有时不小心把root用户密码忘了,只能进入单用户模式来重新设置root密码。方法如下:开机进入grub界面,按C进入命令行模式,然后按照上面的方法进行,只是在第三步要在后面加入single参数。