今天上了引导程序:GRUB

今天上了引导程序:GRUB,第1张

从Red Hat Linux 72起,GRUB(GRand Unified Bootloader)取代LILO成为了默认的启动装载程序。相信 LILO对于大家来说都是很熟悉的。这次Red Hat Linux用GRUB代替LILO,可见GRUB大有过人之处。不过,

相对于LILO来说,大家对GRUB还是要陌生一些。本文将对GRUB的基本情况、术语、接口、命令以及配置 文件做个介绍,希望对大家有所帮助。

一、GRUB的概述

在Red Hat linux装载一个系统前,它必须由一个引导装载程序(boot loader,启动管理程序)中的特定指令告诉它去引导系统。这个程序一般是位于系统的主硬盘驱动器或是其他知道如何去开始linux内核的媒介驱动器上。

如果说一个x86系统只安装了Red Hat Linux而且只有一个版本的linux内核,那么通过引导装载程序开始Red Hat Linux的特定过程就不重要了。Red Hat Linux安装程序允许用户快速方便地配置引导装载程序存放在主硬盘驱动的主引导记录中来引导 *** 作系统

然而,为了能从多个linux内核或其他 *** 作系统引导,那么就很有必要了解Red hat linux用于提供必要的引导选项的方法,以及理解引导的过程与如何去改变。

本文是讨论GRUB,它是Red Hat Linux用来在x86系统上装载 *** 作系统的默认方法。同时,本文也将详细介绍用于控制引导过程的各种命令和配置选项。

GRUB的定义

GNU GRUB(GRand Unified Bootloader)是一个将引导装载程序安装到主引导记录的程序,主引导记录是位于一个硬盘开始的扇区。它允许位于主引导记录区中特定的指令来装载一个GRUB菜单或是GRUB的命令环境。这使得用户能够开始 *** 作系统的选择,在内核引导时传递特定指令给内核,或是在内核引导前确定一些系统参数(如可用的RAM大小)。

x86的引导过程

当一个x86机器启动后,系统BIOS开始检测系统参数,如内存的大小、日期和时间、磁盘设备、以及这些磁盘设备用于引导的顺序等。通常情况下,BIOS都是被配置成首先检查软驱或光驱(或两者都检查),然后再尝试从硬盘引导。如果在这些可移动的设备中,没有找到可引导的介质,那么BIOS通常是转向第一块硬盘最初的几个扇区,寻找用于装载 *** 作系统的指令。这些最初的扇区-主引导记录-开始装载一个预选择 *** 作系统的过程,一个 *** 作系统选项贩GRUB菜单,或是一个执行特定选项的GRUB命令行接口。

装载GRUB和 *** 作系统的过程,包括以下几个 *** 作步骤:

1、装载基本的引导装载程序,这通常是第一步。基本引导装载程序必须是位于主引导扇区中一个非常小的空间,少于512字节。因此,基本引导装载程序所做的唯一的事情就是装载第二引导装载程序。这主要是归结于在主引导扇区中没有足够的空间用于其他东西了。

2、装载第二引导装载程序,这通常称为第二步。这第二引导装载程序实际上是引出更高级的功能,以允许用户装载入一个特定的 *** 作系统。在GRUB中,这步是让用户显示一个菜单或是输入命令。

3、装载在一个特定分区上的 *** 作系统,如linux内核。一旦GRUB从它的命令行或是配置文件中,接到开始 *** 作系统的正确指令,它就寻找必要的引导文件,然后把机器的控制权移交给 *** 作系统。注意在一些文件系统以及文件系统的配置中,可能需要一个15步的文件,用来连接基本引导程序与第二引导程序之间的差异。

举个例子来说,如果第二步中的引导装载程序文件位于一个使用了第一步引导装载程序所不能访问的文件系统的分区中,那么就可能需要指示第一步引导装载程序,从15步文件中载入附加的指令来读取第二步引导装载程序的文件。更多相关的信息,请参考GRUB的信息页。

前面所提到的引导方法被称为直接装载。因为这种方法中使用的是直接装载 *** 作系统的指令,没有用到任何在引导装载程序和 *** 作系统主文件(如内核)之间的中间代码。然而,不同 *** 作系统所采用的引导过程可能会与上面提到的有一些细微的不同。例如,微软的DOS和Windows *** 作系统在安装时,倾趋于完全重写主引导记录,而不是合并当前的主引导记录的配置。这将破坏掉其他 *** 作系统保存在主引导记录中的所有信息,如Red Hat Linux。微软 *** 作系统,还有一些其他的专有 *** 作系统,都是使用一种称为链式装载的引导方法来启动的。在这种方法中,主引导记录仅仅是简单地指向 *** 作系统所在分区的第一个扇区。

