JavaScript is required to for searching.
跳过导航链接
退出打印视图
引导和关闭 Oracle Solaris 11.1 系统     Oracle Solaris 11.1 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

1.  引导和关闭系统(概述)

2.  x86: 管理 GRand Unified Bootloader(任务)

x86: GRUB 2 介绍

x86: GRUB 2 配置说明

x86: GRUB 2 分区和设备命名方案

x86: GRUB 2 和 GRUB Legacy 任务比较

x86: 将 GRUB Legacy 系统升级到支持 GRUB 2 的发行版

x86: 如何将 GRUB Legacy 系统升级到支持 GRUB 2 的发行版

x86: 如何将 GRUB Legacy 菜单项迁移到 GRUB 2 中

x86: 在同一系统上维护 GRUB 2 和 GRUB Legacy 引导环境

x86: 使用 bootadm 命令管理 GRUB 配置

x86: 如何列出 GRUB 菜单项

x86: 如何手动重新生成 GRUB 菜单

x86: 如何维护 GRUB 菜单

x86: 如何设置 GRUB 菜单中指定引导项的属性

x86: 如何向 GRUB 菜单添加引导项

x86: 如何从 GRUB 菜单删除引导项

x86: 通过在引导时编辑 GRUB 菜单添加内核参数

x86: 通过编辑 GRUB 菜单在引导时添加 -B prop=val 内核参数

在引导时重定向 Oracle Solaris 控制台

x86: 定制 GRUB 配置

x86: GRUB 高级管理和故障排除

x86: 使用 bootadm install-bootloader 命令安装 GRUB 2

x86: 如何安装引导装载程序

x86: 如何在恢复根池后安装引导装载程序

x86: 如何在缺省位置以外的位置安装 GRUB

x86: 在已安装 GRUB 2 的系统上安装 GRUB Legacy

x86: 如何在已安装 GRUB 2 的系统上安装 GRUB Legacy

3.  关闭系统(任务)

4.  引导系统(任务)

5.  从网络引导系统(任务)

6.  对引导系统进行故障排除(任务)

索引

x86: GRUB 2 介绍

本节提供了以下信息:

GRUB 2 是一个强大的、模块化程度更高的引导装载程序,可支持广泛的平台和固件类型,包括在带有 BIOS 或 UEFI 固件的系统上从统一可扩展固件接口 (Unified Extensible Firmware Interface, UEFI) 固件引导以及从任意大小的 GUID 分区表 (GUID Partition Table, GPT) 分区磁盘引导。GRUB 2 还支持特定于 UEFI 的 GPT 分区方案。

与 GRUB Legacy 一样,GRUB 2 也使用两阶段引导过程。GRUB 2 与 GRUB Legacy 之间的主要差异是 GRUB 2 将许多工具放在动态装入的模块中,这使得核心 GRUB 2(第二阶段引导装载程序)映像更小,从而提高装入速度并使其更灵活。因此,可根据需要在引导时装入 GRUB 功能。

GRUB 2 引入了以下主要更改:

x86: GRUB 2 配置说明

GRUB 2 所用配置与 GRUB Legacy 所用配置完全不同。GRUB Legacy 配置通过 menu.lst 文件进行管理,但 GRUB 2 不使用 menu.lst 文件。相反,GRUB 2 使用配置文件 grub.cfg 存储相同类型的信息。与 menu.lst 文件类似,grub.cfg 文件位于根池的顶层 ZFS 数据集处 (/pool-name/boot/grub),例如 /rpool/boot/grub/grub.cfg

grub.cfg 文件的语法基于 Bash 脚本的子集,它要比以下示例中所示的 menu.lst 文件中使用的指令式语言更复杂更强大:

title title
             bootfs pool-name/ROOT/bootenvironment-name
             kernel$ /platform/i86pc/kernel/$ISADIR/unix -B $ZFS-BOOTFS
             module$ /platform/i86pc/$ISADIR/boot_archive

与之相对,相同配置会存储在 grub.cfg 文件中,如下所示:

menuentry "<title>" {
        insmod part_msdos
        insmod part_sunpc
        insmod part_gpt
        insmod zfs
        search --no-floppy --fs-uuid --set=root f3d8ef099730bafa
        zfs-bootfs /ROOT/<BE name>/@/ zfs_bootfs
        set kern=/platform/i86pc/kernel/amd64/unix
        echo -n "Loading ${root}/ROOT/<BE name>/@$kern: "
        $multiboot /ROOT/<BE name>/@/$kern $kern -B $zfs_bootfs
        set gfxpayload="1024x768x32;1024x768x16;800x600x16;640x480x16;640x480x15;640x480x32"
        insmod gzio
        echo -n "Loading ${root}/ROOT/<BE name>/@/platform/i86pc/amd64/boot_archive: "
        $module /ROOT/<BE name>/@/platform/i86pc/amd64/boot_archive
}

