第三章 引导装载程序GRUB,本章目标 了解GRUB引导装载程序作用 了解如何安装GRUB 掌握手动启动GRUB的方法,从Red Hat Linux 7.2起,GRUB(GRand Unified Bootloader)取代LILO成为了默认的启动装载程序。 GRUB,它是Red Hat Linux用来在x86系统上装载操作系统的默认方法。,GRUB的定义,GNU GRUB(GRand Unified Bootloader)是一个将引导装载程序安装到主引导记录的程序,主引导记录是位于一个硬盘开始的扇区。它允许位于主引导记录区中特定的指令来装载一个GRUB菜单或是GRUB的命令环境。这使得用户能够开始操作系统的选择,在内核引导时传递特定指令给内核,或是在内核引导前确定一些系统参数(如可用的RAM大小)。,当一个x86机器启动后,系统BIOS开始检测系统参数,如内存的大小、日期和时间、磁盘设备、以及这些磁盘设备用于引导的顺序等。 通常情况下,BIOS都是被配置成首先检查软驱或光驱(或两者都检查),然后再尝试从硬盘引导。如果在这些可移动的设备中,没有找到可引导的介质,那么BIOS通常是转向第一块硬盘最初的几个扇区,寻找用于装载操作系统的指令。 这些最初的扇区-主引导记录-开始装载一个预选择操作系统的过程,一个操作系统选项GRUB菜单,或是一个执行特定选项的GRUB命令行接口。,装载GRUB和操作系统的过程,包括以下几个操作步骤: 1、装载基本的引导装载程序,这通常是第一步。基本引导装载程序必须是位于主引导扇区中一个非常小的空间,少于512字节。因此,基本引导装载程序所做的唯一的事情就是装载第二引导装载程序。这主要是归结于在主引导扇区中没有足够的空间用于其它东西了。 2、装载第二引导装载程序,这通常称为第二步。这第二引导装载程序实际上是引出更高级的功能 ,以允许用户装载入一个特定的操作系统。在GRUB中,这步是让用户显示一个菜单或是输入命令。 3、装载在一个特定分区上的操作系统,如linux内核。一旦GRUB从它的命令行或是配置文件中,接到开始操作系统的正确指令,它就寻找必要的引导文件,然后把机器的控制权移交给操作系统。,前面所提到的引导方法被称为直接装载。 这种方法中使用的是直接装载操作系统的指令,没有用到任何在引导装载程序和操作系统主文件(如内核)之间的中间代码。然而,不同操作系统所采用的引导过程可能会与上面提到的有一些细微的不同。,GRUB多重启动管理器,grub 是一个多重启动管理器。grub是GRand Unified Bootloader的缩写,它可以在多个操作系统共存时选择引导哪个系统。 它可以引导的操作系统包括Linux,FreeBSD,Solaris,NetBSD,BeOSi,OS/2,Windows95/98,Windows NT,Windows2000。 它可以载入操作系统的内核和初始化操作系统(如Linux,FreeBSD),或者把引导权交给操作系统(如Windows 98)来完成引导。,grub的特点,grub可以代替lilo来完成对Linux的引导,特别适用于linux与其它操作系统共存情况,与lilo相比,它有以下特点: 支持大硬盘 现在大多数Linux发行版本的lilo都有同样的一个问题:根分区(/boot分区)不能分在超过1024柱面的地方,一般是在8.4G左右的地方,否则lilo不能安装,或者安装后不能正确引导系统。而grub就不会出现这种情况,只要安装时你的大硬盘是在LBA模式下,grub就可以引导根分区在8G以外的操作系统。 支持开机画面 grub支持在引导开机的同时显示一个开机画面。对于玩家来说,这样可以制作自己的个性化开机画面;对于PC厂商,这样可以在开机时显示电脑的一些信息和厂商的标志等。grub支持640x480,800x600,1024x768各种模式的开机画面,而且可以自动侦测选择最佳模式,与Windows那320x400的开机画面不可同日而语。,grub的特点,两种执行模式 grub不但可以通过配置文件进行例行的引导,还可以在选择引导前动态改变引导时的参数,还可以动态加载各种设备。例如你在Linux下编译了一个新的核心,但不能确定它能不能工作,你就可以在引导时动态改变grub的参数,尝试装载这个新的核心进行使用。Grub的命令行有非常强大的功能,而且支持如bash或doskey一样的历史功能,你可以用上下键来寻找以前的命令。 菜单式选择 在lilo下,你需要手工输入操作系统的名字来引导不同的操作系统。而grub使用一个菜单来选择不同的系统进行引导。你还可以自己配置各种参数,如延迟时间,默认操作系统等。,安装grub,如果已经安装了Linux则grub是默认安装的。,GRUB 所使用的硬盘/分区命名约定与 Linux 使用的命名约定不同。 在 Linux 中,第一个硬盘的第五个分区称作 “hda5”。而 GRUB 把这个分区称作 “(hd0,4)”。,设备名称,系统的第一个硬盘驱动器被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。 分区的编号也是从0开始。虽然大多数的分区可以用数字指定,但是如果系统使用的是BSD分区,那么它们还是用字母来指定,如a或c。,GRUB在命名设备和分区时,使用下面的规则: 系统使用IDE硬盘或SCSI硬盘,都没有关系。所有的硬盘都是用hd开始。软盘用fd开头。 当指定整个硬盘,不考虑它的分区时,简单地将逗号和分区编号取消即可。当告诉GRUB配置一个特定硬盘的主引导扇区时,这一点很重要。比如,(hd0)指定第一个设备,(hd3)指定第四个设备。 如果一个系统有多个驱动设备,知道由BIOS确定的驱动器顺序就很重要了。如果系统只有IDE或SCSI驱动器,那是相当简单的。但是如果有多个驱动器混合时,这就变得令人混乱了。,GRUB的根文件系统,GRUB的根文件系统与Linux的根文件系统是没有关系的。 GRUB的根文件系统是用于一个特定设备的根分区。GRUB使用这个信息来挂入(mount)这个设备并从它上面载入文件。 在Red Hat Linux中,一旦GRUB载入它自己的包含Linux内核的根分区,那么kernel命令就可以将内核文件的位置作为一个选项来执行。一旦Linux内核引导,它就设置自己的根文件系统,此时的根文件系统就是大多数人用来与Linux联系的了。 最初的GRUB根文件系统以及它的挂入都被去掉,它们仅存在于用来引导内核文件。,开机,安装了grub开机后会出现一个菜单,列出所有的启动选项。如果设置了启动画面则会显示启动画面,按Esc键则可以取消启动画面显示菜单选项。在菜单下面详细列出如按e是编辑启动命令,按c是使用命令行等。用上下键可以选择菜单项,按回车启动所选项。按e键可以编辑所选项的启动命令,可以用这个功能临时改变你的系统的启动参数。按c键则进入命令行模式。 在命令行模式下可以打入命令直接执行,例如你可以敲入poweroff关闭计算机。按Tab键可以列出所有支持的命令。,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包含了许多不同的命令,它们可以在命令行接口中以交互的方式执行。其中的一些命令能接在命令名后面的选项,这些选项用空格隔开。,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/grub.conf。,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 - 这个命令被使用时,它可以防止不知道口令的用户编辑菜单的项目。,timeout - 这个命令设置了在GRUB载入由default命令指定的项目前的时间间隔,以秒为单位。 splashimage - 它指定在GRUB引导时所使用的屏幕图像的位置。 title - 设置用来装载一个操作系统的一组特定命令的标题。,配置grub,grub启动时会在/etc中寻找一个名字为grub.conf进入命令行模式。 grub.conf是一个文本文件,你可以用任何一个文本编辑器来打开它。每一行代表一个配置命令,如果一行的第一个字符为井号“#“则这一行为注释,可以简单地用增加或减少注释行来改变配置。,编辑grub.conf,一般会有以下各行 timeout second 设定在second秒之后引导默认的操作系统。默认是timeout 10,就是10秒没有其他指令就引导系统,如果设成-1,则grub会一直等待直到用户选择一个选项为止。 default num 默认启动第num+1行选项,也就说default=0则默认启动菜单第一行的操作系统,default=1则启动第2行的系统,如此类推。 splash pathname/filename 指出开机画面的文件所存放的路径和文件名,如 splash /boot/logo/800x600x8.img 是指用在/boot/logo路径下的800x600.img文件作为开机画面。 title OSname title 后面的字符就是你在菜单项上所看见的选项,你可以写上操作系统的名字和描述,如用 title BluePoint Linux, Single Mode 代表这一选项是引导蓝点Linux的单用户模式。,title BluePoint Linux, Default Mode root (hd0,1) kernel /boot/vmlinuz vga=auto root=/dev/hda2 hd0是指第一个硬盘(主硬盘) (hd0,1)是指第一个硬盘的第二个分区。 kernel /boot/vmlinuz 是指出Linux核心的路径在/boot/vmlinuz中。vga=auto 是设定显示模式,root=/dev/hda2是指把第一个硬盘的第二个分区作为根挂载点(“/“)。,title Microsoft Windows root (hd1,0) chainloader +1 root (hd1,0)这是指第二个硬盘(从硬盘)上第一个分区 chainloader +1 装入一个扇区的数据然后把引导权交给它。,
展开阅读全文