GRUB支持直接和链式装载的引导方法。GRUB能用于几乎所有 *** 作系统,绝大多数流行的文件系统,以及几乎所有的系统BIOS所能识别的硬盘。

GRUB的特性

GRUB包含许多特性,这使得GRUB比其他可用的引导装载程序更加优越。下面列出一些比较重要的特性:

GRUB在x86机器上,提供一个真正基于命令行的,先于 *** 作系统(pre-OS)的环境。它对于用确定的选项装载 *** 作系统或收集系统信息方面,提供了最大程度的适应性。许多非x86的体系结构已经使用先于 *** 作系统环许多年了,它提供控制系统如何从一个命令行引导。当LILO或其他x86引导装载程序使用了一些命令特性的时候,GRUB已经包含了许多这方面的特性。

GRUB支持逻辑块寻址(LBA)方式。LBA将用于寻找驱动器上文件的地址转换工作置于驱动器的硬件中,它被用在许多IDE和所有的SCSI硬盘中。在使用LBA之前,硬盘驱动器遇到一个1024柱面的限制,即BIOS不能找到在1024柱面后的文件(比如一个引导装载程序或是内核文件)。只要系统BIOS能支持LBA模式(大多数都支持),那么LBA就允许GRUB超越1024柱面的限制,引导 *** 作系统。

GRUB的配置能在每次系统引导时被读取。这就避免了用户每次改变引导选项时都要重写一次主引导记录。大多数的引导装载程序都不能很老道地读取配置文件,并使用它们来设置引导选项。比如说,用户必需改变一个LILO的配置文件,然后运行一个命令将新的配置数据重写回系统的主引导记录。这种方法比GRUB所采用的方法更加危险,因为一个错误配置的主引导记录将让系统无法引导。在使用GRUB中,如果说配置文件被错误配置并且引导,那它也仅仅简单地转到一个默认的命令行,允许用户手工输入命令来运行 *** 作系统。除开更新系统引导的第一步、第二步、或是菜单配置文件的位置,主引导记录是不会被触及到的,而这种情况是很少发生的。

注意:

当GRUB的配置文件发生改变时,没有必要重新启动GRUB。所有的改变都能被自动地检测到。如果GRUB被重新启动,那么用户将退回到命令行方式的GRUB外壳下。

安装GRUB

如果在Red Hat Linux的安装过程中,GRUB没有被安装,下面将说明如何安装它,并将它设为默认的引导装载程序。

注意:如果LILO已经被安装,并且是当前的系统引导装载程序,那并没有必要为了使用GRUB而删除它。GRUB一旦安装后,将做为系统默认的引导装载程序。

首先,获取最新可用的GRUB包。在Red Hat Linux安装光盘上的GRUB包也可以使用。

其次,在一个外壳提示下,运行命令/sbin/grub-install ,这里的是GRUB将要被安装的位置。比如说:/sbin/grub-install /dev/hda

最后,重新引导系统。GRUB图形引导装载菜单将出现。

二、GRUB的术语

在使用GRUB前,最重要的事情之一就是理解这个程序是如何引用设备的,如系统硬盘驱动器、分区等。对于配置GRUB实现多 *** 作系统的引导,这方面的信息是很重要的。

设备名称

系统的第一个硬盘驱动器被GRUB称为(hd0)。在它上面的第一个分区被称为(hd0,0),第二个硬盘驱动器上的第5个分区被称为(hd1,4)。通常使用GRUB时,文件系统习惯上采用下面的方式命名:

(,)

在设备命名中,圆括号和逗号是很重要的。指出是一个硬盘(hd)还是一个软盘(fd)被指定。

是依照系统BIOS而确定的设备号,从0开始。基本IDE硬盘被标为0,第二IDE硬盘被标为1。这个排序大体上等同于linux内核用字母安排设备的顺序,只是在hda中的a变成了0,hdb中的b变为了1,依次类推。

注意:GRUB用于设备的命名系统是从0开始,而不是1。这常常是GRUB新手们常犯的最普遍的错误。

