首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

迁移到 GRUB 2

迁移到 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 Legacy 只能在 x86 和 x86-64 系统上工作。GRUB 2 的目标是可在更多的架构上工作,尽管除了 x86 和 x86-64,在其他架构上使用 GRUB 2 的文档还相当少。它确实可在 PowerPC® 和 Scalable Process Architecture (SPARC) 系统上工作。
  • 固件支持。 GRUB 2 支持额外固件类型,包括 BIOS、EFI 和 OpenFirmware。至于对非通用 CPU 的支持方面,至少有一些对非常用固件的支持,但只能看做试验性质的。
  • 分区表。 官方说法是, GRUB Legacy 只支持老的 MBR 分区模式。尽管如此,许多 Linux 软件包,带有包含非正式 GUID Partition Table (GPT) 支持的 GRUB Legacy 版本。GRUB 2 包含正式 GPT 支持。
  • RAID 和 LVM。 GRUB Legacy 不支持基于软件的独立磁盘冗余阵列(RAID)和 Logical Volume Manager (LVM) 配置。这意味着必须有至少一个标准分区(或 RAID 1 配置)文件系统,这样 GRUB Legacy 才能读取配置文件。GRUB 2 支持 Linux 格式的 RAID 和 LVM。因此,只要有 RAID 或 LVM 分区就可配置系统。
  • 文件系统支持。 为了读取配置文件,GRUB 必须能读取保存这些文件的文件系统。GRUB Legacy 支持的文件系统很少,包括 Second Extended Filesystem (ext2fs)、File Allocation Table (FAT)、Journaling File System (JFS)、ReiserFS 和 Extents File System (XFS)。对于只有 Linux 的系统,GRUB 2 中的文件支持与 GRUB Legacy 一样;尽管如此,GRUB 2 支持更多的非 Linux 文件系统,例如 Apple 的 Hierarchical File System Plus (HFS+)、Microsoft 的 NTFS 文件系统,以及 Sun 的 ZFS。
  • 内核支持。 GRUB Legacy 可以直接启动 Linux、FreeBSD、NetBSD、OpenBSD 及所有遵循 Multiboot Specification 的操作系统。这些包含 GNU HURD 内核、OpenSolaris,还有其他一些内核。GRUB 2 也能启动这些内核,以及 XNU(Mac OS X 和 Darwin 内核)。启动其他操作系统,例如 Windows®,需要 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 配置文件格式的几处变化值得一提:            
  • GRUB 2 在选项和值之间使用 set 关键字和等号(=)。而 GRUB Legacy 中同样的选项省略了 set 关键字和等号。
  • 在 GRUB Legacy 中,菜单项以关键字 title 开始,直到行尾的文本都是标题。菜单项定义的其余部分在下面的行中,没有大括号定义;菜单项以下个菜单定义的开始而结束。
  • GRUB Legacy 使用 kernel 关键字来指定 Linux 内核;GRUB 2 使用 linux。
  • 其他一些具体选项名称也变化了。例如, 使用的新的 parttool 命令,在 Windows 7 定义中,它可以执行简单的分区操作。清单 1 使用该特性隐藏或显示某个分区,以便控制让 Windows 7 可以列出哪些分区。GRUB Legacy 中同样的命令是 hide 和 unhide。
清单 1 中另一项变化相当重要但不明显:GRUB 2 中分区数字从 1 开始,GRUB Legacy 中从 0 开始。而磁盘编号却没有 实现相同的改变。因此,GRUB Legacy 中第一块磁盘的第一个分区是 (hd0,0),而在 GRUB 2 中是 (hd0,1)。应当注意这个细节,因为它会造成潜在的问题!
返回列表