科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Linux操作系统GRUB引导程序配置方法大全(1)

Linux操作系统GRUB引导程序配置方法大全(1)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

计算机在启动的时候,首先由BIOS中的程序执行自检,自检通过后,就根据CMOS的配置找到第一个可启动磁盘的MBR中的Boot Loader程序(一般在启动盘的第一个物理扇区,占416字节),并把控制权交给Boot Loader,由Boot Loader进一步完成操作系统内核的加载。

作者:赛迪网 来源:赛迪网 2007年10月8日

关键字: 配置 Grub 操作系统 Linux

  • 评论
  • 分享微博
  • 分享邮件
 

1. GRUB 介绍

计算机在启动的时候,首先由BIOS中的程序执行自检,自检通过后,就根据CMOS的配置找到第一个可启动磁盘的MBR中的Boot Loader程序(一般在启动盘的第一个物理扇区,占416字节),并把控制权交给Boot Loader,由Boot Loader进一步完成操作系统内核的加载。当Boot Loader找到内核之后,就把控制权交给操作系统内核,由内核继续完成系统的启动。

可以看出,Boot Loader 是计算机启动中第二个要执行的程序,它是引导操作系统的关键程序。可以引导操作系统的Boot Loader主要有LiLo、GRUB以及Windows下的MBR程序。其中,GRUB是目前使用最为广泛,并且非常优秀的一款启动引导程序。

(1) GRUB特性

q 提供了图形和文本两种操作接口

q 提供文本格式可手工修改的配置文件

q 支持动态加载需要的模块

q 可以移植到不同的平台上

q 支持国际化语言,如英文,中文,日文汉文等多字节语言

q 跨平台的安装,允许从另一个平台上安装GRUB

q 支持rescue模式,可用于系统无法引导的情况

q 支持多种可执行文件格式,支持各种a.out格式和ELF格式

q 多文件系统识别。如BSD FFS,DOS FAT16,FAT32和Linux ext2fs

q 支持压缩文件的解压缩。能够解压缩被gzip压缩的文件

q 能够使用BIOS所检测到的全部RAM空间

q 支持硬盘的LBA模式,能够访问8GB以外的全部硬盘空间

q 支持网络引导,可以通过TFTP协议从网络上得到操作系统映象文件并引导

(2) GRUB对设备的命名

首先,GRUB对设备的命名必须包含在小括号( )内;其次,GRUB不区分IDE硬盘和SCSI硬盘,统一使用hdx,其中x指定BIOS中硬盘的编号,并从0开始计数,而且IDE硬盘编号小于SCSI硬盘;第三,GRUB用fdx指定软盘设备,x是软盘驱动器号。下面是一些GRUB对设备命名的举例:

q (fd0)表示第1个软盘

q (hd0,1)表示第1个硬盘的第2个分区

q (hd0,0)/boot/vmlinuz表示第1个硬盘的第一个分区下的boot/目录下的vmlinuz文件。如果没有指定某个分区,则表示使用整个设备,否则只使用指定的分区

q (hd0,2,a)专用于FreeBSD,FreeBSD有一个slice概念,把一个分区进一步分为几个slice,此处指明是第1块硬盘的第3个分区中的slice a

(3) GRUB的执行流程

GRUB的工作原理如图5.2所示。当系统加电后,固化在BIOS中的程序首先对系统硬件进行自检,自检通过后,就加载启动磁盘上的MBR,并将控制权交给MBR中的程序(stage1),stage1执行,判断自己是否GRUB,如果是且配置了stage1_5,则加载stage1_5,否则就转去加载启动扇区,接着,stage2被加载并执行,由stage2借助stage1_5驱动文件系统,并查找grub.conf,显示启动菜单供用户选择,然后根据用户的选择或默认配置加载操作系统内核,并将控制权交给操作系统内核,由内核完成操作系统的启动。

从上面的叙述可以看出,GRUB涉及到几个重要的文件:

第一个就是stage1。它被安装在MBR扇区(0面0磁道的第1扇区),大小为512字节(446字节代码+64字节分区表+2字节标志55AA),它负责加载存放于0面0道第2扇区的start程序。

第二个是stage1_5。stage1_5负责识别文件系统和加载stage2,所以stage1_5往往有多个,以支持不同文件系统的读取。在安装GRUB的时候,GRUB会根据当前/boot/分区类型,加载相应的stage1_5到0面0磁道的第3扇区。stage1_5是由start加载的。

第三个是stage2。它负责显示启动菜单和提供用户交互接口,并根据用户选择或默认配置加载操作系统内核。同前两个文件不同,stage2是存放在磁盘上/boot/grub下。

第四个是menu.lst(/boot/grub/grub.conf的链接)。grub.conf是一个基于脚本的文本文件,其中包含菜单显示的配置和各个操作系统的内核加载配置。GRUB根据grub.conf显示启动菜单,提供同用户交互界面。GRUB正是根据用户选择或默认配置和grub.conf的内核配置加载相应的内核程序,并把控制权交给内核程序,使得内核程序完成真正的操作系统的启动。

其它重要文件,GRUB除了上面叙述的主要文件之外,还包括支持交互功能的一些磁盘程序。主要包括/sbin/下的grub、grub-install、grub-md5-crypt和grub-terminfo和/usr/bin/mbchk,以及/boot/grub下的设备映像文件(device.map)和菜单背景图像文件(splash.xpm.gz)。