指在一块硬盘上一个分区的编号。类似于,分区的编号也是从0开始。虽然大多数的分区可以用数字指定,但是如果系统使用的是BSD分区,那么它们还是用字母来指定,如a或c。

GRUB在命名设备和分区时,使用下面的规则:

系统使用IDE硬盘或SCSI硬盘,都没有关系。所有的硬盘都是用hd开始。软盘用fd开头。

当指定整个硬盘,不考虑它的分区时,简单地将逗号和分区编号取消即可。当告诉GRUB配置一个特定硬盘的主引导扇区时,这一点很重要。比如,(hd0)指定第一个设备,(hd3)指定第四个设备。

如果一个系统有多个驱动设备,知道由BIOS确定的驱动器顺序就很重要了。如果系统只有IDE或SCSI驱动器,那是相当简单的。但是如果有多个驱动器混合时,这就变得令人混乱了。

文件名称

当在GRUB中输入包括文件的命令时,比如在多 *** 作系统中使用一个菜单列表,文件名必须直接在设备和分区后指定。一个绝对文件名的格式如下:

(,)/path/to/file

大多数的时候,用户可以通过在分区上的目录路径后加上文件名来指定文件。这种方法是直接了当的。

另外,我们也可以将不在文件系统中出现的文件指定给GRUB,比如在一个分区最初几块扇区中的链式引导装载程序。为了指定这些文件,需要提供一个块列表(blocklist),由它来一块一块地告诉GRUB文件在分区中的位置。当一个文件是由几个不同的块组合在一起时,需要有一个特殊的方式来写块列表。

每个文件片断的位置由一个块的偏移量以及从偏移点起始的块数来描述,这些片断以一个逗号分界(comma-delimited)的顺序组织在一起。

考虑下面的块列表:

0+50,100+25,200+1

上面这个块列表告诉GRUB使用一个文件,这个文件起始于分区的第一块,使用了第0块到第49块,第99块到124块,以及第199块。

当使用GRUB装载诸如微软Windows这样采用链式装载方式的 *** 作系统时,知道如何写块列表是相当有用的。如果从第0块开始,那么可以省略块的偏移量。作为一个例子,当链式装载文件在第一硬盘的第一个分区时,可以使用下面的命名:

(hd0,0)+1

下面给出一个带类似块列表名称的chainloader命令。它是在设置正确的设备和分区作为根后,在GRUB命令行中给出的。

chainloader +1

GRUB的根文件系统

一些用户常困惑于GRUB中根文件系统(root filesystem)这一术语的用法。GRUB的根文件系统与Linux的根文件系统是没有关系的,这一点需要记住。

GRUB的根文件系统是用于一个特定设备的根分区。GRUB使用这个信息来挂入(mount)这个设备并从它上面载入文件。

在Red Hat Linux中,一旦GRUB载入它自己的包含Linux内核的根分区,那么kernel命令就可以将内核文件的位置作为一个选项来执行。一旦Linux内核引导,它就设定自己的根文件系统,此时的根文件系统就是大多数人用来与Linux联系的了。最初的GRUB根文件系统以及它的挂入都被去掉,它们仅存在于用来引导内核文件。

关于根和内核命令的更多信息,可以参考后面的命令部分。

三、GRUB的接口

GRUB主要有三个强大的接口,它们提供了不同级别的功能。每个接口都允许用户引导 *** 作系统,甚至可以在处于GRUB环境下的接口之间移动。

菜单接口

如果GRUB是由Red Hat Linux的安装程序自动配置的,那么它默认的显示接口是菜单接口。在系统第一次启动后,一个 *** 作系统或内核的菜单(事先已经用它们各自的引导命令配置好)将一个按名称排列的列表保存在这个接口中。使用箭头键选择一个非默认选项,然后按回车键来引导它。如果不是这样,一个记时器可能已经被设置,那么GRUB将启动装载那个默认的选项。

在菜单接口上,按[e]键,对高亮菜单项中的命令进行编辑。按[c]键载入一个命令行接口。

菜单项目编辑器接口

在引导装载菜单中按[e]键,就进入了菜单项目编辑器。用于项目的GRUB命令就显示在这里。在引导 *** 作系统前,用户可以更改这些命令,添加(加在当前行后面,用[o]键;加在当前行前,用[0]),编辑(用[e]键),删除(用[d]键)。

在所有的改变都完成后,用[b]键来执行这些命令,并引导 *** 作系统。[Esc]键来放弃这些修改,将重新入标准的菜单接口。[c]键用来载入命令行接口。