grub.cfg 文件与 menu.lst 文件之间的另一个显著差异是您编辑 grub.cfg 文件。除系统自动生成的菜单项外,menu.lst 文件还支持用户创建的菜单项以及对全局 GRUB 配置文件设置和变量进行的手动更改。相反,grub.cfg 文件是通过使用各种 bootadm 子命令(其中大部分子命令是此发行版中新增的子命令)进行管理的。通过各种 bootadm 子命令,能够管理大多数引导装载程序管理任务。请参见x86: 使用 bootadm 命令管理 GRUB 配置

grub.cfg 文件的另一个特点是,只要更改引导装载程序配置,就会自动生成此文件。此外,在执行某些操作期间以及使用特定引导管理命令时也会自动生成此文件。如果需要,可以通过运行带有新的 generate-menu 子命令的 bootadm 命令来手动生成新的 grub.cfg 文件。仅当引导配置已损坏时,才使用此子命令创建新的 grub.cfg 文件。请参见x86: 如何手动重新生成 GRUB 菜单


注 - grub.cfg 文件的自动生成机制适用于已安装的系统。


GRUB 2 配置存储在以下文件中以供参考:

x86: GRUB 2 分区和设备命名方案

如果您熟悉 GRUB Legacy 的设备命名工作原理,需要注意 GRUB Legacy 命名方案与 GRUB 2 命名方案之间的差异。GRUB Legacy 对分区索引实施基于 0 的命名方案,而 GRUB 2 对分区索引使用基于 1 的命名方案。

GRUB 2 设备命名方案使用以下格式:

(hdX, part-type Y, part-typeZ, ...)

因为分区方案可以嵌套,所以 GRUB 的设备命名方案已更改为支持任意嵌套级别。GRUB 既接受旧式设备命名 (“(hd0,1)”),也接受包括分区方案名称的新式设备命名。例如:

(hd0, gpt1)

上面的示例指的是第一个磁盘上的第一个 GPT 分区。


注 - 只有 GRUB 分区编号发生了更改,磁盘编号未变。磁盘编号仍基于 0。


因为 GRUB 2 依赖文件系统 UUID(或标签)和内置搜索命令来自动查找相应的设备或分区名称,所以您无需手动指定设备名称。下表提供了 GRUB 使用的分区索引和设备名称的示例。

表 2-1 GRUB 2 分区和设备命名方案

设备名称
说明
附注
(hd0, msdos1)
指定第一个磁盘上的第一个 DOS 分区。
(hd0, gpt2)
指定磁盘上的第二个 GPT 分区。
这是其中要安装当前发行版的典型分区示例。
(hd0, msdos1, sunpc1)
指定 Oracle Solaris 分区中的第一个 VTOC 分片,该分片存储在第一个磁盘上的第一个 DOS 分区中。
这是其中要安装此发行版之前的 Oracle Solaris 版本的典型分区示例。

如果需要确定哪个分区编号指的是所需的分区,请通过按 C 键(如果在编辑菜单项,则为 Ctrl-C)访问 GRUB 命令行解释程序。然后,运行 ls 命令以列出 GRUB 可识别的所有分区,其屏幕与下图类似。

image:此图为从中检索有关设备信息的 GRUB 2 命令解释程序屏幕。

ls 命令的 -l 选项显示关于每个分区的更多详细信息,包括文件系统和文件系统 UUID 信息,其屏幕与下图类似。

image:此图为显示命令输出(用于显示 GRUB 已识别的设备)的 GRUB 2 命令解释程序屏幕。

注 - GRUB 从 0 开始对驱动器编号进行计数,不管其类型如何且不区分集成驱动器电子 (Integrated Drive Electronics, IDE) 设备和小型计算机系统接口 (Small Computer Systems Interface, SCSI) 设备。


x86: GRUB 2 和 GRUB Legacy 任务比较

尽管 GRUB 2 与 GRUB Legacy 共享多个特征,但因为 GRUB 2 不使用 menu.lst 文件,所以许多引导管理任务在支持 GRUB 2 的系统上会以不同的方式执行。例如,通过使用 bootadm 命令的新子命令管理 GRUB 菜单并执行各种引导装载程序管理任务。

-P pool 参数适用于大多数 bootadm 子命令。通过此选项,可以查看或更改特定根池的 GRUB 菜单和引导项。如果运行的操作系统支持 GRUB Legacy,则 -P 选项可能适用于这些 bootadm 子命令。

例如,您可以针对特定根池列出 GRUB 菜单,如下所示:

