现在的位置: 首页 > 综合 > 正文

GRUB 详细介绍

2014年02月12日 ⁄ 综合 ⁄ 共 6873字 ⁄ 字号 评论关闭

 什么是 Grub

  GNU GRUB 是一个多重操作系统启动管理器。用来引导不同系统,如windows,linux。

一.了解一下x86的引导过程

  由硬盘启动时,BIOS通常是转向第一块硬盘最初的几个扇区,即主引导记录。 

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

  1、装载主引导记录。基本引导装载程序所做的唯一的事情就是装载第二引导装载程序。。

  2、装载Grub。这第二引导装载程序实际上是引出更高级的功能 ,以允许用户装载入一个特定的操作系统。

  3、装载在一个特定分区上的操作系统,如linux内核。GRUB把机器的控制权移交给操作系统。

  不同的是,微软操作系统都是使用一种称为链式装载的引导方法来启动的,主引导记录仅仅是简单地指向操作系统所在分区的第一个扇区。

二.grub下的设备名称

  硬盘都是用hd开始。软盘用fd开头。命名和linux不大一样。是从0算起。

  (hd0,0)。表示C盘。

  (hd0,4)。表示D盘。

  文件的表示:( , ) /path/to/file

三.GRUB的根文件系统

   

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

四.grub的接口

  当GRUB环境开始载入第二步引导装载程序时,它寻找自己的配置文件(menu.lst)。当找到配置文件后,它使用这个配置文件建立一个要载入的操作系统的菜单列表, 然后显示引导菜单接口。 如果配置文件没有被找到,或者如果配置文件不能读取,那么GRUB将载入命令行接口。

  

(一)菜单接口


  

  在菜单接口上,按[e]键,对高亮菜单项中的命令进行编辑。按[c]键载入一个命令行接口。 添加(加在当前行后面,用[o]键;加在当前行前,用[0]),编辑(用[e]键),删除(用[d]键)。

  在所有的改变都完成后,用键来执行这些命令,并引导操作系统。[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硬盘的第五个分区。

五.Menu.lst的命令   

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

  color red/black green/blue

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

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

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

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

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

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

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

六。例子

  这是个非常基本的用于引导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) 这里制定了 grub的根。并且挂载。

  kernel /vmlinuz root=/dev/hda5 内核是grub根下的vmlinuz。

  并且内核载入后,内核的根是在/dev/hda5

  boot

  # section to load Windows 2000

  title windows

  rootnoverify (hd0,0) rootnoverify就是指定根,但是不要挂载。

  chainloader +1 使用(hd0,0)的第一扇区来引导。

七.用WinGrub来引导Linux安装

  

1.安装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那种情况。

  

2.软件使用


  

  打开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就安装好了。

  grub的配置文件在c:/grub/中(如果你的不是,则可以从wingrub的标题栏看出),配置文件名为menu.lst ,这个配置文件起到决定性作用;所以一定要编辑好。

    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 全是小写的英文;如果文件夹或文件名输入出错,在安装时安装程序会提示找不到文件。

  

3.编辑menu.lst


  

    当打开menul.lst 时,可能里面已经有内容了,比如有个 timeout 10 ,如果没有则可以自己写上(这是开机等待进入系统的时间,为时10秒)。

    title WindowsXP # 计算机中已经安装了windows系统 ,用来启动windows的,这四行代码如下所示。

    title WindowsXP

    root (hd0,0)

    makeactive

    chainloader +1

  menu.lst 文件的配置引导说明,通过menu.lst ,可以配置 Linux的启动和引导:也可以引导已经安装好的Linux系统。语法结构有以下的四条,举例如下:总共有两个书写格式,任选其一;

  —————————————————————————————————————————————

    格式一:最简单:

    title fc4install

    root (hd0,1)

    kernel (hd0,1)/linux/vmlinuz

    initrd (hd0,1)/linux/initrd.img

    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 行类似;主要用于指明安装的文件放在哪个分区和哪个目录中,即在该命令后指定文件的安装目录。

  —————————————————————————————————————————————

    格式二:比较麻烦一点:理解着看吧;

    title fc4install

    root (hd0,1)

    kernel /linux/vmlinuz ro root=/dev/hda2

    initrd /linux/initrd.img

    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的,有两种写法,都在里面,哪种都是可以启动引导安装的;

  这是第一种写法

    timeout 10  

    title WindowsXP

    root (hd0,0)

    makeactive

    chainloader +1

    title fc4install

    root (hd0,1)

    kernel (hd0,1)/linux/vmlinuz

    initrd (hd0,1)/linux/initrd.img

  这是第二种格式的写法

    timeout 10

    title WindowsXP

    root (hd0,0)

    makeactive

    chainloader +1

    title fc4install

    root (hd0,1)

    kernel /linux/vmlinuz ro root=/dev/hda2

    initrd /linux/initrd.img

    编辑好后,就可以进入引导安装,此时,如果系统仍然产生错误,例如出现找不到文件之类的提示。就需要查看文件存放路径是否正确,如果能够引导进入安装,则 需要选择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的安装启动选项进行安装。

抱歉!评论已关闭.