命令行接口

命令行是GRUB最基本的接口,但它也是被授予了最大控制能力的接口。在命令行接口中,输入任何相关的GRUB命令,再回车就可以执行了。这个接口的功能有点类似于shell的功能,比如[Tab]键完成,前后文提示,输入命令时的[Ctrl]键组合,如[Ctrl]-[a]移到行的开头,[Ctrl]-[e]移到行的结尾。另外,箭头键,[Home],[End],[Delete]键与bash shell中一样用法。

接口使用的顺序

当GRUB环境开始载入第二步引导装载程序时,它寻找自己的配置文件。当找到配置文件后,它使用这个配置文件建立一个要载入的 *** 作系统的菜单列表, 然后显示引导菜单接口。

如果配置文件没有被找到,或者如果配置文件不能读取,那么GRUB将载入命令行接口,以允许用户手工输入必要的命令来启动 *** 作系统。

如果配置文件不是正确的,那么GRUB将显示出错误,并请求输入。这点是很有帮助的,因为用户将能够看到问题发生在文件中的什么地方,并修复它。按下任意键,重新载入菜单接口,根据GRUB报告的错误,编辑菜单选项并纠正问题。如果这个修正失败了,那么错误将被报告,且GRUB将再次开始。

四、GRUB的命令

GRUB包含了许多不同的命令,它们可以在命令行接口中以交互的方式执行。其中的一些命令能接在命令名后面的选项,这些选项用空格隔开。

下面的列表给出了最有用的一些命令:

boot - 引导先前已经被指定并载入的 *** 作系统或链式装载程序。

chainloader - 将指定的文件作为一个链式装载程序载入。为了获取在一个指定分区第一扇区内的文件,使用+1作为文件名。

displaymem - 显示当前内存的使用情况,这个信息是基于BIOS的。这个命令有助于确定系统在引导前有多少内存。

initrd - 使用户能够指定一个在引导时可用的初始RAM盘。当内核为了完全引导而需要某些模块时,这是必需的。

install p - 安装GRUB到系统的主引导记录。这个命令允许系统重启时出现GRUB接口。

警告:install命令将覆盖主引导扇区中的其他信息。如果命令被执行,那么除了GRUB信息之外的其他用于引导其他 *** 作系统的信息都将丢失。在执行这条命令前,确定你对它有正确的了解。

这条命令可以用几种不同的方式进行配置。然而,它都要求指定。表示一个设备,分区和文件,在那里可以找到第一个引导装载程序的映象,比如(hd0,0)/grub/stage1。另外,也指定了第一步引导装载程序应该被安装的硬盘,如(hd0)。

选项告诉第一步引导装载程序第二步引导装载程序位于什么地方,例如(hd0,0)/grub/stage2。p选项告诉install命令菜单配置文件被指定在部分,比如说(hd0,0)/grub/grubconf。

kernel - 当使用直接载入方式引导 *** 作系统时,kernel命令指定内核从GRUB的根文件系统中载入。

options选项是跟在kernel命令后面,在内核载入时传给内核。

在Red Hat Linux中,一个kernel命令的例子看起来象下面的形式:

kernel /vmlinuz root=/dev/hda5

上面这行表明了vmlinuz文件是从GRUB的根文件系统载入的,如(hd0,0)。同时,一个选项也被传给了内核。它指出当Linux内核载入时,内核的根文件系统应该是位于hda5,第一个IDE硬盘的第五个分区。如果有必要的话,多个选项可以被放在这个选项后面。

root - 将GRUB的根分区设置成特定的设备和分区,比如说(hd0,0)。并挂入这个分区,这样文件可以被读取。

rootnoverify - 做root命令同样的事情,只是不挂入分区。

除上面所述外,还有更多的命令可用。输入info grub,得到一个所有命令的完全列表。

五、GRUB的菜单配置文件

配置文件在GRUB菜单接口中,创建用于引导 *** 作系统的列表。配置文件可以允许用户选择执行事先设置好的一组命令。这些命令既包括前面给出的命令,也包括一些只用于配置文件的命令。

配置文件的专用命令

下面这些命令只用于GRUB的菜单配置文件:

color - 设定在菜单中使用的颜色,一种是作为前景色,一种作为背景色。可以简单地使用颜色名称,如red/black。比如:

color red/black green/blue

default - 默认项目的标题名称。如果菜单接口超时,那它将被载入。