# bootadm list-menu -P pool-name

下表比较了与 GRUB Legacy 等效的一些常见 GRUB 2 任务和命令。有关详细说明,请参见 bootadm(1M) 手册页和x86: 使用 bootadm 命令管理 GRUB 配置

表 2-2 GRUB 2 任务与 GRUB Legacy 任务的比较

任务或命令
GRUB 2 方法
GRUB Legacy 方法
列出 GRUB 菜单中的当前引导项。
bootadm list-menu

您还可以按项编号标题查看各项。按标题查看项:

bootadm list-menu entry-title

如果标题中含有空格,则必须使用引号来防止将标题解析为多个参数。例如:

bootadm list-menu `This is a menu entry with a title'

通过指定项编号查看项:

bootadm list-menu -i entry-number

bootadm list-menu
生成一个新的 GRUB 配置文件 (grub.cfg),其中包含缺省引导装载程序设置,并针对系统上每个根池上的每个 Oracle Solaris 引导环境生成一个菜单项。
bootadm generate-menu

如果系统上存在现有 grub.cfg 文件,请在 generate-menu 子命令中使用 -f 选项。此语法会销毁现有的 GRUB 2 配置并将其替换为新配置。

如果使用 -P 选项为系统上的特定根池生成 GRUB 2 配置文件,请注意,生成的 grub.cfg 文件存储在该根池的顶层 ZFS 数据集。

手动编辑 menu.lst 文件以添加新信息。
向 GRUB 菜单添加新项。
通过指定项编号添加项:

bootadm add-entry -i entry-number

通过指定项标题添加项:

bootadm add-entry entry-title

手动向 menu.lst 文件中添加项。
更改 GRUB 菜单中的项。
通过指定项编号更改项:

bootadm change-entry -i entry-number key=value

通过指定项标题更改项:

bootadm change-entry entry-title key=value

如果标题中含有空格,则必须使用引号来防止将标题解析为多个参数。

此子命令用于更改各个引导项,例如,将 Oracle Solaris 控制台设备指定为内核参数。如果项标题匹配多个菜单项,则仅修改第一项。

通过在引导时编辑 GRUB 菜单还可以更改引导项,就像在先前的发行版中对 GRUB Legacy 项所做的一样。

手动编辑 menu.lst 文件以进行持久性更改。

作为一种备用方案,在引导时编辑 GRUB 菜单以更改引导项,这些更改仅在下次引导系统之前有效。

从 GRUB 菜单中删除项。
通过指定项编号删除项:

bootadm remove-entry -i entry-number

通过指定项标题删除项:

bootadm remove-entry entry-title

如果已指定标题,则会删除带有此标题的所有项。

手动从 menu.lst 文件中删除项。
管理 GRUB 菜单。例如,设置要从中进行引导的缺省 GRUB 菜单项。
bootadm set-menu key= value
bootadm set-menu
向 GRUB 菜单添加定制菜单项(例如 Linux 项)。
custom.cfg 文件添加项,以确保使用正确的 GRUB 2 配置文件语法。请参见x86: 定制 GRUB 配置

注 - 必须首先创建此文件。


在安装 Oracle Solaris 后向 menu.lst 文件添加信息。
在引导时编辑 GRUB 菜单以添加引导参数。
1. 使用方向键中断引导过程以选择所需菜单项,然后键入 e

2. 将引导参数添加到指定引导项的 $multiboot 行的末尾。

3. 按 Ctrl-X 组合键从修改的项引导。如果系统控制台位于串行设备上,则在 UEFI 系统上可能无法正确识别 F10 键。在这种情况下,请使用 Ctrl-X 组合键。


注 - 编辑菜单项时按 Esc 键可返回到菜单项列表,所有编辑内容都将丢失。


1. 通过键入 e 中断引导过程。

2. 将引导参数添加到指定引导项的 kernel$ 行的末尾。

3. 按回车键,然后键入 b 以引导系统。

安装引导装载程序。
bootadm install-bootloader

此命令可在镜像的根池中的所有设备上自动安装引导装载程序。

installgrub(适用于基于 x86 的系统)和 installboot(适用于基于 SPARC 的系统)。
为 UEFI 或 BIOS 固件创建引导分区。
使用 zpool create 命令的新 -B 选项自动创建适用于固件的引导分区,同时创建要将新的 ZFS 池存储到的 ZFS 数据分区。

通过将磁盘连接到根池,可自动创建相应的引导分区并在该磁盘上安装引导装载程序。请参见《Oracle Solaris 11.1 管理:ZFS 文件系统》中的第 4  章 "管理 ZFS 根池组件"

GRUB Legacy 支持带有 BIOS 固件的系统,因此不需要单独的引导分区。