Board logo

标题: 迁移到 GRUB 2 [打印本页]

作者: look_w    时间: 2017-12-13 11:45     标题: 迁移到 GRUB 2

对于大多数人来说,引导加载程序并不是操作系统中最让人激动的部分,但它们却是极其重要的。没有正常运行的引导加载程序,什么也干不了。现在,从老的 Grand Unified Bootloader (GRUB) Legacy 工具到新的 GRUB 2 过渡正在进行。GRUB 2 是 Ubuntu 9.10 中的默认引导加载程序,也是其他许多主流 Linux 发行版的默认引导加载程序。其他发行版迟早都会将 GRUB 2 部署为默认引导加载程序。            
引导加载程序剖析显示的是 GRUB Legacy 和 GRUB 2 各自实现的启动过程。基本输入/输出系统(BIOS)是计算机运行的第一段代码,它存储在计算机固件中。BIOS 加载启动设备的第一个扇区并运行其包含的代码。对于硬盘,第一扇区就是主引导记录(MBR),它包含引导加载程序的第一步和 MBR 分区表。由于大多数磁盘设备扇区大小为 512 字节,因此第一步引导加载程序代码都很小。大多数引导加载程序,包括 GRUB Legacy 和 GRUB 2,将附加代码放在磁盘其他地方。至于 GRUB Legacy,其附加代码,即 stage 1.5,,一般都放在紧跟 MBR 后的未分配区域。还有其他代码,即 stage 2,存放在 Linux 启动分区(通常是 /boot 目录),尽管图 1 为了简化省略了这些文件。 同样,在多操作系统配置中,次级引导加载程序可能将额外配置文件存放在别处。            
图 1. GRUB 和 GRUB 2 包含若干按序加载运行的子部件GRUB 2 与 GRUB Legacy 在大体形式上相似,但它取消了 stage 1.5 并实现了模块化配置方法,其中处理各种分区系统、文件系统和扩展部分的代码存储在磁盘文件中 — 一般是在 /boot/grub。            
以上描述的配置的变体在 GRUB Legacy 和 GRUB 2 中都可能。例如,有可能将 GRUB 的 stage 1 代码安装在 Linux 启动分区的第一个扇区,而不是 MBR 中。这种方式下,另一个引导加载程序驻留在 MBR 中,仅当引导加载程序链式加载 GRUB 时才出现 GRUB 菜单。由于 Extensible Firmware Interface (EFI) 最终可能代替 BIOS 作为标准 PC 固件,它提供了内置引导加载程序,GRUB 2 在基于 EFI 的系统中可以使用与此类似的配置。            
如果您想在运行的系统中用 GRUB 2 取代 GRUB Legacy,必须安装新的 GRUB 2 包,配置其文件,并执行一个特殊命令用 GRUB 2 等效部分替代现有 GRUB Legacy MBR 及特殊隐藏代码。如果您切换到 GRUB 2 是由于正在安装使用 GRUB 2 作为默认启动程序的新发行版,则无需进行这些步骤。无论那种情况,都必须懂得新的 GRUB 2 配置文件格式以及新启动程序的总体特性。            
GRUB 2 改进对只有 Linux 的系统,GRUB Legacy 处理引导加载程序的工作相当出色。过渡到 GRUB 2 的部分原因是由于引导加载程序的开发。GRUB Legacy 所含的代码让开发人员觉得凌乱不堪难以维护。为了添加新特性,他们宁愿重新编写而不是在原有基础上添加。事实上对系统管理员来说,GRUB 2 有几个特性,现在已经或将来将会相当重要:            
配置 GRUB 2如果您已熟悉 GRUB Legacy,将会发现 GRUB 2 配置文件大体类似,但细节上有差异。您也应当知道配置 GRUB 2 的替代方法。            
配置文件示例 GRUB 2 配置文件默认位置是 /boot/grub/grub.cfg。有些 Linux 软件包使用 /boot/grub2/grub.cfg,同时启用 GRUB Legacy 和 GRUB 2 安装程序。清单 1 显示的是 GRUB 2 配置文件示例。            
清单 1. GRUB 2 配置文件示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
set timeout=10
set default=0

menuentry "Linux (2.6.32.2 kernel)" {
        set root=(hd1,8)
        linux /bzImage-2.6.32.2 ro root=/dev/sdb4
        initrd /initramfs-x86_64-2.6.32.2
}

menuentry "Windows 7" {
        set root=(hd1,2)
        parttool (hd0,1) hidden+
        parttool (hd1,5) hidden-
        chainloader +1
}




如果您熟悉 GRUB Legacy,将会发现基本的 GRUB 2 配置文件类似。与 GRUB Legacy 配置文件相似,GRUB 2 文件开始部分是设置各个全局选项 — 本例将超时值设为 10 秒并设置默认菜单项。            
文件接下来是一系列菜单项。这些条目的形式与 GRUB Legacy 不同,其目的一样:每一个定义单独的操作系统或启动变量,如不同的 Linux 内核。每个菜单项开始是 menuentry 关键字,然后是出现在 GRUB 2 菜单中的引用标记名。菜单项相关的选项出现在大括号({})中。            
配置文件变化GRUB Legacy 与 GRUB 2 配置文件格式的几处变化值得一提:            
清单 1 中另一项变化相当重要但不明显:GRUB 2 中分区数字从 1 开始,GRUB Legacy 中从 0 开始。而磁盘编号却没有 实现相同的改变。因此,GRUB Legacy 中第一块磁盘的第一个分区是 (hd0,0),而在 GRUB 2 中是 (hd0,1)。应当注意这个细节,因为它会造成潜在的问题!




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0