通过上面的分析总结,可以很容易地看出,GRUB实际上包含两部分,一部分被安装在磁盘的特殊扇区,另外一部分则以文件的形式存在。要让GRUB启动操作系统,就必须首先把GRUB的stage1和stage1_5(根据文件系统自动选择是否安装)安装到磁盘的特殊扇区,另外,在磁盘的/boot/grub下存在有grub.conf、device.map等文件和支持交互的程序,而且这些程序必须在PATH环境变量指定的路径中。具备了这些知识,相信不管是安装、配置、备份或修复GRUB都不是件很难的是情。下面,就来逐个讲解这些知识。

2. 编译安装GRUB

一般情况下,当完成Linux操作系统的安装后,系统中已经安装好了LILO或GRUB引导程序。由于系统出现故障或需要更换LILO为GRUB时,需全新或重新安装GRUB。如何安装和配置GRUB就是下面要介绍的内容。而有时候,GRUB出现了故障,但并不需要重新安装,从后面的内容中,读者也可以读到如何修复GRUB的知识。

(1) 下载安装包

可以从ftp://alpha.gnu.org/gnu/grub/下载GRUB的源码。具体安装方法请参考下面的内容,这里的安装过程都是在RHEL 4中进行的。

(2) 检查是否安装GRUB

#rpm -q grub

如果显示grub-0.95-3.5或其它版本的GRUB的信息,说明系统已经安装了,则执行如下命令首先将其卸载:

#rpm -e grub

(3) 编译源码安装

a.) 编译条件

要编译GRUB的源代码,系统必须具备以下条件:

q GCC2.95或者以上版本

q 安装了GNU Make

q binutils2.9.1.0.23或者个更高版本

q Texinfo 4.0或者更高版本

q Autoconf 2.5x

q Automake 1.7 或者更高版本

b.) 编译安装

这里,假设下载的GRUB源代码为grub-0.95.tar.gz,并放在~/(当前用户的主目录)下。通过编译源代码安装GRUB的基本过程如下:

#tar -zxvf grub-0.95.tar.gz #解压源代码

#cd grub-0.95 #转入grub目录

#./configure #生成Makefile文件

#make install #编译代码并安装

(4) 安装GRUB到MBR

GRUB的工作目录是在/boot/grub下,而make install并没将其安装到/boot/grub。所以,安装完成后要执行如下一些操作:

a) 把/usr/local/share/grub/i386-pc/目录下的所有文件统统拷贝到/boot/grub/目录下

#cp /usr/local/share/grub/i386-pc/* /boot/grub/

b) 在/boot/grub下创建grub.conf文件,并建立一个到grub.conf的软链接menu.lst

#cd /boot/grub

#touch grub.conf

#ln -s grub.conf menu.lst

注意!如果已经存在grub.conf,就最好不要再次创建,需要时直接修改即可。

c) 确认/usr/local/sbin和/usr/local/bin在PATH变量的值中,执行如下命令检查

#env |grep PATH

如果发现/usr/local/sbin和/usr/local/bin不在PATH变量中,可以通过如下命令修改:

#export PATH=$PATH /usr/local/sbin:/usr/local/bin

d) 安装GRUB到MBR

GRUB在启动中,被BIOS调用,只有放在MBR中才可以被调用,所以,GRUB要让BIOS调用,就必须安装在MBR中。实际上是将stage1安装到MBR中,也可能根据文件系统选择安装了stage1_5。下面,提供几个安装GRUB的例子:

#grub-install /dev/hda //将GRUB安装到第1块IDE硬盘的MBR

#grub-install /dev/sda //将GRUB安装到第1块SCSI硬盘的MBR

#grub-install /dev/fd0 //将GRUB安装到软盘

#grub-install /dev/hda1 //将GRUB安装到第1快硬盘的0扇区,当用其它引导程序引导系统时,往往选择这种方式,以免覆盖其它引导程序。

e) 在GRUB的命令行模式下安装GRUB

关于GRUB命令行模式及其操作方法请参考3小节的内容。在系统显示启动菜单时候按下c键,或者系统启动后在命令行执行/usr/sbin/grub程序,都可以进入GRUB的命令行模式。命令行模式下安装GRUB的基本过程如下:

q 指定启动设备

grub>root (hd0,0) #除了root后必须有空格,别的位置均不能有空格!

此处(hd0,0)是指第1块硬盘的第1个分区。如果不能确定包含GRUB的stage1文件的分区,可以通过find指令查找确定:

grub> find /boot/grub/stage1 #查找stage1

GRUB将会查找文件/boot/grub/stage1并显示包含这个文件的设备名,这个设备就是上面要用到的设备。

q 安装GRUB

grub> setup (hd0) #除了setup后必须有空格,别的位置均不能有空格!

这条命令将会在第1块硬盘的MBR安装GRUB,如果不想在MBR安装GRUB,而是希望将GRUB安装在某分区的引导扇区的话,可以用下面的命令安装:

grub> setup (hd0,0) #除了setup后必须有空格,别的位置均不能有空格!

这将会在第1块硬盘的第1个分区的引导扇区安装GRUB。

q 退出GRUB

grub>quit

f) 重启机器,新安装的GRUB生效

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章