fallback - 当这个命令被使用时,如果第一次尝试失败,那么这个项目的标题名称将被试用。

hiddenmenu - 这个命令被使用时,它不显示GRUB菜单接口,在超时时间过期后载入默认项。用户通过按[Esc]键,可以看到标准的GRUB菜单。

password - 这个命令被使用时,它可以防止不知道口令的用户编辑菜单的项目。

作为附加选项,可以在后面指定一个后备的菜单配置文件。因此,如果口令被知道,GRUB将重新启动第二步的引导装载程序,并使用这个后备的配置文件来建立菜单。如果这个后备文件不在命令中指出,那么知道口令的用户能够编辑当前的配置文件。

timeout - 这个命令设定了在GRUB载入由default命令指定的项目前的时间间隔,以秒为单位。

splashimage - 它指定在GRUB引导时所使用的屏幕图像的位置。

title - 设定用来装载一个 *** 作系统的一组特定命令的标题。

字符#用来在菜单配置文件放置注释。

配置文件的结构

设置GRUB菜单接口全局参数的命令被放在文件的顶部,接下来的是用于各个 *** 作系统引导的不同项目。

一个非常基本的用于引导Red Hat Linux或Microsoft Windows 2000的GRUB菜单配置文件可能如下所示:

default=linux

timeout=10

color=green/black light-gray/blue

# section to load linux

title linux

root (hd0,1)

kernel /vmlinuz root=/dev/hda5

boot

# section to load Windows 2000

title windows

rootnoverify (hd0,0)

chainloader +1

这个文件告诉GRUB建立一个以Red Hat Linux为默认 *** 作系统的菜单,设定10秒后自动引导。这里给出了2个部分,每个部分对应于一个 *** 作系统项目,每个部分都包含了指向 *** 作系统硬盘分区表的命令。

在下面的附加资料中,将列出如何使用GRUB引导多种 *** 作系统的参考资料。

六、GRUB的附加资料

这个部分只是对GRUB以及它的许多选项作一个介绍。如果想要更多的了解GRUB是如何工作的、如何在其他任务中配置它来引导非Linux *** 作系统,可以参考下面列出的一些资料。

安装文档

/usr/share/doc/grub-090 - /usr/share/doc/grub-090是GRUB文档在系统上的目录。

在一个shell提示下,输入man grub命令可以查看GRUB的手册,它包括一个装载GRUB shell时所使用的选项的列表。

在一个shell提示下,使用info grub命令可以得到GRUB的info页,它包括一个指南,一个用户参考手册,一个程序员参考手册,以及一个关于GRUB和它自己用法的FAQ文档。

有用的一些站点

>

如何使用GRUB引导 *** 作系统进行自定义多启动

本文主要内容是使用GRUB来引导目前的绝大部分的系统,包括Windows、linux、bsd、UNIX、OSX等,对于其中涉及系统启动原理和硬盘工作原理部分都是来自于资料和个人理解,难免有错漏之处,请大家多多包涵。关于硬盘结构构成的部分就不附上了。

我们日常使用得最多的 *** 作系统是Windows,包括Windows xp、Windows 2000、Windows 2003和Windows vista、Windows2008等。Windows目前的系统的引导都是通过ntldr文件来传递引导参数; Windows 2000-Windows 2003是通过bootini文件来作为启动菜单;到了Windows Vista至目前最新的Windows 7是通过bootmgr启动管理器来管理启动菜单,也就是我们看到的启动windows时候给你选择的按F8,安全模式等等那个菜单。当然各个系统的 ntldr文件大小引导参数各不相同,但作用都是一样的。而linux、bsd等类unix系统是通过lilo或者grub等启动菜单直接加载内核(通常 是一个vmlinuz的内核)来启动,和Windows完全不同。

在用grub来引导所有系统之前,先看一下mbr的原理,这样对于使用grub来引导系统有很大帮助。mbr是“主引导记录”master boot record的英文缩写。一个扇区的硬盘主引导记录MBR由4部分组成:

1 主引导程序(偏移地址0000H--0088H)。它负责从活动分区中装载,并运行系统引导程序。

2 出错信息数据区。偏移地址0089H--00E1H为出错信息,00E2H--01BDH全为0字节。

3 分区表(DPT,Disk Partition Table)。含4个分区项,偏移地址01BEH--01FDH。每个分区表项长16个字节,共64字节为分区项1、分区项2、分区项3、分区项4。

