grub命令以及启动详解.docx

上传人:b****1 文档编号:12712681 上传时间:2023-04-21 格式:DOCX 页数:48 大小:1.38MB
下载 相关 举报
grub命令以及启动详解.docx_第1页
第1页 / 共48页
grub命令以及启动详解.docx_第2页
第2页 / 共48页
grub命令以及启动详解.docx_第3页
第3页 / 共48页
grub命令以及启动详解.docx_第4页
第4页 / 共48页
grub命令以及启动详解.docx_第5页
第5页 / 共48页
点击查看更多>>
下载资源
资源描述

grub命令以及启动详解.docx

《grub命令以及启动详解.docx》由会员分享,可在线阅读,更多相关《grub命令以及启动详解.docx(48页珍藏版)》请在冰豆网上搜索。

grub命令以及启动详解.docx

grub命令以及启动详解

Grub详解

应樱家冢、Bluedata以及其他兄弟的要求,这里谈一谈自己在配置Grub当中积累的点滴,不存在什么高深的使用技巧——^_^,我自己也没有掌握,实际上就是我们常用的功能整理了一下。

如有错误和疑问,请大家指教!

因为时间不够用,所以才这么迟的出来,希望两位兄弟谅解,同时感谢网络上曾经为了Linux的事业不停奋斗而无私贡献的人们——因为本文参考了他们的经验!

1、一个GRUB配置文件

2、解读grub.conf文件

3、配置grub

4、GRUB的交互性

5、常见grub除错方法的思路

1一个GRUB配置文件

基于本例的分区如下:

hda15G

hda18G/REDHATLinux8.0

hda57G/home

hdc20G

hdc16.4GWinXP

hdc56.4G

hdc66.4G

hdc76.4G

#fdisk-l

#Disk/dev/hdc:

255heads,63sectors,2434cylinders

Units=cylindersof16065*512bytes

DeviceBootStartEndBlocksIdSystem

/dev/hdc1*18947181023+bWin95FAT32

/dev/hdc2895243412370050fWin95Ext'd(LBA)

/dev/hdc589517877172991bWin95FAT32

/dev/hdc6178824345196996bWin95FAT32

Disk/dev/hda:

255heads,63sectors,1867cylinders

Units=cylindersof16065*512bytes

DeviceBootStartEndBlocksIdSystem

/dev/hda1*110208193118+83Linux

/dev/hda210211802628141583Linux

/dev/hda318031867522112+82Linuxswap

grub.conf,这个文件位于;/boot/grub/grub.conf

#grub.confgeneratedbyanaconda

#

#Notethatyoudonothavetorerungrubaftermakingchangestothisfile

#NOTICE:

Youdonothavea/bootpartition.Thismeansthat

#allkernelandinitrdpathsarerelativeto/,eg.

#root(hd0,0)

#kernel/boot/vmlinuz-versionroroot=/dev/hda1

#initrd/boot/initrd-version.img

#boot=/dev/hda

default=0

timeout=3

splashimage=(hd0,0)/boot/grub/splash.xpm.gz

titleRedHatLinux(2.4.18-14)

root(hd0,0)

kernel/boot/vmlinuz-2.4.18-14roroot=LABEL=/

initrd/boot/initrd-2.4.18-14.img

titleMicrosoftWindowsXP

root(hd1,0)

chainloader(hd1,0)+1

makeactive

map(hd0)(hd1)

map(hd1)(hd0)

boot

2解读grub.conf文件

我们将来看看grub.conf文件内语句,(注:

...)内的东西是我们的解读内容.

#grub.confgeneratedbyanaconda

#

#Notethatyoudonothavetorerungrubaftermakingchangestothisfile

#NOTICE:

Youdonothavea/bootpartition.Thismeansthat

#allkernelandinitrdpathsarerelativeto/,eg.

#root(hd0,0)

#kernel/boot/vmlinuz-versionroroot=/dev/hda1

