GRUB 引导程序配置大全

news/2024/7/3 17:43:14

引自:http://blog.chinaunix.net/u/30557/showart_312917.html

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 ,显示启动菜单供用户选择,然后根据用户的选择或默认配置加载操作系统内核,并将控制权交给操作系统内核,由内核完成操作系统的启动。
4-2 GRUB 执行流程
从上面的叙述可以看出, 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) 安装GRUBMBR
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 生效
3. GRUB 的交互操作
为了方便用户交互使用 GRUB GRUB 提供了 交互模式,下面分别作一介绍:
(1) 命令行模式
登陆 Linux 系统后,在命令行中输入 grub ,便可以进入到命令行模式。如图 4-3 所示。进入命令行模式后 GRUB 会给出一个命令提示符 grub> ,此时就可以键入命令,按回车执行。此模式下允许类似于 Bash shell 的命令行编辑功能:
q <C-f> < 右箭头键 > 光标右移一个字符
q <C-b> < 左箭头键 > 光标左移一个字符
q <C-a><HOME> 到这一行的开头
q <C-e> <END> 到行尾
q <C-d> <DEL> 删除光标处的字符
q <C-h> <BackSpace> 删除光标左边的字符
q <C-k> 删除光标右边的所有字符(包括光标处的字符)
q <C-u> 删除光标左边的所有字符(包括光标处的字符)
q <C-y> 恢复上次删除的字符串到光标位置
q <C-p> < 向上键 > 历史记录中的上一条命令
q <C-n> < 向下键 > 历史记录中的下一条命令
4-2 启动时 GRUB 命令行模式 在命令行模式下 <tab> 键有补全命令的功能,如果你敲入了命令的前一部分,键入 <tab> 系统将列出所有可能以你给出的字符串开头的命令。如果你给出了命令,在命令参数的位置按下 <tab> 键,系统将给出这条命令的可能的参数列表。
在计算机启动的时候, GRUB 首先显示启动菜单,这是如果用户按键盘的“ c ”键,便进入如图 4-4 所示的命令行模式,它的操作和在 Linux 的命令行模式是一样的。
(2) 菜单模式
系统在启动时,如果找到 /boot/grub/menu.lst ,则 grub 显示 grub 并进入菜单模式,如图 4-4 所示 。菜单模式下用户可以选择要启动的操作系统,或者修改配置。菜单的定义在 menu.lst 文件中,也可以从菜单模式按 <c> 键进入命令行模式,并且可以按 <ESC> 键从命令行模式返回菜单模式。菜单模式下按 <e> 键将进入菜单编辑模式。
(3) 菜单编辑模式
菜单编辑模式用来对菜单项进行编辑改变,其界面和菜单模式的界面十分类似,不同的是菜单中显示的是对应某个菜单项的命令列表。如果在编辑模式下按下 <ESC> ,则取消所有当前对菜单的编辑并回到菜单模式下。在编辑模式下选中一个命令行,就可以对这条指令进行修改,修改完毕后按下 回车 GRUB 将提示你确认并完成修改。如果你想在当前命令列表中增加一条命令,按 <o> 在当前命令的下面增加一条指令,按 <O> 在当前命令前处增加一条指令,按 <d> 删除一条指令。
在实际中,菜单模式用于选择要启动的操作系统,菜单编辑模式用于临时修改编辑启动菜单,这样的修改可疑通过命令写入 MBR 活指定的分区,但并不影响 grub.conf 。命令行模式也是一样,可以通过命令方式动态启动一个操作系统,同时也不影响 grub.conf 。所以,菜单编辑模式和命令行模式常常用来安装 GRUB MBR 或动态引导一个操作系统。而 GRUB 的配置文件,则是系统启动时 GRUB 程序必须加载的配置文件,这个文件中有关于 GRUB 的各种配置。不需要用户每次启动都执行繁琐的命令了。
4. GRUB 配置文件
grub.conf GRUB 的配置文件,其结构比较简单,可以分为两部分,第一步分是全局配置,另外一部分就是每个操作系统的启动配置。其中可以有多个操作系统的菜单配置。下面就是一个具体的例子。
#=================/boot/grub/grub.conf文件范例==================

timeout 30 # 等待用户选择菜单项的时间(以秒计),超时则引导默认的选项
default 0 # 默认选项,第一项
fallback 1 # 如果第一项出错,则启动下面的后备选项
splashimage=(hd0,0)/grub/splash.xpm.gz #GRUB 启动画面

#以下是启动Linux的配置
titleRed Hat Linux Enterprise AS3 for syd168 # 启动项的菜单标题
root (hd0,0) # 指定根文件系统,第 1 块硬盘第 1 个扇区中的 /boot
kernel /vmlinuz-2.4.18 ro root=LABEL=/ # 内核在 /boot
initrd /initrd-2.4.18-14.img # 启动 RAM 盘在 /boot

#以下是启动Windows的配置,如果只有Linux就不需要
title Windows2003 Enterprise for syd168 #Windows 启动菜单标题
root noverify(hd0,1) # 该操作系统在 hd0 的第二分区,不 mount
chainloader +1 # 从第一个硬盘的第二个分区引导 Windows