4 结束标志字。偏移地址01FE--01FF的2个字节值为结束标志55AA,如果该标志错误系统就不能启动。

mbr占用512个字节,位于硬盘的0柱面、0磁头、1扇区,可以直观的理解为mbr处于硬盘的最开始位置,一切硬盘的 *** 作都是由它开始。mbr不 属于任何一个 *** 作系统,也不能用 *** 作系统提供的磁盘 *** 作命令来读取它。我们通常所用的pqmagic(硬盘分区大师)、pm(partition manager)、diskgen(分区精灵),甚至dos的最常见命令fdisk(fdisk/mbr这个重建分区表的命令相信一些朋友用过了)都是通 过用ROM-BIOS中提供的INT13H(中断)的2号功能来读出该扇区的内容。 512字节的小空间只能作为一个引导符号标志用哪些引导文件来启动,所以MBR可以看做只是一个引导的符号链接。

Windows的启动便是通过修改mbr的第一个数据-主引导程序来实现对Windows的引导,直观的理解就是安装Windows的时候,它会修 改主引导程序,“通知”它 “我是Windows系统”,你只要寻找活动分区,然后找到ntldr,用这个文件来启动就好了。问题是如果是多类型系统的硬盘或者多样系统多硬盘混合的 硬盘,那就没辙了。Windows/dos的启动叫做链式启动,它不能直接启动linux,只能通过婉转的方式在bootini中加入对grub的支 持,再间接启动linux/bsd等。我们通常所用的矮人工具箱,或者grub4dos就是属于这一种。

Windows在 vista之前,使用这个方式启动linux配置起来是很简单的事情,但到了vista时代又不同了。微软不再是用bootini来管理启动菜单,而是 通过bootmgr启动菜单管理器。从此修改启动菜单只能通过命令行来修改。当然可以通过vistaboot等有gui界面的软件来修改,问题是经常不能 启动。这是个“划时代”的愚蠢作品。首先我完全看不出这个bootmgr有何新亮点,一样不支持命令组合,一样不支持直接引导类unix系统,一样不支持 虚拟光驱,对于这么一个产品,只能说它是个废物,目的只是为了加速grub进入电脑玩家的视野。

我便是因为Windows vista开始的bootmgr超级废物才决心去研究一下grub这个引导软件。grub有自己的命令组合(它的命令解释器很复杂,本人也没有完全掌握所 有的命令),可以随时调试分区启动,不用每次都进入系统去修改启动配置。grub现在已经作为各种linux发行版的标准配置了,甚至越来越多人使用 grub4dos。它是个万能的引导工具。

了解了一些硬盘引导的原理,接下来使用grub引导系统就很好理解了。目前虽然linux也渐渐普及,几个比较好的发行版桌面化也做得非常好,比如 opensuse、ubuntu,但是大多数人使用的还是Windows系统为主。对于linux系统的grub使用和Windows的完全相同。 grub4dos完全是绿色版的。了解过了mbr的简单知识之后,可以知道换个引导工具只需要修改主引导程序。直接解压附件grub4dos到C盘,启动 grubinst_guiexe,如图,如果有多硬盘,务必在磁盘的选项选中需要安装grub4dos的硬盘,包括U盘也可以直接使用grub启动(前 提是把U盘格式化成zip/hd/flopy模式)。一般情况下按照图中的选项配置后重启计算机就会进入grub的菜单。注意的是某些U盘就算使用硬盘模 式或者zip模式格式化之后还是无法直接使用grub-install gui修改其主引导程序,这是只能用命令行安装,加上--skip-mbr-test参数,总命令如下:grubinstexe--pause-- verbose--no-backup-mbr--mbr-disable-floppy --mbr-disable-osbr --skip-mbr-test (hd你自己要安装的硬盘,参考GUI界面的磁盘选择)。

菜单文件menulst可以用编辑器打开。如果用记事本打开行列顺序会错乱。最好是右击文件,用写字板打开。编写menulst之前,先要理解 grub对硬盘和分区的定义。在grub中,第一硬盘为hd0,第一硬盘的第一分区为(hd0,0),接下去类推,而不是由1开始的,如果不知道是第几分 区也不重要,在grub命令的(hd0,按TAB键,就可以列出硬盘的分区列表)。这点对确定linux的根分区很重要,因为根分区是从1开始的。

