多重启动管理器-grub
2012-07-21 23:28:07 阿炯

GNU GRUB(简称“GRUB”)是一个来自GNU项目的启动引导程序。GRUB是多启动规范的实现,它允许用户可以在计算机内同时拥有多个操作系统,并在计算机启动时选择希望运行的操作系统。GRUB可用于选择操作系统分区上的不同内核,也可用于向这些内核传递启动参数。采用C语言开发并在GPL协议下授权。

GNU GRUB的前身为Grand Unified Bootloader,主要用于类Unix系统;同大多Linux发行版一样,GNU系统也采用GNU GRUB作为它的启动器。它可以在多个操作系统共存时选择引导哪个系统,可以引导几乎所有的Unix、Linux、Windows操作系统。它可以载入操作系统的内核和初始化操作系统,或者把引导权交给操作系统来完成引导。

GRUB的优点很多,如支持大硬盘,支持开机画面,两种执行模式,菜单式选择,分区位置改变后不必重新配置等等。GRUB具有多种用户界面。多数Linux发行版利用GRUB对图形界面的支持,提供了定制的带有背景图案的启动菜单,有时也支持鼠标。GRUB可通过GFX支持更美观的引导画面和引导菜单。通过对GRUB的文字界面的设定,可以通过串口实现远程终端启动。GRUB可以从网络上下载操作系统镜像,因此可以支持无盘系统。GRUB支持在启动操作系统前解压它的镜像。

与其它启动器不同,GRUB可以通过GRUB提示符直接与用户进行交互。加载操作系统前,在GRUB文本模式屏幕下键入c键可以进入GRUB命令行。在没有作业系统或者有作业系统而没有"menu.lst"(或grub.cfg)配置文件的系统上,同样可以进入GRUB提示符。通过类似bash的命令,GRUB提示符允许用户手工启动任何操作系统。把合适的命令记录在"menu.lst"(或grub.cfg)文件里,可以自动启动一个操作系统。

GRUB拥有丰富的终端命令,在命令行下使用这些命令,用户可以查看硬盘分区的细节,修改分区设置,临时重新映射磁盘顺序,从任何用户定义的配置文件启动,以及查看GRUB所支持的文件系统上的其它启动器的配置。因此,即便不知道一台计算机上安装了什么,也可以从外部设备启动一个操作系统。GRUB采用滚动屏幕选择想要启动的操作系统。通过向"menu.lst"(或grub.cfg)文件中添加相关信息,GRUB可以控制150或者更多的启动选项,在启动时用方向键进行选择。


GNU GRUB is a Multiboot boot loader. It was derived from GRUB, the GRand Unified Bootloader, which was originally designed and implemented by Erich Stefan Boleyn.

Briefly, a boot loader is the first software program that runs when a computer starts. It is responsible for loading and transferring control to the operating system kernel software (such as the Hurd or Linux). The kernel, in turn, initializes the rest of the operating system.


启动过程

GRUB第一版本

GRUB的步骤1包含在MBR中。由于受MBR的大小限制,步骤一所做的几乎只是装载GRUB的下一步骤(存放在硬盘的其它位置)。步骤1既可以直接装载步骤2,也可以装载步骤1.5:GRUB的步骤1.5包含在MBR后面的30千字节中。步骤1.5加载步骤2。

当步骤2启动后,它将呈现一个界面来让用户选择启动的操作系统。这步通常采用的是图形菜单的形式,如果图形方式不可用或者用户需要更高级的控制,可以使用GRUB的命令行提示,通过它,用户可以手工指定启动参数。GRUB还可以设置超时后自动从某一个内核启动。

GRUB第二版本

与GRUB第一版相似的是,boot.img像步骤1一样在MBR或在启动分区中,但是,它可以从任何LBA48地址的一个扇区中读取,它(boot.img)将读取core.img(产生于diskboot.img)的第一个扇区以用来后面读取core.img的剩余部分。core.img正常情况下跟步骤1.5储存在同一地方并且有着同样的问题,可是,当他被移动到一个文件系统或一个纯粹的分区时会比在步骤1.5移动或删除引起更少的麻烦。一旦完成读取,core.img会读取默认的配置文件和其他需要的模块。


GNU GRUB在MBR分区表的硬盘上


GNU GRUB在GPT分区表的硬盘上


boot.img严格占有446字节的大小,并被写入MBR(0扇区)。如果可行(出于向后兼容的原因第一个分区起始于63扇区而非1扇区,但这不是强制的),core.img被写入介于MBR和第一分区之间的空扇区之中。/boot/grub目录可以放在单独的分区中,也可以放在根分区中。


新的GRUB2(GRUB第二版)为GRUB的重写版本,它是GRUB的大革新。GRUB2对Linux系统做了更多的优化,支持更多的功能,如动态的加载模块(而在之前的GRUB中,新增或删除模块要重新编译GRUB)等。GRUB2的版本号为0.98或更高;旧的GRUB的版本号则为0.97或更低,也被称为“GRUB Legacy”或“GRUB1”等。GRUB2的配置、命令等较GRUB Legacy有一定的不同。

Grub2有如下特点:1、模块化设计;2、支持多体系硬件架构;3、支持国际化多语言;4、独立内存管理;5、支持脚本语言编程。

最新版本:2.0
官方提供的主题一份
新增Itanium和SGI MIPS等架构支持
改善默认的视频模式选择
新的驱动(EHCI / AHCI / ESCC serial / EFI / Network stack / VBE on Coreboot)支持
支持更多的文件系统(ExFAT, LZOP, LDM read, LUKS and GELI support, Squash4, and RomFS.),并提高现有文件系统支持
新的启动协议和现有启动协议改善
性能改善
更好的国际化
优化了安装过程

GRUB 2.02 开源启动引导项目在经历了长达数年时间的 Beta 测试之后,于2017年4月26日发布了稳定版本。开发团队表示花费了大量时间来完善 GRUB 2.02,并且将很快整合到各大 GNU/Linux 操作系统的稳定发行版本中。GRUB 上一个稳定版本 2.0 是在五年前发布的。最主要的功能就是引入了对 Big-Endian UFS1、试验性质的 64 位 EXT2,GPT PReP 的支持,支持 LVM UUIDs,能够正确处理 LVM, CBFS (coreboot) 分区,支持 ZFS LZ4、ZFS 功能、XFS V5 格式化以及 LVM RAID1。

继上一版本 2.06 发布两年半之后,GRUB 2.12 版本于2023年12月下旬正式发布。该版本带来的一些新功能如下:
支持 GCC 13、Clang 14、binutils 2.38
统一跨架构的 EFI Linux kernel loader
过渡到用于 x86 架构的 EFI Linux kernel stub loader
初步支持 Boot Loader Interface
支持使用固件调用动态添加 GRUB 运行时内存
支持 PCI 和 MMIO UART,SDL2、LoongArch
TPM 驱动程序修复
许多文件系统修复
许多 CVE 和 Coverity 修复
调试支持改进、测试改进、文档改进
以及大量其他修复和清理


项目主页:http://www.gnu.org/software/grub/
该文章最后由 阿炯 于 2023-12-29 09:23:51 更新,目前是第 2 版。