跳过导航链接 | |
退出打印视图 | |
引导和关闭 Oracle Solaris 11.1 系统 Oracle Solaris 11.1 Information Library (简体中文) |
2. x86: 管理 GRand Unified Bootloader(任务)
x86: 将 GRUB Legacy 系统升级到支持 GRUB 2 的发行版
x86: 如何将 GRUB Legacy 系统升级到支持 GRUB 2 的发行版
x86: 如何将 GRUB Legacy 菜单项迁移到 GRUB 2 中
x86: 在同一系统上维护 GRUB 2 和 GRUB Legacy 引导环境
x86: 通过编辑 GRUB 菜单在引导时添加 -B prop=val 内核参数
x86: 使用 bootadm install-bootloader 命令安装 GRUB 2
x86: 在已安装 GRUB 2 的系统上安装 GRUB Legacy
本节提供了以下信息:
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 引入了以下主要更改:
配置更改
GRUB 2 配置句法与 GRUB Legacy 配置句法不同。GRUB Legacy 使用的 menu.lst 文件已替换为新的配置文件 grub.cfg。与 menu.lst 文件不同,grub.cfg 文件由引导管理命令自动重新生成。因此,永远不应直接编辑此文件,因为在重新生成 grub.cfg 文件时会立即销毁所有编辑。请参见x86: GRUB 2 配置说明。
分区和设备命名更改
GRUB 2 对分区和已更改的设备命名方案使用的是基于 1 的索引,而不是基于 0 的索引。请参见x86: GRUB 2 分区和设备命名方案。
引导装载程序和 GRUB 菜单管理更改
通过 bootadm 命令管理 grub.cfg 文件。通过修改的子命令和新的子命令,能够执行先前通过编辑 menu.lst 文件来完成的大多数管理任务。两个示例包括为 Oracle Solaris 引导实例设置引导属性(例如内核参数)和管理引导装载程序设置。请参见x86: 使用 bootadm 命令管理 GRUB 配置。
GRUB 菜单和屏幕更改
现在,各种 GRUB 菜单和一些任务(例如通过在引导时编辑 GRUB 菜单添加内核参数)的运行方式有所不同。根据需要,本文档内的各种任务中对这些差异进行了说明。
其他与引导装载程序相关的命令更改
installgrub 命令在此发行版中已过时。请勿在支持 GRUB 2 的系统上使用此命令安装引导装载程序,如果执行此操作,则会阻止系统引导。相反,如果运行的发行版支持 GRUB 2,请使用 bootadm install-bootloader 命令。此命令将取代 installgrub 命令(适用于 x86 平台)的功能和 installboot 命令(适用于 SPARC 平台)的功能。请参见x86: 使用 bootadm install-bootloader 命令安装 GRUB 2。
但是仅当您已验证要安装的 GRUB Legacy 版本支持根池的 ZFS 池版本之后,且在系统上没有任何其余 GRUB 2 引导环境时,才可以在该系统上使用 installgrub 命令安装 GRUB Legacy。有关说明,请参见x86: 如何在已安装 GRUB 2 的系统上安装 GRUB Legacy。
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 配置存储在以下文件中以供参考:
grub.cfg-为 GRUB 2 使用的主配置文件。
/pool-name /boot/grub/menu.conf-为 Oracle Solaris 用于生成最终 grub.cfg 配置文件的文件。
menu.conf 文件是一个单独的 GRUB 元配置文件,用于存储计算机可解析的 GRUB 2 配置表示。
注 - 请勿直接编辑此文件。
/pool-name/boot/grub/custom.cfg-是一个可编辑文件,与 grub.cfg 和 menu.conf 文件驻留在同一位置。custom.cfg 文件由管理员创建(缺省情况下不在系统上)。保留此文件的目的是在基本 GRUB 配置中添加更复杂的结构(菜单项或其他脚本信息)。
在 grub.cfg 文件中引用 custom.cfg 文件。如果系统上存在 custom.cfg 文件,则此文件中的命令或指令将由 grub.cfg 文件进行处理。有关更多信息,请参见x86: 定制 GRUB 配置。
如果您熟悉 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 分区和设备命名方案
|
如果需要确定哪个分区编号指的是所需的分区,请通过按 C 键(如果在编辑菜单项,则为 Ctrl-C)访问 GRUB 命令行解释程序。然后,运行 ls 命令以列出 GRUB 可识别的所有分区,其屏幕与下图类似。
ls 命令的 -l 选项显示关于每个分区的更多详细信息,包括文件系统和文件系统 UUID 信息,其屏幕与下图类似。
注 - GRUB 从 0 开始对驱动器编号进行计数,不管其类型如何且不区分集成驱动器电子 (Integrated Drive Electronics, IDE) 设备和小型计算机系统接口 (Small Computer Systems Interface, SCSI) 设备。
尽管 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 任务的比较
|