(1)Windows类系统和osx使用tboot引导:Windows类系统的引导前面已经说过是链式引导,grub支持直接链式引导任意的 Windows系统,也就是本来硬盘的引导顺序是主引导程序-Windows链式引导文件ntldr 变为主引导程序-grub-Windows链式引导文件ntldr 而已,其根本是完全没有变化的。Windows类的引导只需三行,指明分区和加上链接启动。如Windows2003的启动(假设装在第一硬盘第一分区)

titleWindows 2003

root(hd0,0)

chainloader +1

chainloader就是声明链式启动的意思,其他Windows版本也是相同。如果OSX4x86系统是使用tboot来引导,也是属于链式引导,所以也可以这样编写:

title osx

chainloader (hd0,0)/tboot

有的文章指出链式连接启动Windows必须加上makeactive参数,不过只要Windows装在主分区,无论怎么试验,加不加 makeactive参数都是能启动的,反而加上makeactive会频繁修改mbr不是很稳当的做法,个人认为在不使用makeactive无法启动 的情况下再加上这个参数。

需要注意的是,如果是多硬盘环境,务必要加上map参数,因为Windows系统启动只认第一硬盘,比如Windows系统装在第二硬盘第一分区,需要加上map参数,把第二硬盘映射为第一硬盘。

title Windows 2003

root (hd1,0)

map (hd0) (hd1)

map (hd1) (hd0)

chainloader +1

map映射顺序绝对不能搞错,首先要把hd0映射为装系统的盘,然后再把装系统的盘映射为hd0。

出现这个错误一般是因为分区表混乱或者错误,有时在U盘进行HD模式修改后,兼容性不好也会出现。

附件是我自己精简了一下的grub最小化Windows包,纯绿色,加上gui界面很直观,

附件还有一个32位的bootsect,可以把方便把MBR修改回Windows引导,包括NT52(对应WINDOWS XP和WINDOWS2003,通过NTLDR引导)和NT60类型(WINDOWS VISTA以及后续的WINDOWS版本,bootmgr引导)。

中:

(2)linux/bsd类系统的引导

(3)直接链接ISO等映像文件引导……。

有是有几种方法,其实安装ubuntu时系统包有几个引导软件给你选择(忘了叫什么名了),但原理都 是一样的,必须写入MBR,顺便说句,其实改变了硬盘列表也没什么关系,顶多fdisk MBR一下(双系统),然后重新配置一下GRUB

这儿提供几个方法,也许用得上;

因为软件引导法都是要通过MBR的,所儿这儿采用的是“硬件法”

一:dos启动方式:

在第一张光盘的里几个文件拷贝到硬盘的同一个目录里:

dosutils目录:loadlinexe

isolinux目录:initrdimg、vmlinuz

然后在这个目录里建立一个批处理文件xxxbat:

loadlin vmlinuz root=/dev/hdXX

loadlin vmlinuz initrd=initrdimg

(hdXX代表你的linux所在分区!具体是hda1、hda2、要看你安装的分区了。)

启动到dos(不要加载其他驱动、设置),进入那个目录执行批处理文件,应该能进入了!

二:如果你装的是windows和linux的双系统也可以用 WindowsNT loader(NT引导菜单)

例如你安了windowsNT、2000、XP、可以在linux下执行:

dd if=/dev/hdxx of=bootsectlnx count=1

将bootsectlnx拷贝到C:\下。修改C:\bootini,增加一行内容,看上去是这样的:

[boot loader]

timeout=10

default=multi(0)disk(0)rdisk(0)partition(1)\WINNT

[operating systems]

multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft Windows 2000 Professional" /fastdetect

C:\bootsectlnx="Red Hat 9"

下次启动NT(2000、XP)时,可看见选择菜单!

三:用光盘引导,(简单):

用光盘直接引导系统,在boot提示后输入:

vmlinuz root=/dev/hdXX

