前言

GNU GRUB 是一个非常强大的引导加载程序,是计算机启动时运行的第一个程序,它负责将控制加载转移到操作系统内核软件。

GRUB 起源于 1995 年,当时 Erich Boleyn 试图用犹他大学的 Mach 4 微内核(现在称为 GNU Mach)启动 GNU Hurd。埃里希和布莱恩·福特设计了多重引导规范,因为他们决定不加入大量的互不兼容的 PC 的启动方式。

在接下来的几年里,GRUB 被扩展以满足许多需求,但很快就发现它的设计没有跟上它所做的扩展,我们已经达到了如果没有进行任何进一步改变就很难破坏现有功能。

GRUB2

大约在 2002 年,Yoshinori K. Okuji 开始研究 PUPA(GNU GRUB 的初步通用编程架构),旨在重写 GRUB 的核心,使其更清洁,更安全,更强大,更强大。

PUPA 最终被重命名为 GRUB 2,GRUB 的原始版本被重命名为 GRUB Legacy。

GRUB Legacy 继续进行少量维护,但最后一个版本(0.97)是在 2005 年完成的,在撰写本文时,似乎不太可能会有另一个版本。

到 2007 年左右,GNU / Linux 发行版开始将 GRUB 2 用于有限的范围,到 2009 年底,默认情况下会安装多个主要发行版。

GRUB 功能

GRUB 主要实现目标:

1、对用户来说,基本功能要简单明了;

2、功能丰富,要支持内核的各种参数定制配置;

3、用于启动 FreeBSD,NetBSD,OpenBSD 和 Linux 的向后兼容性。通过链加载功能支持专有内核(如 DOS,Windows NT 和 OS / 2)。

除了特定的兼容模式(链式加载和 Linux 搭载格式)之外,所有内核都将以与多引导规范中相同的状态启动。

GRUB 具有以下功能:

1、识别多种可执行格式:支持许多 a.out 变体和 ELF。符号表也会加载。

2、支持非多引导内核:支持许多缺少多引导兼容性的免费 32 位内核(主要是 FreeBSD,NetBSD 2,OpenBSD 和 Linux)。还支持其他引导加载程序的链加载。

3、加载多个模块:完全支持加载多个模块的多重引导功能。

4、加载配置文件:支持具有预设引导命令的人类可读文本配置文件。您还可以动态加载另一个配置文件,并将预设配置文件嵌入 GRUB 映像文件中。命令列表(请参阅命令)是命令行支持的超集。一个示例配置文件中提供 的配置。

5、提供菜单界面:可以使用菜单界面列出具有可编程超时的预设引导命令。引导条目的数量没有固定限制,当前实现有几百个空间。

6、拥有灵活的命令行界面:可从菜单访问的相当灵活的命令行界面可用于编辑任何预设命令,或从头开始编写新的启动命令集。如果没有配置文件,GRUB 将退回到命令行;命令列表是配置文件支持的子集。编辑命令非常类似于 bash 命令行(见命令行编辑在 bash 特性),用 TAB 命令,设备,分区和文件的完井中根据上下文的目录。

7、支持多种文件系统类型:透明地支持多种文件系统类型,以及有用的显式阻止列表表示法。目前支持的文件系统类型是 Amiga Fast FileSystem(AFFS),AtheOS fs,BeFS, BtrFS(包括 raid0,raid1,raid10,gzip 和 lzo), cpio(小端和大端 bin,odc 和 newc 变体), Linux ext2 / ext3 / ext4,DOS FAT12 / FAT16 / FAT32,exFAT,HFS, HFS +,ISO9660(包括 Joliet,Rock-ridge 和多块文件), JFS,Minix fs(版本 1,2 和 3),nilfs2, NTFS(包括压缩),ReiserFS,ROMFS, Amiga 智能文件系统(SFS),Squash4,tar,UDF, BSD UFS / UFS2,XFS 和 ZFS(包括 lzjb,gzip,zle,镜像,条带,raidz1 / 2/3 和加密)在 AES-CCM 和 AES-GCM 中)。

8、支持自动减压:可以解压缩 gzip 或 xz3 压缩的文件。该功能对用户来说是自动且透明的(即所有功能都对指定文件的未压缩内容进行操作)。这大大减少了文件大小和加载时间,对于软盘来说是一个特别大的好处。某些内核模块应该以压缩状态加载,因此可以指定不同的模块加载命令以避免解压缩模块。

9、访问任何已安装设备上的数据:支持从 BIOS 识别的任何或所有软盘或硬盘读取数据,与根设备的设置无关。

10、独立于驱动器几何转换:与许多其他引导加载程序不同,GRUB 使特定的驱动器转换无关紧要。安装并运行一个转换的驱动器可以转换为另一个转换,而不会对 GRUB 的配置产生任何不利影响或更改。

11、检测所有已安装的 RAM:GRUB 通常可以在 PC 兼容的机器上找到所有已安装的 RAM。它使用先进的 BIOS 查询技术来查找所有内存区域。由于在多重引导规范(见描述动机在多重引导规范),不是所有的内核利用这些信息,但是 GRUB 提供它那些谁做。

12、支持逻辑块地址模式:在传统的磁盘调用(称为 CHS 模式)中,存在几何转换问题,即 BIOS 无法访问 1024 个柱面,因此可访问空间限制为至少 508 MB 且最多为 8 GB。GRUB 不能普遍解决这个问题,因为所有机器都没有使用标准接口。但是,一些较新的机器具有新的接口,即逻辑块地址(LBA)模式。GRUB 会自动检测 LBA 模式是否可用,并在可用时使用它。在 LBA 模式下,GRUB 可以访问整个磁盘。

13、支持网络启动:GRUB 基本上是基于磁盘的引导加载程序,但也具有网络支持。您可以使用 TFTP 协议从网络加载操作系统映像。

14、支持远程终端:为了支持没有控制台的计算机,GRUB 提供远程终端支持,以便您可以从远程主机控制 GRUB。目前仅实现串行终端支持。

GRUB2 改进

1、在 GRUB 可以手动直接编辑/boot/grub/menu.lst 文件,来编辑启动文件;在 GRUB2 中有一个 grub 的配置文件/etc/default/grub,编辑对应的选项再使用 grub-mkconfig 来生成 grub.cfg 文件。

2、GRUB2 引导菜单启动项是从/boot 自动生成的,不是有 menu.lst 配置的。

3、分区编号发生变化:第一个分区现在是 1 而不是 0,但第一个设备仍然以 0 开始计数,如 hd0。

4、界面的定制更加灵活,在 GRUB2 有主题支持。

5、自动搜索可用的内核和硬盘中的可用系统。