#initrd/boot/initrd-version.img

#boot=/dev/hda(注:

以上以符号井"#"开头的行表示被注释掉,没有任何意义)

default=0(注:

默认的操作系统就是由default控制的。

default后加一个数字n,表明是第n+1个。

需要注意的是,GRUB中,计数是从0开始的,第一个硬盘是hd0,第一个软驱是fd0,等等。

所以,default0表示默认的操作系统在这儿是RedHatLinux(2.4.18-14)如果你修改成1就是WinXP了)

timeout=3(注:

timeout表示默认等待的时间,这儿是3秒钟。

超过3秒,用户还没有作出选择的话,系统将自动选择默认的操作系统;当然你可以改成任何你乐意的时间)

splashimage=(hd0,0)/boot/grub/splash.xpm.gz(注:

指定开机画面文件splash.xpm.gz的位置,也可以splash/boot/logo/800x600x8.img)

titleRedHatLinux(2.4.18-14)(注:

表示RedHatLinux的菜单项)

root(hd0,0)(注:

表示第一个硬盘第一个分区,这里的root和系统内的root不是一码事!

详细如下说明)

kernel/boot/vmlinuz-2.4.18-14roroot=LABEL=/(注:

指定内核的位置,详细说明如下文)

initrd/boot/initrd-2.4.18-14.img(注:

初始化)

titleMicrosoftWindowsXP(注:

表示MicrosoftWindowsXP的菜单项)

map(hd0)(hd1)(注:

map是命令,详细如下)

map(hd1)(hd0)

root(hd1,0)(注:

这是指第二个硬盘(从硬盘)上第一个分区)

chainloader(hd1,0)+1(注:

链式装入器,装入一个扇区的数据然后把引导权交给它。

详细说明如下)

makeactive

boot