(hdXX是你要引导的Linux分区。

用grub或者grub2吧,可玩性很大,网上相关的教程也很多。

如果只是要简单的windows mbr调用boot来引导系统,只要用纪事本对系统盘下的boot文件去只读后编辑就好了。

*** 作系统的更新是相当快速的,从DOS到WIN32、95、98、ME、XP。虽然说系统一直在不断进步发展着,但其实每个 *** 作系统都有各自的发展空间,也各有其的优势和劣势。比如WIN98和WIN ME,它们的普遍特点是多媒体性能佳,支持软硬件多,但缺点是系统不够稳定;而诸如WINNT、WIN2000等系统,则有比较好的稳定性和 *** 作性,但对系统要求比较高,不适合一般的初级使用。这时候,很多朋友都会有"鱼和熊掌不可兼得"的感叹。那么,能否将各种 *** 作系统都安装在一台计算机上,并根据自己的需要任意选择呢?当然可以呀,这就是我们接下去要讲的多系统共存。

要让多系统共存,首先要了解一些基本的原理。在上文的分区篇中,我们大概的谈了一下,这里再做一番比较深入的剖析:

*** 作系统是如何引导的呢?当系统加电自检通过以后,硬盘被复位,BIOS将根据用户指定的启动顺序从软盘、硬盘或光驱进行启动。以从硬盘启动为例,系统BIOS将主引导记录读入内存。然后,将控制权交给主引导程序,然后检查分区表的状态,寻找活动的分区。最后,由主引导程序将控制权交给活动分区的引导记录,由引导记录加载 *** 作系统。

对于DOS和WIN9X等 *** 作系统而言,分区引导记录将负责读取并执行IOsys(Windows9x的IOsys)。

首先要初始化一些重要的系统数据,然后就会出现我们非常熟悉的蓝天白云。这时候,Windows将继续进行DOS部分和GUI(图形用户界面)部分的引导和初始化工作。如果系统中安装有引导多种 *** 作系统的工具软件,通常主引导记录将被替换成该软件的引导代码。这些代码将允许用户选择一种 *** 作系统,然后读取并执行该 *** 作系统的基本代码。

对于WINNT/2000来说,则由是NTLDR这个程序负责将其装入内存,或者让用户选择非WINNT/2000 *** 作系统。引导装入程序和多重引导都由一个具有隐含属性的初始化文件bootini控制。在bootini中包含有控制计算机可用的 *** 作系统的设置,引导的缺省 *** 作系统以及应当等待多少时间等信息。

那么,我们的机会在哪里呢?俗话说的好,见缝插针。从计算机引导过程的描述中大家可以发现,我们可以人为的加一干预的地方只有两处,一是设置物理盘的引导次序,二是修改主引导程序的分区表。

(1)多硬盘的多系统共存:如果你采用的是多硬盘的计算机,而且每块硬盘都安装有不同 *** 作系统时,建议你通过在CMOS中指定硬盘的启动次序,实现多 *** 作系统的共存。由于 *** 作系统之间互不影响,所以这种方法完全不受兼容性等其他因素的影响。

(2)单硬盘的系统共存:而如果你只有一块硬盘,并也想在上面安装多个 *** 作系统而相互不受影响,你则必须采用修改主引导程序和分区表的方法来实现。一般有两种方法。一是修改主引导记录,在主引导记录的最后用JMP指令跳到自己的代码上来,从而控制计算机的引导过程;另外一种方法是修改主分区第一个扇区的引导代码,以实现多系统的共存。

注意事项:接下去,我们将教大家如何进行多系统共存的设置。不过,在开讲之前,有一些基本的准则还是要告诉大家的:

1.在计算机上安装另外一个 *** 作系统之前,最好能先制作一张启动盘以备意外之需。

2.每个 *** 作系统必须安装在一个独立的磁盘驱动器或者分区上。

3.如果你要在DOS、WIN95和WIN 2000之间进行多重启动配置,应该最后安装WIN 2000。否则,启动WIN 2000所需要的一些重要文件可能会被覆盖。对于WIN 98和2000之间的双重启动配置,安装 *** 作系统不必按照特定的顺序,对于在WIN 2000和LINUX之间的双重启动配置,应当先安装WIN 2000,并为LINUX保留所需要的磁盘分区。

4.要进行双重启动配置,应该使用FAT文件系统。尽管支持在双重启动中使用NTFS,但这样会提高文件系统的复杂程度。

5.不要在压缩盘上安装WIN 2000,除非该压缩盘是由WIN 2000完成的;如果计划建立WIN 95或WIN 98的双重启动,则不必要对已经压缩的盘进行解压缩。

6.在设置了双重启动的计算机上,如果希望应用程序在两种 *** 作系统上都可以运行,必须在两种 *** 作系统中都进行安装,无法在 *** 作系统之间共享应用程序。

以上就是关于今天上了引导程序:GRUB全部的内容,包括:今天上了引导程序:GRUB、硬盘中的MBR存放引导加载程序,那么引导分区的引导扇区装什么呢、如何使用GRUB引导 *** 作系统进行自定义多启动等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9756097.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存