#=================/boot/grub/grub.conf文件范例==================
上面的例子,只是简单说明了 GRUB 中启动 Linux Windows 的配置方法。更多的启动配置请参考下面内容。
5. 引导多系统配置
GRUB 支持多操作系统引导。用 GRUB 引导后可以进入命令行模式或者菜单模式,可以通过灵活的命令行模式选择引导各个分区的操作系统,指定引导参数。 GRUB 支持三种引导方法,一种是直接引导操作系统内核,另一种是通过 chainload 进行间接引导,第三种就是通过网络引导操作系统。
对于 GRUB 能够支持的 Linux FreeBSD OpenBSD NetBSD GUN Mach 可以通过直接引导完成,但是对于 GRUB 不支持的操作系统(如 Windows ),需要用第二种方法 chainload 来完成。下面就分别来看看这几种引导方法:
(1) 直接引导
配置过程通常如下:
a) root 命令设置包含操作系统内核的根设备
b) kernel 命令装载内核映象文件,如果这个内核引导的时有参数的话,可以直接将参数加在内核文件名的后面
c) module modulenounzip 装载内核模块
d) boot 开始引导
(2) chainload 引导
a) 设置 GRUB 的根设备,用 rootnoverify (hdx y) 指定
b) 开始引导,用 chainloader +1 指定,此处“ +1 ”是指示 GRUB 读入分区的第一个扇区的引导记录。
c) 执行 boot 开始引导
以上是一般的 chainloader 方式,对于 DOS WINDOWS ,可以简单地用两条指令进行引导: chainloader (hdx y)+1 ,然后 boot ,其中 x y 用来指明所在分区号。
(3) 从网络引导:
为了使 GRUB 能够支持从网络引导,需要在编译时打开网络支持选项(请参考源文件中的 netboot/README.netboot )。另外, 要在网络中设置两个服务:动态 IP 服务( BOOTP DHCP RARP FTP 服务。然后,分别针对不同的服务器 BOOTP DHCP RARP 运行 bootp dhcp rarp 。如果一切设置无误的话 GRUB 就会给出 IP IP netmask TFTP 服务器的 IP 和网关的 IP 地址。最后,从网上得到操作系统的映象文件 。下面是一个例子
grub> bootp
Probing...[NE*000]
NE2000 base ...
Address: 192.168.110.23 Netmask: 255.255.255.0
Server: 192.168.110.14 Gateway: 192.168.110.1
grub> root (nd)
grub> kernel /tftproot/gnumach.gz root=sd0s1

http://www.niftyadmin.cn/n/4217506.html

相关文章

ACM算法笔记(二)斐波那契数列数组类型

一、斐波那契数列 定义 与爬楼梯问题的区别是&#xff1a;终止条件不同 代码参考爬楼梯问题 二、数组类型 1.两数之和 给定一个整数数组nums和一个整数目标值target&#xff0c;请你在该数组中找到目标值target的那两个整数&#xff0c;并返回他们的数组下标 例如&#xff1…

ACM算法笔记(三)链表算法

一、合并两个有序链表 将两个升序链表合并为一个升序链表后返回&#xff0c;新链表是通过拼接两个链表的节点组成的 思路&#xff1a;分别比较两个链表头部的节点&#xff0c;将较小节点的连接到新链表后 public ListNode mergeTwoList(ListNode l1,ListNode l2) {if(l1 null…

Vue学习Day1 vue安装、vue体验程序、vue中的MVVM、vue的生命周期、vue的一些简单指令

想利用暑假时间好好学习一下vue&#xff0c;会记录每一天的学习内容。 今天是学习vue的第1天&#xff01; 起起伏伏乃人生常态&#xff0c;继续加油&#xff5e; 学习内容1. Vue.js 安装方式一&#xff1a;直接CDN引入方式二&#xff1a;下载和引入方式三&#xff1a;NPM安装2.…

Linux 小问题&小技巧

001&#xff1a;建立管理员组内一般用户(CentOS)&#xff1a;  在一般情况下&#xff0c;一般用户通过执行 "su - " 命令&#xff0c;再输入正确root密码就可登录root桌面&#xff0c;现建功立业一个管理员的组&#xff0c;只允许这个组的用户执行 " su - &qu…

ACM算法笔记(四)栈、队列、二叉树的遍历

一、用栈实现队列 用两个栈实现队列&#xff08;先进先出&#xff09;&#xff0c;队列应当支持(push、pop、peek、empty) 思路&#xff1a;双栈一个负责输入一个负责输出&#xff08;压入操作正常&#xff0c;弹出时将输入栈的元素依次弹出然后压入输出栈&#xff09; privat…

java开发为什么需要UML

出处 www.cnejb.com 知道UML造成了怎样的局面大混乱吗&#xff1f;知道什么样的功能是UML拥有但JAVA不具备的吗&#xff1f;知道我们为什么需要除JAVA外的另一种电脑语言吗&#xff1f;UML并不仅仅只是JAVA或者其它什么语言的替代品。UML并不仅仅只是JAVA或者其它什么语言的替代…

ACM算法笔记(五)二叉树的检查和变换

一、对称二叉树 给定一颗二叉树&#xff0c;检查他是否对称 思路&#xff1a;使用递归处理&#xff08;递归的比较左子树的左孩子和右子树的右孩子&#xff09; public bool isSymmetric(TreeNHode root) {if(root nuill)return ture;return deepCheck(root.left,root.right)…