(注:

在Linux中,当谈到"root"文件系统时,通常是指主Linux分区。

但是,GRUB有它自己的root分区定义。

GRUB的root分区是保存Linux内核的分区。

这可能是您的正式root文件系统,也可能不是。

我们讨论的是GRUB,需要指定GRUB的root分区。

进入root分区时,GRUB将把这个分区安装成只读型,这样就可以从该分区中装入Linux内核。

GRUB的一个很“酷”的功能是它可以读取本机的FAT、FFS、minix、ext2和ReiserFS分区.到目前为止,您可能会感到一点疑惑,因为GRUB所使用的硬盘/分区命名约定与Linux使用的命名约定不同。

在Linux中,第一个硬盘的第五个分区称作"hda5"。

而GRUB把这个分区称作"(hd0,4)"。

GRUB对硬盘和分区的编号都是从0开始计算。

另外,硬盘和分区都用逗号分隔,整个表达式用括号括起。

现在,可以发现如果要引导Linux硬盘hda5,应输入"root(hd0,4)"。

知道了内核在哪儿,还要具体指出哪个文件是内核文件,这就是kernel的工作。

kernel/boot/vmlinuz-2.4.18-14roroot=LABEL=/说明/boot/vmlinuz-2.4.18-14就是要载入的内核。

后面的都是传递给内核的参数。

root=LABEL=/就是linux的硬盘分区表示法,ro是readonly的意思。

initrd用来初始的linuximage,并设置相应的参数。

命令map:

当你有两块硬盘,一个无法从第二块硬盘启动的操作系统,例如Windowsxp,就可以使用map命令.你能够将hd0映射为hd1,将hd1映射为hd0。

换句话说,你可以虚拟的交换两个硬盘而启动所需要的操作系统。

命令形式如下:

grub>map(hd0)(hd1)

grub>map(hd1)(hd0)

GRUB使用了“链式装入器”(chainloader)。

链式装入器从分区(hd1,0)的引导记录中装入winxp自己的引导装入器,然后引导它。

这就是这种技术叫做链式装入的原因--它创建了一个从引导装入器到另一个的链。

这种链式装入技术可以用于引导任何版本的DOS或Windows。

GRUB的配置文件要简单就这么简单,如果你要更个性化一点,试一试把“colorlight-gray/blue”加在default语句的下面

3配置grub

grub启动时会在/boot/grub/中寻找一个名字为menu.lst的配置文件,如果找不到此文件则不进入菜单模式而直接进入命令行模式。

现在,我们来看一下如何在启动后进入各种操作系统,如何建立menu.conf文件。

我们就从GRUB支持的启动过程开始。

可以有两种方法来完成启动过程:

·A.通过调用内核本地启动

·B.连续启动或者将控制转给另一个引导器

A模式启动过程

1.配置跟设备或者告诉GRUB你的根文件系统。

2.告诉GRUB你的内核影像的位置,然后将参数传送给内核。

3.重新启动,试一下。

为了启动Linux,将内核以bzImage的文件名放在/boot/目录中,跟文件系统是

/dev/hda1,或者GRUB中的(hd0,0)。

启动过程如下:

1.root(hd0,0)[Thissetstherootpartition]

2.kernel/boot/bzImageroot=/dev/hda1[Thissetsthekernel]

B模式启动过程(这种模式假设当前的分区中安装了另一个启动管理器,例如LILO

或者NTLDR):

1.设置根分区但不要安装它

2.激活这个分区

3.配置需要启动的分区的第一个扇区

4.重新启动,看一下效果。

我们在试试启动安装在/dev/hdc1或者(hd1,0)的windows。

启动windows的过程如下:

1.rootnoverify(hd1,0)

2.makeactive

3.chainloader+1[+1setsthefirstsectorofthecurrentroot

partition]

4.boot[transfersthecontrolandquitsGRUB]

menu.conf文件:

它用于建立启动多操作系统时的菜单。

建立menu.conf并不难。

它使用简单的英语,就象你在这一节看到的那样。

所有的菜单项目都以没有逗号分隔的“titleTITLENAME”开头。

你可以随意设置

TITLENAME。

设置Linux启动菜单步骤如下:

1.设置标题

2.设置根分区

3.设置内核的相应参数

4.启动

一个菜单例子:

titleRedHatLinux(2.4.18-14)

root(hd0,0)

kernel/boot/vmlinuz-2.4.18-14roroot=LABEL=/

initrd/boot/initrd-2.4.18-14.img

前面有#的行是一个注释。

建立启动Windows或者DOS的菜单:

titleWindoze

rootnoverify(hd0,0)

makeactive

chainloader+1

boot

#----

又或者:

titleMicrosoftWindowsXP

map(hd0)(hd1)

map(hd1)(hd0)

root(hd1,0)

chainloader(hd1,0)+1

makeactive

boot

----

注意:

root和rootnoverify都是一样的,把rootnoverify改成root也行。

不过经过实践来看。

有时引导win时,系统安装好后,是rootnoverify(hdX.Y)这样形式的,这样会出现windows起不来,出现什么windows什么文件损坏的情况。

这时,我们就要把在grub中,引导windows的那段中的rootnoverify改为root

root英文的意思就是根的意思,在这里是让linux知道自己所处的位置,也就是我们所安装linux的/根分区所在的位置。

4GRUB的交互性

GRUB最好的优点之一就是其强健的设计--在不断使用它时请别忘了这点。

如果更新内核或更改它在磁盘上的位置,不必重新安装GRUB。

事实上,如有必要,只要更新menu.lst文件即可,一切将保持正常。

只有少数情况下,才需要将GRUB引导装入器重新安装到引导记录。

首先,如果更改GRUBroot分区的分区类型(例如,从ext2改成ReiserFS),则需要重新安装。

或者,如果更新/boot/grub中的stage1和stage2文件,由于它们来自更新版本的GRUB,很有可能要重新安装引导装入器。

其它情况下,可以不必理睬!

GRUB的最大的特点就是交互性特别强。

在开机时,按一下“c”,将进入GRUB控制台。

显示如下:

GRUBversion0.5.96.1(640Klower/3072Kuppermemory)

[MinimalBASH-likelineeditingissupported.Forthefirstword,TAB

listspossiblecommandcompletions.AnywhereelseTABliststhepossible

completionsofadevice/filename.]

grub>

欢迎使用GRUB控制台。

现在,再研究命令:

将通过GRUB控制台绕过lilo来启动RedHatlinux,

grub>root(h

现在,按一次Tab键。

如果系统中有多个硬盘,GRUB将显示可能完成的列表,从"hd0"开始。

如果只有一个硬盘,GRUB将插入"hd0,"。

如果有多个硬盘,继续进行,在("hd2")中输入名称并在名称后紧跟着输入逗号,但不要按Enter键。

部分完成的root命令看起来如下:

grub>root(hd0,

现在,继续操作,再按一次Tab键。

GRUB将显示特定硬盘上所有分区的列表,以及它们的文件系统类型。

在我的系统中,按Tab键时得到以下列表:

grub>root(hd0,(tab,按tab一下键)

Possiblepartitionsare:

Partitionnum:

0,Filesystemtypeisfat,partitiontype0x6

Partitionnum:

2,Filesystemtypeisext2fs,partitiontype0x83

Partitionnum:

4,Filesystemtypeunknown,partitiontype0x7

Partitionnum:

5,Filesystemtypeisext2fs,partitiontype0x83

Partitionnum:

6,Filesystemtypeisfat,partitiontype0xb

Partitionnum:

7,Filesystemtypeisfat,partitiontype0xb

Partitionnum:

8,Filesystemtypeisext2fs,partitiontype0x83

Partitionnum:

9,Filesystemtypeunknown,partitiontype0x82

如您所见,GRUB的交互式硬盘和分区名称实现功能非常有条理。

这些,只需要好好理解GRUB新奇的硬盘和分区命名语法,然后就可以继续操作了

代码:

grub>root(hd0,8)

现在已安装了root文件系统,到装入内核的时候了

grub>kernel/boot/vmlinuz-2.4.2root=/dev/hda5ro

[Linux-bzImage,setup=0x1200,size=0xe1a30]

您已经安装了root文件系统并装入了内核。

现在,可以引导了。

只要输入"boot",Linux引导过程就将开始。

是不是很cool啊,GRUB的menu.lst更像一个linux下的脚本程序。

5常见grub除错方法的思路

首先进去Linux的rescue模式!

用软盘或光盘启动,然后在启动的提示符输入:

linuxrescue

按照提示进入一个Shell状态,你可以到/mnt/下面看到一个sysimage这么目录,进去以后,就是你安装linux的/分区.

使用命令将根分区变为当前目录的根分区:

chroot/mnt/sysimage

然后转到/sbin/这个目录中.

使用fdisk-l显示当前分区情况,然后使用#grub-install/dev/hdx(x为你使用的是那块硬盘安装的,一般情况下是hda)

使用exit推出chroot,再使用exit退出linuxrescue模式,系统将重新启动!

取出光盘,应该可以看到grub安装好了.

在具体的环境中,编辑/boot/grub/grub.conf文件和menu.lst文件

简化:

1.安装盘启动

2.进入linuxrescue模式

3.一系列键盘以及几项简单的配制,过后就[继续]了。

这个过程,我不说了,比较简单。

4.然后会出现这样的字符

sh#

5.sh#grub

会出现这样的字符:

grub>我们就可以在这样的字符后面,输入:

grub>root(hdX,Y)

grub>setup(hd0)

如果成功会有一个successful......

这里的X,如果是一个盘,就是0,如果你所安装的linux的根分区在第二个硬盘上,那X就是1了;Y,就是装有linux系统所在的根分区。

setup(hd0)就是把GRUB写到硬盘的MBR上。

其他:

grub菜单项丢失,只有字符grub>时的处理方法:

grub>cat(hd0,0)/root/grub/grub.conf(为了看参数。

grub>root(hd0,1)

grub>kernel(hd0,0)/boot/vmlinuz-2.4.18-11roroot=/dev/hda2

grub>initrd(hd0,0)/boot/initrd-2.4.18-11.img

grub>boot

如果看不明白,可以参考后面的命令慢慢看,这里不做注释,促使大家学习,哈哈

98先装,用的是单独的硬盘,4.3G,那时候,LINUX8还没有到我手中

后来到了,在家中安装好了,选择GRUB,就会有DOS的一个菜单,我的是在主分区

到了公司,把LINUX挂在第一个盘的位置,那个盘挂在第四个盘的位置(这个无所谓)

然后GRUB配置如下

default=0

timeout=10

splashimage=(hd0,0)/grub/splash.xpm.gz

titleRedHatLinux(2.4.18-14)

root(hd0,0)

kernel/vmlinuz-2.4.18-14roroot=LABEL=/

initrd/initrd-2.4.18-14.img

titleDOS

rootnoverify(hd1,0)

makeactive

chainloader(hd1,0)+1

map(hd0)(hd1)

map(hd1)(hd0)

boot

下面是GRUB的可用命令列表:

#大部分命令我们不常用,而且我也没有每个都试验!

关于下面将要用到的三种模式的解释:

GRUB的用户界面有三种:

命令行模式,菜单模式和菜单编辑模式

(a)命令行模式:

进入命令行模式后GRUB会给出一个命令提示符`grub>`,此时就可以键入命令,按回车执行。

此模式下可执行的命令是在menu.lst中可执行的命令的一个子集。

此模式下允许类似于Bashshell的命令行编辑功能:

或<右箭头键>光标右移一个字符

或<左箭头键>光标左移一个字符

到这一行的开头

到行尾

删除光标处的字符

删除光标左边的字符

删除光标右边的所有字符(包括光标处的字符)

删除光标左边的所有字符(包括光标处的字符)

恢复上次删除的字符串到光标位置

或<向上键>历史记录中的上一条命令

或<向下键>历史记录中的下一条命令

在命令行模式下键有补全命令的功能,如果你敲入了命令的前一部分,键入系统将列出所有可能以你给出的字符串开头的命令。

如果你给出了命令,在命令参数的位置按下键,系统将给出这条命令的可能的参数列表,具体的可用命令集将在后面给出。

(b)菜单模式

当存在文件/boot/grub/menu.lst文件时系统启动自动进入此模式。

菜单模式下用户只需要用上下箭头来选择他所想启动的系统或者执行某个命令块,菜单的定义在menu.lst文件中,你也可以从菜单模式按键进入命令行模式,并且可以按键从命令行模式返回菜单模式。

菜单模式下按键将进入菜单编辑模式。

(c)菜单编辑模式

菜单编辑模式用来对菜单项进行编辑改变,其界面和菜单模式的界面十分类似,不同的是菜单中显示的是对应某个菜单项的命令列表。

如果在编辑模式下按下,则取消所有当前对菜单的编辑并回到菜单模式下。

在编辑模式下选中一个命令行,就可以对这条指令进行修改,修改完毕后按下,GRUB将提示你确认并完成修改。

如果你想在当前命令列表中增加一条命令,按在当前命令的下面增加一条指令,按在当前命令前处增加一条指令。

删除一条指令。

仅用于菜单的命令(不包括菜单项内部的启动命令)

defaultnum

设置菜单中的默认选项为num(默认为0,即第一个选项),超时将启动这个选项

fallbacknum

如果默认菜单项启动失败,将启动这个num后援选项。

passwordpasswdnew-config-file

关闭命令行模式和菜单编辑模式,要求输入口令,如果口令

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1