GNU GRUB(GRand Unified Bootloader简称“GRUB”)是一个来自
GNU项目的多
操作系统启动程序。GRUB是多启动规范的实现,它允许用户可以在
计算机内同时拥有多个
操作系统,并在计算机启动时选择希望运行的操作系统。GRUB可用于选择
操作系统分区上的不同
内核,也可用于向这些
内核传递启动参数。
基本功能
GNU GRUB 和GRUB是GRand Unified Bootloader的缩写,它是一个多重
操作系统启动管理器。用来引导不同系统,如
windows,
linux。
在
X86架构的机器中,Linux、
BSD 或其它
Unix类的
操作系统中GRUB、
LILO 是大家最为常用,应该说是主流。
Windows也有类似的工具NTLOADER;比如我们在机器中安装了
Windows 98后,我们再安装一个Windows XP ,在机器启动的会有一个菜单让我们选择进入是进入Windows 98 还是进入
Windows XP。NTLOADER就是一个多系统启动引导管理器,NTLOADER 同样也能引导Linux,只是极为麻烦罢了。
在
PowerPC 架构的机器中,如果安装了Linux的Powerpc 版本,大多是用yaboot 多重引导管理器,比如Apple机用的是IBM
PowerPC处理器,所以在如果想在Apple机上,安装Macos 和Linux Powerpc 版本,大多是用yaboot来引导多个
操作系统。
因为X86架构的机器仍是
主流, 所以GRUB和LILO 仍然是我们最常用的多重
操作系统引导管理器。
引导过程
由硬盘启动时,BIOS通常是转向第一块硬盘的第一个
扇区,即
主引导记录(MBR)。
装载GRUB和
操作系统的过程,包括以下几个操作步骤:
装载记录
基本引导装载程序所做的的事情就是装载第二引导装载程序。
装载Grub
这第二引导装载程序实际上是引出更高级的功能,以允许用户装载一个特定的
操作系统。
装载系统
如
linux内核。GRUB把机器的控制权移交给
操作系统。
不同的是,
微软操作系统都是使用一种称为链式装载的引导方法来启动的,
主引导记录仅仅是简单地指向操作系统所在分区的第一个
扇区。
设备名称
GRUB不区分IDE硬盘和SCSI硬盘,统一使用hdx来标识。
软盘使用fdx来标识,x为硬盘号,x从0开始计数。
GRUB使用(hdx,y)标识某个硬盘中的某个分区,x表示硬盘号,y表示分区号,x和y都从0开始计数。
在windows中,系统的第一个硬盘驱动器表示为(hd0),其中的第一个分区表示为(hd0,0),以此类推。
(hd0,0)。表示C盘。
(hd0,4)。表示D盘。当然这里指的是(第一个
逻辑分区,如果D盘也是
主分区,应该写成hd0,1)
由于
主分区只能有四个,所以第一硬盘的四个主分区分别用(hd0,0)~(hd0,3)来表示;
逻辑分区则从(hd0,4)开始算,即第一
逻辑分区用(hd0,4),第二逻辑分区用(hd0,5)来表示,依次类推。
一般windows的分区都是一个
主分区,其余是
逻辑分区。因此C盘用(hd0,0),D盘用(hd0,4)来表示。
光盘用(fd)标识,第一个软驱用(fd0)表示。
在Linux系统中,如ubuntu,(hdx,y)中的y是从1开始计数的。第一逻辑分区用(hd0,5),第二逻辑分区用(hd0,6)来表示
文件系统
一些用户常困惑于GRUB中根文件系统(root filesystem)这一术语的用法。GRUB的根文件系统与Linux的根文件系统是没有关系的!
接口
当GRUB环境开始载入第二步引导装载程序时,它寻找自己的配置文件(menu.lst)。当找到配置文件后,它使用这个配置文件建立一个要载入的操作系统的菜单列表, 然后显示引导菜单接口。 如果配置文件没有被找到,或者如果配置文件不能读取,那么GRUB将载入命令行接口。
菜单接口
在菜单接口上,按[e]键,对高亮菜单项中的命令进行编辑。按[c]键载入一个命令行接口。 添加(加在当前行后面(用[o]键),加在当前行前(用[0]键),编辑(用[e]键),删除(用[d]键)。
在所有的改变都完成后,用[Enter]键来执行这些命令,并引导操作系统。[Esc]键来放弃
命令行接口
命令接口
以下是几个常用命令:
boot - 引导先前已经被指定并载入的操作系统或链式装载程序。
chainloader - 将指定的文件作为一个链式装载程序载入。为了获取在一个指定分区第一 扇区内的文件,使用+1作为文件名。
displaymem - 显示当前内存的使用情况,这个信息是基于BIOS的。这个命令有助于确定系统在引导前有多少内存。
initrd - 使用户能够指定一个在引导时可用的初始RAM盘。当内核为了完全引导而需要某些模块时,这是必需的。
install p - 安装GRUB到系统的
主引导记录。这个命令允许系统重启时出现GRUB接口。
(警告:install命令将覆盖
主引导扇区中的其他信息。如果命令被执行,那么除了GRUB信息之外的其他用于引导其他操作系统的信息都将丢失。在执行这条命令前,确定你对它有正确的了解。)
kernel - 当使用直接载入方式引导操作系统时,kernel命令指定内核从GRUB的根文件系统中载入 。
比如 kernel /vmlinuz root=/dev/hda5
Vmlinuz是内核。。它从GRUB的根文件系统载入的,如(hd0,0)。同时,后面一个选项被传给内核。它指出当
Linux内核载入时,内核的根文件系统应该是位于hda5,第一个IDE硬盘的第五个分区。
命令
color - 设定在菜单中使用的颜色,一种是作为前景色,一种作为背景色。可以简单地使用颜色名称,如red/black。比如:
color red/black green/blue
default - 默认项目的标题名称。如果菜单接口超时,那它将被载入。
fallback - 当这个命令被使用时,如果第一次尝试失败,那么这个项目的标题名称将被使用。
hiddenmenu - 这个命令被使用时,它不显示GRUB菜单接口,在超时时间过期后载入默认项。用户通过按[Esc]键,可以看到标准的GRUB菜单。
timeout - 这个命令设定了在GRUB载入由default命令指定的项目的时间间隔,以秒为单位。
splashimage - 它指定在GRUB引导时所使用的屏幕图像的位置。
title - 设定用来装载一个操作系统的一组特定命令的标题。
字符#用来在菜单配置文件放置注释。
手动启动
有时候grub出现问题,不能通过启动选项启动目标操作系统,以启动一个linux为例
按c键切换到命令行模式
grub> root (hd0,0) 设置根目录为第一硬盘的第一个分区
grub> kernel /boot/vmlinuz 设置内核文件,有的linux发行版会有一个名为wmlinuz的软连接指 向真正的内核文件
grub> initrd /boot/initrd 设置initrd文件,也有可能用软连接代替真正的文件名
grub> boot (hd0,0) 从硬盘启动
以上命令可以用tab键补全 根据实际情况有所不同
例子
这是个非常基本的用于引导Red Hat Linux或Microsoft Windows 2000的GRUB菜单配置文件可能如下所示:
安装wingrub
在安装
软件到机器中时,就直接按它默认的安装,下一步、下一步就好了
在安装过程中会出现一个Base Setup的提示窗口,ChooseDrive即是grub配置文件的存放位置,一定要选一个(一般选择第一个,提醒你注意软件的标题栏,不同的选择会显 示的不一样),如果你选择cancel,则不会有menu.lst 文件产生(这个文件很重要),Base Setup提示窗口下面的copy stage files和keep old directory不点击也可以,它们的区别就是前者把grub文件夹中的文件和menu.lst一起放在新产生的grub文件夹下,而后者新产生的 grub文件夹中只有menu.lst ,如果不点击则只会产生只含menu.lst文件的grub文件夹,都点击则是copy stage files那种情况。
安装grub
GRUB的一个重要的特性是安装它不需依附一个操作系统;但是,这种安装需要一个Linux副本。由于单独工作,GRUB实质上是一个
微型系统,通过链式启动的方式,它可以启动所有安装的主流
操作系统。
与LILO不同,修改GRUB的配置文件后,不必把GRUB重新安装到MBR或者某个分区中。
在Linux中,“grub-install”命令是用来把GRUB的步骤1安装到MBR或者分区中的。GRUB的配置文件、步骤2以及其它文件必须安装到某个可用的分区中。如果这些文件或者分区不可用,步骤1将把用户留在命令行界面。
GRUB配置文件的文件名和位置随系统的不同而不同;如在Debian和OpenSUSE中,这个文件为/boot/grub/menu.lst, 而在Fedora和Gentoo中为/boot/grub/grub.conf。Fedora提供了一个从/etc/grub.conf到/boot/grub/grub.conf的符号链接。
除了硬盘外,GRUB也可安装到光盘、软盘和闪存盘等移动介质中,这样就可以带起一台无法从硬盘启动的系统。
软件使用
打开wingrub程序,选择 tools菜单,然后点击Install grub ,弹出一个对话框;如下图所示:
这里面有两个方法供选择;
A) 直接单击Boot From MBR Partion ,然后单击右边的下拉菜单;选择要把Linux系统安装在哪个分区中,再单击最下边install按钮。
在下拉列表框中,如果看到(hd0,0)或者(hd0,1)等,则选(hd0,0);如果只看到(hd0,1),说明计算机硬盘的第一个分区是NTFS的
文件格式,如果看不到什么下拉列表框,就使用下面的办法,
B)选择Systerm Device ,在右边的下拉列表框中,选C:然后再选中BOOT FROM 下的BOOT.INI 单选按钮,在Title 中输入mygrub ;最后在 Time OUT 中输入30;
单击Install按钮,这样grub就安装好了。
A和B还是有一些区别,A的方法是开机就能看到所有在menul.lst中的系统;而B,则必须按一下刚才所填写的mygrub ,然后才能看到在menu.lst所提到的系统。
【个人首选B项,因为A安装的grub会覆盖掉原有的启动引导程序,即重写了MBR,而B则是把原有的引导程序修改了,加了一个启动项。如果你想安 装两个系统,Windows为主,Linux为副,那么B就可以更好的实现。当然,在安装Linux时也要注意安装程序中有一个“配置高级引导装载程序选 项”就是对grub的安装位置进行设置。
▲▲▲配置启动文件▲▲▲
运行wingrub,单击菜单中的tools菜单选择Partition List(分区列表),在这里能了解到硬盘的分区情况,比如可能看到 FAT32的分区是(hd0,1)等,要把Linux的
光盘映像文件保存在fat32分区中;通过这个能知道把光盘ISO存放到(hdX,Y)了,也能知 道(hdX,Y)所对应的Windows分区是C,是D,还是E。配置启动文件的过程如下:
1]先找一个FAT 32的分区,把下载下来的ISO直接放到分区的下面,不要放在任何目录中,这个分区里也不要存放其他文件。
2]在这个分区中,再新建一个文件夹,命名为linux,从下载的第一张Linux系统安装ISO文件isolinux中抽取 vmlinuz 和 initrd.img 两个文件,放到linux目录中: 注意只放这两个文件,不要再存放其他内容,如果放进其他的内容,有可能出现安装程序中途退出的情况。
注意:抽取文件可以使用WinRAR
软件,另外,输入文件夹时文件夹名是小写;在输入menu.lst 文件名时,要用
半角英文,标点之类的全是半角;title root kernel initrd 全是小写的英文;如果文件夹或文件名输入出错,在安装时安装程序会提示找不到文件。
编辑menu.lst
当打开menul.lst 时,可能里面已经有内容了,比如有个 timeout 10 ,如果没有则可以自己写上(这是开机等待进入系统的时间,为时10秒)。
root [开机根目录 / 所在的磁盘代号]
kernel [开机档案的所在地完整档名] [root=/dev/硬盘代号]
范例:
设定上面就是这样而已!所以,开机完毕之后,请将您的 kernel 文件名称(完整档名)与开机的根目录所在的磁盘代号记忆一下,那么下次就可以手动设定开机设定项目呢!但如果是 windows 方面的设定时,那就直接使用 chainloader 这个项目即可,有点像这样:
chainloader [硬盘代号] +1
范例:
menu.lst 文件的配置引导说明,通过menu.lst ,可以配置 Linux的启动和引导:也可以引导已经安装好的Linux系统。语法结构有以下的四条,举例如下:总共有两个书写格式,任选其一;
格式一:最简单:
title 行是在在开机时所看到的菜单,显示的就是 fc4install ,它要加在 title 的后面。title是必须保留的,它是grub的语法的标签,可以在title 后面写入想要添加的东西,这是可以自己定义的,比如 title fc4setup也是可以的。
root (hd0,1) 行使用 root开头,然后加一个空格,至于用户把vmlinuz和initrd.img 放在哪个分区了,可以打开 wingrub,单击tools菜单选择partioinlist (分区列表),在打开的对话框中查到。
kernel 命令行以kernel 开头,然后加一个空格,并在其后给定vmlinuz文件存放路径,这个命令行的作用是告诉计算机将使用(hd0,1)分区下的linux目录中的kernel 内核来启动;
initrd 行和 kernel 行类似;主要用于指明安装的文件放在哪个分区和哪个目录中,即在该命令后指定文件的
安装目录。
基本的说明已经在上表当中了,这里需要在说明的是关于 default 开机档的计算。如果今天我有四个开机设定档,那么 default 算的是什么呢?就是『排序』啦!假如我底下依序出现的设定档 title 分别是 linux, linux-test, windows, failsafe 的话,那么开机的时候, grub 的选单就会显示:
其中,linux 就是 0 ,而 failsafe 就是 3 ,如果您要调整开机时后的选单顺序,就在 /boot/grub/menu.lst 修改一下他们的顺序即可!
格式二:比较麻烦一点:理解着看吧;
title 这行就是我们在开机时,所看到的菜单 ,显示的就是 FC4install ,要加在 title 的后面,title是必须保留的,是grub的语法的标签 ,我们可以在title 后面写我们想要加的东西,这是自己可以定义的,比如 title fc4setup也是可以的;
root 这行,在本例中是 root (hd0,1),这行就是我们打开 wingrub,点tools =》partioinlist (分区列表) 中查到的;我们通过这个知道我们把解压出来的 vmlinuz和initrd.img 所处的分区和路径;比如我的机器,我查到的是 (hd0,1),对应的Windows FAT 32分区是D,事实上,我的确把四个
光盘映象都放在了 (hd0,1),也就是win中所看到的D盘; 并且我同样也把提取出来
vmlinuz 和initrd.img 放在了(hd0,1)中的linux目录中; 不知道自己存放提取出来的内容放在哪个分区了,就用 打开 wingrub,点tools =》partioinlist (分区列表) 中查看;
kernel 这行;注意在 kernel后面有个空格,接着写 vmlinuz所处的位置 ,在哪里呢?在 /dev/hda2,这个/dev/hda2是怎么来的?是由(hd0,1)而来的,如果您的显示的是 (hd0,2),那root=/dev/hda3,明白了吧,就是(hdX,Y)中的Y+1=Z,就是/dev/hdaZ ,再举一例:比如我们把提出来的vmlinuz 和initrd.img 放在了 (hd0,5)的linux 目录中,这时应该写 root=/dev/hda6 ;
有可能有的弟兄说,我放在了 (hd1,6)的分区,这怎么办?这个也不难,我们这里面的所提到的 (hdX,Y),中的X可能是0 、1、2等 ,所以对应的是 hdaZ ,hdbZ,hdcZ ,如果您看到的是(hd1,6) ,所以对应的是/dev/hdb7 。
initrd 这行,原样搬上就好;
完整menul.lst 应该如下:在这之中,引导Linux的,有两种写法,都在里面,哪种都是可以启动引导安装的;
这是第一种写法
这是第二种格式的写法
编辑好后,就可以进入引导安装,此时,如果系统仍然产生错误,例如出现找不到文件之类的提示。就需要查看文件存放路径是否正确,如果能够引导进入安装,则 需要选择ISO映像所存放的FAT32磁盘的分区,然后按Enter键执行安装。
在安装过程中,以下的几个情况是要注意的:
1、在FC4的安装过程,安装分区时要自定义,不要让系统自动分区;要自己指定Linux 安装到哪个分区。我们可以在用windows分区工具,分出两个空白区,一个要大一点,最好是10G 以上,另外一个是内存的两倍(对于小内存的机器来说,大内存的机器分上512M 就行了;在安装时,我们要把大的分区用来装系统,点一下那个分区,出现挂载点,选择/ ,然后格式化成 ext3或者 reiserfs 等文件系统;把小一点的分区格式化成swap ,这是Linux的交换区;
当然如果您有未用过的空白区,不用windows分区工具来分也行,在安装过程中,可以用linux的分区工具来划分,点几下鼠标就行了;这是对RH 和/FC 或者 的安装来说的,Madrake 也一样;
2、对于有些系统版本要把ISO抽取出来都放在一个目录中才能进行,比如Slackware 发行版;
3、看到大家反馈的情况,有的弟兄说中途退出与放ISO的分区的下有中文目录或者中文文件有关;如果找不出问题所在,就把ISO放在一个FAT32的空白分区上。
【安装成功后,只用保留文件名为GRLDR的文件,即可实现用Windows引导程序引导Linux。】
▲▲▲安装Fedora▲▲▲
重新启动电脑,就可以启动菜单,选择Fedora的安装启动选项进行安装。