本章包含有关 x86 引导过程的信息,其中包括 GRUB 实现详细信息和其他 GRUB 参考信息。
有关概述信息,请参见第 9 章。
有关引导系统的逐步说明,请参见第 12 章。
本节包含有关基于 x86 的系统引导所特有的引导过程的信息。
打开基于 x86 的系统时,系统由只读存储器 (read-only-memory, ROM) 基本输入/输出系统 (Basic Input/Output System, BIOS) 进行控制。BIOS 是具有 x86 64 位和 32 位支持的 Oracle Solaris 操作系统上的固件接口。
硬件适配器通常具有显示设备的物理特征的板载 BIOS。该 BIOS 用于访问设备。启动过程期间,系统 BIOS 将检查是否存在任何适配器 BIOS。如果找到了任何适配器,则系统会装入并执行每个适配器 BIOS。每个适配器的 BIOS 都会运行自检诊断,然后显示设备信息。
大多数系统上的 BIOS 都有一个用户界面,您可以在该界面中选择已排序的引导设备的列表,其中包含以下选择:
软盘
CD 或 DVD
硬盘
网络
BIOS 尝试从每个设备轮流进行引导,直到找到带有可引导程序的有效设备为止。
/platform/i86pc/multiboot 程序是一个 ELF32 可执行程序,包含在多引导规范中定义的信息头。
多引导程序负责执行以下任务:
解释引导归档文件的内容
自动检测具备 64 位计算能力的系统
选择用于引导系统的最佳内核模式
在内存中汇编核心内核模块
将系统控制权转交给 Solaris 内核
内核获得系统控制权后,便会对 CPU、内存和设备子系统进行初始化。随后,内核会挂载引导设备,该设备与在 /boot/solaris/bootenv.rc 文件中指定的 bootpath 和 fstype 属性对应。此文件是引导归档文件的一部分。如果没有在 bootenv.rc 文件或 GRUB 命令行中指定这些属性,则根文件系统将缺省为 /devices/ramdisk:a 上的 UFS。引导安装 miniroot 时,根文件系统将缺省为 UFS。挂载引导设备后,内核将对 sched 和 init 命令进行初始化。这些命令可以启动服务管理工具 (Service Management Facility, SMF) 服务。
以下各节包含有关在 Oracle Solaris OS 中管理 GRUB 的其他参考信息。
要彻底掌握 GRUB 概念,了解以下术语是至关重要的。
本列表中介绍的某些术语不是基于 GRUB 的引导所独有的。
用于引导 Oracle Solaris OS 的关键文件的集合。在挂载根文件系统前,系统启动过程中将需要这些文件。系统中将维护多个引导归档文件:
主引导归档文件,用于在基于 x86 的系统上引导 Oracle Solaris OS。
故障安全引导归档文件,当主引导归档文件被破坏时用于进行恢复。该引导归档文件可在没有挂载根文件系统的情况下启动系统。在 GRUB 菜单中,该引导归档文件被称为故障安全。该归档文件的主要用途是重新生成通常用来引导系统的主引导归档文件。
打开系统电源后运行的第一个软件程序。此程序将开始执行引导过程。
请参见引导归档文件。
GNU GRand Unified Bootloader (GRUB) 是具有菜单界面的开源引导装载器。该菜单显示系统上安装的操作系统的列表。使用 GRUB 可以轻松地引导各种不同的操作系统,如 Oracle Solaris OS、Linux 或 Windows。
列出系统中安装的操作系统的引导菜单。使用该菜单,无需修改 BIOS 或 fdisk 分区设置即可轻松地引导操作系统。
GRUB 主菜单的一个子菜单。GRUB 命令将显示在该子菜单中。可以编辑这些命令以更改引导行为。
一个列出系统中安装的所有操作系统的配置文件。该文件的内容指定在 GRUB 菜单中显示的操作系统的列表。使用该菜单,无需修改 BIOS 或 fdisk 分区设置即可轻松地引导操作系统。
位于 Solaris 安装介质上的最小可引导根 (/) 文件系统。miniroot 包含安装和升级系统所需的 Solaris 软件。在基于 x86 的系统上,miniroot 被复制到系统中,用作故障安全引导归档文件。有关故障安全引导归档文件的详细信息,请参见 boot archive(引导归档文件)。
请参见引导归档文件。
GRUB 包含以下功能组件:
stage1-安装在 fdisk 分区的第一个扇区上的映像。通过指定 installgrub 命令和 -m 选项,可以选择将 stage1 安装在主引导扇区上。有关更多信息,请参见 installgrub(1M) 手册页和 《系统管理指南:设备和文件系统》中的“GRUB 引导环境中的磁盘管理”。
stage2-安装在 fdisk 分区的保留区中的映像。stage2 映像是 GRUB 的核心映像。
menu.lst 文件-在具有 UFS 根的系统上,通常位于 /boot/grub 目录中;在具有 ZFS 根的系统上,通常位于 /pool-name/boot/grub 目录中。该文件由 GRUB stage2 文件读取。有关更多信息,请参见x86: 通过编辑 menu.lst 文件修改引导行为一节。
您无法使用 dd 命令将 stage1 和 stage2 映像写入磁盘。stage1 映像必须能够接收有关磁盘上的 stage2 映像的位置的信息。使用 installgrub 命令,这是安装 GRUB 引导块时支持方法。
GRUB 使用的设备命名约定与以前的 Solaris 发行版稍有不同。了解 GRUB 设备命名约定可以帮助您在系统上配置 GRUB 时正确指定驱动器和分区信息。
下表介绍了此 Oracle Solaris 发行版的 GRUB 设备命名约定。
表 15–1 GRUB 设备的约定
设备名 |
说明 |
---|---|
(fd0) |
第一张软盘 |
(fd1) |
第二个软盘 |
(nd) |
网络设备 |
(hd0,0) |
第一个硬盘上的第一个 fdisk 分区 |
(hd0,1) |
第一个硬盘上的第二个 fdisk 分区 |
(hd0,0,a), |
第一个硬盘上的第一个 fdisk 分区上的片 a |
(hd0,0,b) |
第一个硬盘上的第一个 fdisk 分区上的片 b |
所有的 GRUB 设备名称都必须括在括号中。
有关 fdisk 分区的更多信息,请参见《系统管理指南:设备和文件系统》中的“fdisk 分区创建准则”。
从 Solaris 10 10/08 发行版开始,findroot 命令取代了之前 GRUB 使用的 root 命令。findroot 命令提供了用于搜索目标磁盘(无论使用哪个引导设备)的增强功能。findroot 命令还支持从 ZFS 根文件系统引导。
下面说明了 findroot 命令使用的适用于不同 GRUB 实现的设备命名约定:
Oracle Solaris Live Upgrade:
findroot (BE_x,0,a) |
x 变量是引导环境的名称。
具有 ZFS 支持的系统的标准系统升级和全新安装:
findroot(pool_p,0,a) |
p 变量是根池的名称。
具有 UFS 支持的系统的标准系统升级和全新安装:
findroot (rootfsN,0,a) |
N 变量是从 0 开始的整数。
本节介绍 GRUB 如何支持位于同一个磁盘上的多个操作系统。下面是一个基于 x86 的系统的示例,该系统在同一个磁盘上安装了 Solaris 10 10/08 OS、Solaris 9 OS、Linux 和 Windows。
表 15–2 GRUB 菜单配置样例
操作系统 |
在磁盘上的位置 |
---|---|
Windows |
fdisk 分区 0 |
Linux |
fdisk 分区 1 |
Oracle Solaris |
fdisk 分区 2 |
Solaris 9 OS |
片 0 |
Solaris 10 10/08 OS |
片 3 |
根据上述信息,GRUB 菜单应该如下所示:
title Oracle Solaris 10 findroot (pool_rpool,0,a) kernel$ /platform/i86pc/multiboot -B $ZFS-BOOTFS module /platform/i86pc/boot_archive title Solaris 9 OS (pre-GRUB) root (hd0,2,a) chainloader +1 makeactive title Linux root (hd0,1) kernel <from Linux GRUB menu...> initrd <from Linux GRUB menu...> title Windows root (hd0,0) chainloader +1 |
Oracle Solaris 片必须为活动分区。此外,请不要在 Windows 菜单下指示 makeactive。这样做将导致系统每次都引导 Windows。请注意,如果 Linux 已在主引导块上安装了 GRUB,则您不能访问 Oracle Solaris 引导选项。无论您是否将 Solaris 分区指定为活动分区,都无法访问 Solaris 引导选项。
在这种情况下,可以执行以下操作之一:
通过修改 Linux 上的菜单,从 Linux GRUB 进行链接装入。
链接装入是使用其他引导装载器装入不受支持的操作系统的机制。
通过运行带有 -m 选项的 installgrub 命令,将主引导块替换为 Solaris GRUB:
# installgrub -m /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/root-slice |
有关更多信息,请参见 installgrub(1M) 手册页。
有关 Oracle Solaris Live Upgrade 引导环境的信息,请参见《Oracle Solaris 10 9/10 安装指南:Solaris Live 升级和升级规划》。
在 Oracle Solaris 10 中,GRUB 使用多重引导。menu.lst 文件的内容会有所不同,具体取决于您所运行的 Oracle Solaris 发行版、所使用的安装方法以及您是从 Oracle Solaris ZFS 根还是从 UFS 根引导系统。
Oracle Solaris ZFS 根支持 GRUB
如果运行的是受支持的 Oracle Solaris 发行版,则可以选择从 Oracle Solaris ZFS 或 UFS 文件系统引导。有关 menu.lst 文件的说明以及示例,请参见menu.lst 文件说明(ZFS 支持)。
GRUB UFS 引导支持
有关 menu.lst 文件的说明以及示例,请参见menu.lst 文件说明(UFS 支持)。
下面给出了适用于包含 ZFS 引导装载器的引导环境的多个 menu.lst 文件示例:
由于 miniroot 被挂载为实际的根文件系统,所以 menu.lst 文件中的故障安全引导条目不会更改为 ZFS bootfs 属性,即使是从 ZFS 数据集读取故障安全归档文件也是如此。在引导装载器读取 miniroot 之后,不会访问 ZFS 数据集。
title Solaris 10 5/08 s10x_nbu6wos_nightly X86 findroot (pool_rpool,0,a) kernel$ /platform/i86pc/multiboot -B $ZFS-BOOTFS module /platform/i86pc/boot_archive title Solaris failsafe findroot (pool_rpool,0,a) kernel /boot/multiboot kernel/unix -s -B console=ttyb module /boot/x86.miniroot-safe |
title be1 findroot (BE_be1,0,a) bootfs rpool/ROOT/szboot_0508 kernel$ /platform/i86pc/multiboot -B $ZFS-BOOTFS module /platform/i86pc/boot_archive title be1 failsafe findroot (BE_be1,0,a) kernel /boot/multiboot kernel/unix -s -B console=ttyb module /boot/x86.miniroot-safe |
下面给出了支持从 UFS 进行引导的系统上的 menu.lst 文件的示例。
title Solaris 10 5/08 s10x_nbu6wos_nightly X86 findroot (pool_rpool,0,a) kernel /platform/i86pc/multiboot module /platform/i86pc/boot_archive title Solaris failsafe findroot (rootfs0,0,a) kernel /boot/multiboot kernel/unix -s -B console-ttyb module /boot/x86.miniroot-safe |
title be1 findroot (BE_be1,0,a) kernel /platform/i86pc/multiboot module /platform/i86pc/boot_archive title be1 failsafe findroot (BE_be1,0,a) kernel /boot/multiboot kernel/unix -s -B console=ttyb module /boot/x86.miniroot-safe |