目录
1、GRUB 基础
2、命名习惯
3、安装 GRUB
4、GRUB 接口
5、GRUB 常用命令
6、保护 GRUB 设置
7、GRUB 和 stage 文件
8、GRUB 常见错误信息
9、制作 GRUB 引导软盘
10、使用 GRUB 通过网络引导操作系统
11、把配置文件嵌入到 GRUB 中
12、总结
13、个人建议
一、GRUB 基础
1.1 GRUB 简介
“boot loader”是计算机启动后第一个运行的软件。它负责加载一个操作系统的内核,并把控制权交给内核。内核则负责剩下的初始过程。
GRUB 一个很重要的特色就是灵活性;GRUB 可以识别文件系统和二进制格式的内核,所以你可以加载任何操作系统,而不需要记录内核在
磁盘上的物理位置。
1.2 GRUB 的现状
我不打算介绍 GRUB 的发展历史,有兴趣的朋友可以自己到官方站点或者执行 info grub 自行获取信息。我们着眼于 GRUB 当前的现状。
目前 GRUB 分成 GRUB legacy 和 GRUB 2。版本号是 0.9x 以及之前的版本都称为 GRUB Legacy ,从 1.x 开始的就称为 GRUB 2。目前
GRUB Legacy 已经停止开发了,只是出于一个 bug fix 的状态,不再增加新的功能了,所有的开发都转移到 GURB 2 之上了。
1.3 GRUB Legacy 和 GRUB 2
GRUB 2 是源自于一个名为 PUPA 的项目,目的是建立下一代的 boot loader。GRUB 2 几乎是从零开始开始开发的,它和 GRUB Legacy 不
同的地方有很多,例如支持 scripts、国际化语言、动态加载模块、带有 resuce 模式等等,这些都是 GRUB Legacy 所没有的。
下面是 GRUB2 新特性的介绍 :(原文请参
http://www.gnu.org/software/grub/grub-2.en.html )
a)支持脚本语言,例如条件判断,循环、变量和函数
b)图形接口
c)在运行时动态加载需要的模块,而不是在 biuld 的时候指定加入那些模块(静态)
d)可以移植到不同的架构上
e)国际化语言。包括支持非ASCII的字符集和类似 gettext 的消息分类,字体,图形控制台等等。
f)实际内存管理。使得 GNU GRUB 更加具有可扩展性
g)针对文件系统、文件、设备、驱动、终端、命令、分区表、 os loder 的模块化、层次化、基于对象的框架
h)跨平台的安装,允许从另外一个架构上安装 GRUB
i)支持 rescue 模式,可用于系统无法引导的情况。stage 1.5 被取消了
j)修复 GRUB Legacy 设计上的错误,同时又保持向后的兼容性。
1.4 Multiboot 规范
Multiboot 规范是在 boot loader 和 kernel 之间的一个协议,用于统一各种引导操作系统的方法。Linux 和 BSD 目前并不支持该规范。
1.5 可用资源
GRUB 的 homepage
http://www.gnu.org/software/grub/grub-legacy-faq.en.html)
info grub
1.6 旧版 GRUB(GRUB Legacy)的功能特色
a)识别多种可执行格式,支持 “a.out” , ELF, symbol tables)
b)支持 non-Multiboot 内核。主要是FreeBSD、NetBSD、OpenBSD、Linux。
c)支持加载多个模块
d)支持配置文件
e)提供菜单接口。菜单项的数量并没有限制,目前版本支持数百个菜单条目
f)有一个灵活的命令行接口。如果没有配置文件存在,GRUB 会自动进入命令模式
g)支持多种文件系统格式。主要有BSD FFS”、“DOS FAT 16 、FAT32”,“Minix fs”、ext2/ext3、ReiserFS 、jfs、xfs、VSTa fs
h)支持自动解压
i)能够访问任何已经安装的设备上的数据
j)Be independent of drive geometry translations (这个不知道怎么翻译好)
Unlike many other boot loaders, GRUB makes the particular drive
translation irrelevant. A drive installed and running with one
translation may be converted to another translation without any
adverse effects or changes in GRUB's configuration.
k)检测所有已经安装的 RAM
l)支持 LBA 模式。在传统的磁盘调用(称为 CHS 模式),存在一个限制 :就是 BIOS 无法访问在 1024 柱面。之后的内容,所以 BIOS
只能访问最小 508 MB ,最大8GB 的空间。(这也就是 /boot 分区必须在 1024 柱面之前的原因)。GRUB 并不能解决全部问题,因为
并没有统一的解决方法,不过 GRUB 可以检测是否支持 LBA 模式,如果支持则使用 LBA 模式。
m)支持网络引导,可以使用 TFTP 协议通过网络加载内核
n)支持远程终端,目前只支持串口
二、命名习惯
首先 GRUB 要求设备名被括在一个 ( ) 中。fd表示软盘,hd 表示硬盘(不区分 IDE 还是 SCSI)。其次设备是从 0 开始编号,分区也是如此,
分区和设备之间用一个 ‘,’ 分开。下面给出几个例子 :
(fd0) :表示整个软盘
(hd0,1) :表示 BIOS 中的第一个硬盘的第2个分区
(hd0,0)/boot/vmlinuz :表示 BIOS 中的第一个硬盘的第一个分区下的 boot/ 目录下的vmlinuz 文件。
如果没有指定某个分区,则表示使用整个设备,否则只使用指定的分区。
三、安装 GRUB
3.1 下载 tarball
有两种方法,一种是 rpm ;一种是 tarball 。rpm 没有什么好说的,只是 rpm –Uvh 就可以了。不过一般不会启用网络引导功能,
所以我们决定采用 tarball 的方式安装。 首先到下面的地址下载 tarball
ftp://alpha.gnu.org/gnu/grub上面有 GRUB Legacy 和 GRUB 2 ,就选择目前 RHEL AS4 用的 0.95 版本做实验。
不过在安装之前先要用 rpm –q grub 检查一下 grub 是否安装了。如果是的话,用 rpm –e grub 删除,即使你在安装时指定不安装
boot loader ,安装程序还是会安装 grub rpm 包的。
3.2 安装需求
INSTALL 文件中给出了 build 所需要的软件包条件 :
GCC :当前版本的 GCC 应该也可以用,不过还是建议用 2.95 或者以上版本的 GCC
GNU Make :生成 Makefiles 所用
GNU binutils 2.9.1.0.23 或者个更高版本
如果你想自己开发 GRUB ,还需要 Texinfo 4.0 或者更高 ,同时还有GNU Autoconf 2.5x ,GNU Automake 1.7 或者更高颁布。
3.3 参数介绍
下面我们介绍几个 configure 过程中可能用到的选项,要完整的选项列表,可以参看 INSTALL 文件和 netboot/README.netboot 文件.
a)--enable-preset-menu=FILE :默认情况下 grub.conf 和 stage2 文件是分离的,使用该选项,可以直接把配置文件嵌入到 stage2 中,
这样启动时可以立即获得配置文件。对于一些嵌入式的系统来说比较有用,又或者在前面提到的没有显示器/键盘的主机有用,因为在切
换显示输出到你的笔记本之前,你是看不到启动的画面的,所以执行切换显示操作也是在看不到输出的情况下进行的(切换显示之后就不会了)。
通过这个选项你可以在
中指定启动时立即把显示输出切换到你的笔记本上了。
b)--enable-diskless :如果使用了该选项,你会得到额外的两个文件,nbgrub 和 pxegrub。接下来你需要指定网卡的驱动程序,
netboot/ 目录下有较常见的几种 ,可以看到几种网卡可以合用一个驱动。常见的有 :
[Copy to clipboard]CODE:
Intel Etherexpress Pro/100
--enable-eepro100
Novell NE2100 and NE1500
--enable-ne2100
Realtek 8139
SMC 1211
D-Link DFE530TX+ and DFE538TX
--enable-rtl8139
3Com90x
--enable-3c90x
如果你不想那么麻烦,则按照下面的过程进行 :
[Copy to clipboard]CODE:
./configure
make
make install
安装结束。默认命令会放在 /usr/local/bin 和 /usrlocal/sbin 下。Stage 文件则放在 /usr/local/share/grub/i386-pc/ 目录下。
3.4 安装之后的操作
a)把 /usr/local/share/grub/i386-pc/ 目录下的所有文件统统拷贝到 /boot/grub/ 目录下。
b)接下来是创建 grub.conf ,并在 /boot/grub/ 目录下建立一个 menu.lst ,指向 grub.conf。
c)注意,这个 symbol link 在 Redhat 9 是必需的,否则启动时会直接进入命令模式,即使已经存在 grub.conf ;但在 RHEL AS4 下却不是。
d)确认 /usr/local/sbin 和 /usr/local/bin 在 PATH 变量的值中。
e)执行 grub-install /dev/hda1 把 stage1 写入到 /boot 分区的引导扇区。
也可以执行 grub 进入 grub shell ,然后通过 root 和 setup 命令来安装 stage1 。
f)重启机器,安装过程到此结束。