系统管理指南:基本管理

在基于 x86 的系统上修改引导行为(任务图)

任务 

说明 

参考 

使用 eeprom 命令设置引导文件参数。

使用 eeprom 命令在基于 x86 的系统上修改引导行为。使用 eeprom 命令设置的引导选项会在系统重新引导后持续生效,除非通过在引导时在 GRUB 菜单中修改内核行为覆盖了这些选项。

x86: 如何使用 eeprom 命令修改引导行为

通过在引导时编辑 GRUB 菜单修改引导行为。 

通过在引导时编辑 GRUB 菜单修改引导行为。通过在 GRUB 菜单中修改引导行为指定的引导选项仅在系统下一次重新引导之前持续生效。 

x86: 如何通过在引导时编辑 GRUB 菜单修改引导行为

通过手动编辑 menu.lst 文件修改引导行为。

通过编辑 menu.lst 配置文件以添加新的 OS 项或重定向控制台,从而修改引导行为。您对该文件进行的更改会在系统重新引导后持续生效。

x86: 如何通过编辑 menu.lst 文件修改引导行为

修改 menu.lst 文件以包含支持 findroot 命令的条目。

在安装或升级后,可以向 menu.lst 菜单中添加其他使用 findroot 命令的菜单项。

x86: 如何添加使用 findroot 命令的 GRUB 菜单项

在基于 x86 的系统上修改引导行为

在基于 x86 的系统上修改引导行为的主要方法如下所述:

Procedurex86: 如何使用 eeprom 命令修改引导行为

  1. 成为超级用户或同等角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 更改指定的参数。


    # eeprom parameter=new-value
    
  3. 确认已设置新的参数。


    # eeprom parameter
    

    输出应该显示指定参数的新的 eeprom 值。


示例 11–3 x86: 使用 eeprom 命令设置 boot-file 参数

本示例说明如何手动指定系统引导 64 位内核。系统必须支持 64 位计算。


# eeprom boot-file=kernel/amd64/unix

本示例说明如何在具备 64 位计算能力的系统上手动引导 32 位内核。


# eeprom boot-file=kernel/unix

本示例说明如何在系统上恢复缺省的自动检测引导行为。


# eeprom boot-file=""

x86: 通过在引导时编辑 GRUB 菜单修改引导行为

以下是一个 GRUB 主菜单示例,该菜单所处的 Oracle Solaris 发行版支持从 ZFS 根文件系统引导系统。该菜单基于 menu.lst 文件的内容,包含了系统中所有可引导的 OS 实例的菜单项。除非另有指定,否则该菜单中的第一项是缺省项。要将其他引导项指定为缺省项,请向 menu.lst 文件中添加 default= n 命令,其中,n 是一个从 0(第一个引导项)开始的数字。


GNU GRUB  version 0.95  (637K lower / 3144640K upper memory)
 +-------------------------------------------------------------------------+
be1)
be1 failsafe
be3
be3 failsafe
be2
be2 failsafe
+-------------------------------------------------------------------------+
      Use the ^ and v keys to select which entry is highlighted.
      Press enter to boot the selected OS, 'e' to edit the
      commands before booting, or 'c' for a command-line.

注 –

menu.lst 文件中包含的信息具体视所使用的 Oracle Solaris 发行版和安装方法而异。


要编辑 GRUB 菜单中的引导项,请使用方向键选择该项,然后键入 e


GNU GRUB  version 0.95  (637K lower / 3144640K upper memory)
 +-------------------------------------------------------------------------+
findroot (BE_be1,0,a)
bootfs rpool/ROOT/szboot_0508
kernel$ /platform/i86pc/multiboot -B $ZFS-BOOTFS 
module /platform/i86pc/boot_archive
 +-------------------------------------------------------------------------+
      Use the ^ and v keys to select which entry is highlighted.
      Press enter to boot the selected OS, 'e' to edit the
      commands before booting, or 'c' for a command-line.

有关在引导时编辑 GRUB 菜单的说明,请参见x86: 如何通过在引导时编辑 GRUB 菜单修改引导行为

在 Oracle Solaris 10 中编辑 GRUB 菜单

以下示例说明了各种 GRUB 实现中的编辑菜单:

GRUB ZFS 支持:


grub edit> kernel$ /platform/i86pc/multiboot -B $ZFS-BOOTFS,prop=value
[,prop=value...]][-asrvxk] [-m smf-options] [-i altinit]

注 –

在具有 ZFS 支持的系统上添加引导参数时,请在缺省的 -B -$ZFS-BOOTFS 参数之后添加任何附加的 B 选项。


GRUB UFS 支持:


grub edit> kernel /platform/i86pc/multiboot [-asrvxk] [-m smf-options]
[-i altinit][-B prop=value [,prop=value...]]

可以在引导时通过编辑 GRUB 菜单指定的引导参数

下表介绍了您可以通过在引导时编辑 GRUB 菜单指定的引导参数和选项:

multiboot

指定要引导的内核

-a

提示用户输入配置信息

-s

在单用户模式中引导系统

-r

指定重新配置引导

系统将探测所有连接的硬件设备,然后指定文件系统中的节点,以便仅表示实际找到的那些设备。

-v

在启用详细消息的情况下引导系统

-x

勿在群集模式中引导系统

-k

在启用内核调试器的情况下引导系统

-m smf-options

控制服务管理工具 (Service Management Facility, SMF) 的引导行为

有两类选项:恢复选项和消息选项。

-i altinit

将备用可执行文件指定为原始进程。altinit 是指向可执行文件的有效路径。

-B prop=value[,prop=value]...

指定内核引导属性。

以下是使用 -B prop=val 选项在 GRUB 菜单中修改引导行为的各种方式:

-B console=ttya

将控制台重定向到 ttya

-B acpi-enum=off

禁用设备的高级配置和电源接口 (Advanced Configuration and Power Interface, ACPI) 枚举。

-B console=ttya,acpi-enum=off

将控制台重定向到 ttya 并禁用设备的 ACPI 枚举。

-B acpi-user-options=0x2

完全禁用 ACPI。


注 –

使用 eeprom 命令以及在 GRUB 命令行上指定属性时,GRUB 命令优先。


Procedurex86: 如何通过在引导时编辑 GRUB 菜单修改引导行为

通过在引导时编辑 GRUB 菜单修改 GRUB 内核行为时,所做的更改不会在系统重新引导后持续生效。当您下次引导系统时,将恢复缺省的引导行为。

  1. 重新引导系统。

    引导序列开始时,将显示 GRUB 主菜单。

  2. 使用方向键选择引导项进行编辑。

  3. 键入 e 以访问 GRUB 编辑菜单。

  4. 在此菜单中,选择 kernelkernel$ 行。

  5. 键入 e 以向该行中添加引导参数。

  6. 键入任何附加的引导参数。

  7. 按回车键以保存您的更改,并返回到上一级菜单。


    注 –

    按 Esc 键返回 GRUB 主菜单,而不保存所做更改。


  8. 要引导系统,请键入 b

    您所做的更改将在引导系统时生效。


示例 11–4 x86: 在具备 64 位计算能力的系统上引导 32 位内核

要在具备 64 位计算能力的系统上引导 32 位内核,请添加 kernel/unix 参数。


grub edit> kernel /platform/i86pc/multiboot kernel/unix


示例 11–5 x86: 重定向串行控制台

要将串行控制台重定向到 ttyb,请添加 -B console=ttyb 参数。


grub edit> kernel /platform/i86pc/multiboot -B console=ttyb

或者,可以使用 input-device/output-device 属性,如以下示例所示:


grub edit> kernel /platform/i86pc/multiboot -B input-device=ttyb,output-device=ttyb

以下示例说明如何覆盖串行行速度:


grub edit> kernel /platform/i86pc/multiboot -B ttyb-mode="115200,8,n,1,-"

注意:在前面的示例中,属性值包含逗号,这也是属性分隔符。为避免混淆属性解析器,请使用双引号引住整个属性值。


x86: 通过编辑 menu.lst 文件修改引导行为

可以对 GRUB 菜单(它基于 menu.lst 配置文件)进行自定义。安装或升级您的系统时,bootadm 命令会自动更新 menu.lst 文件以反映该特定发行版所支持的菜单项。重新引导系统时,此文件中列出的任何新安装的 OS 都将在 GRUB 菜单中显示为引导项。请注意,在安装除 Oracle Solaris 以外的操作系统时,您将需要在安装之后手动将菜单项添加到 menu.lst 文件中。

以下是一个典型 GRUB 主菜单示例,该菜单基于 menu.lst 文件的内容。该 GRUB 主菜单由所有可用的引导项外加一个故障安全归档文件组成。


GNU GRUB  version 0.95  (631K lower / 2095488K upper memory)
 +-------------------------------------------------------------------------+
 | Solaris 10.1 ... X86                                                    |
 | Solaris failsafe                                                        |
 |                                                                         |
 +-------------------------------------------------------------------------+

可配置的超时功能可用于引导缺省的 OS 项。所引导的缺省 OS 引导项可通过 default 命令进行配置。安装软件通常将此命令设置为引导有效的引导项之一。要引导 Oracle Solaris OS 的不同实例(如果适用)或者引导不同的 OS,请使用方向键突出显示不同的引导项。然后,按 Enter 键以引导该项。请注意,如果未设置 default 命令,将引导 GRUB 菜单中的第一个引导项。

只有活动的 menu.lst 文件可用于引导系统。要修改在引导系统时显示的 GRUB 菜单,请编辑活动的 GRUB menu.lst 文件。更改任何其他 menu.lst 文件不会对引导系统时显示的菜单产生任何影响。要确定活动的 menu.lst 文件的位置,请使用 bootadm 命令的 list-menu 子命令。有关使用 bootadm 命令的更多信息,请参见使用 bootadm 命令管理引导归档文件

有关 Solaris OS 中每个 GRUB 实现中的 menu.lst 文件的完整描述,请参见x86: 受支持的 GRUB 版本

Procedurex86: 如何通过编辑 menu.lst 文件修改引导行为

出于以下某一原因,您可能需要修改 menu.lst 文件:

开始之前

因为只有活动的 GRUB menu.lst 文件可用于引导系统,所以请确保编辑正确的文件。更改任何其他 GRUB menu.lst 文件不会对引导系统时显示的菜单产生任何影响。

活动 menu.lst 文件的位置随您的系统具有 UFS 根还是 ZFS 根而异。

可以使用带有 list-menu 子命令的 bootadm 命令确定活动 GRUB menu.lst 文件的位置。


# bootadm list-menu

有关 bootadm 命令的更多信息,请参见 bootadm(1M) 手册页。

  1. 成为超级用户或同等角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 要向活动 menu.lst 文件中添加新的 OS 项,请使用文本编辑器修改该文件。

    menu.lst 文件中的注释提供了添加新的 OS 项所必需的信息。

    以下是运行具有 ZFS 引导支持的发行版的系统中的 menu.lst 文件示例。menu.lst 文件中的引导项随您所运行的 Oracle Solaris 发行版而异。


    #---------- ADDED BY BOOTADM - DO NOT EDIT ----------
    title Solaris Solaris 10 s10x_nbu6wos_nightly X86
    kernel$ /platform/i86pc/multiboot -B $ZFS-BOOTFS
    module /platform/i86pc/boot_archive
    #---------------------END BOOTADM--------------------

    注意 – 注意 –

    请不要直接编辑 menu.lst 文件的原始内容。要对该文件中的任何 OS 项进行更改,请手动编辑该文件以复制现有内容。然后,对所复制的内容进行修改。

    另请注意:当手动向文件中添加新项时,绝不包含安全注释,例如,“Added by bootadm”。系统将保留这些注释备用。不使用这些注释可以确保这些项在软件升级期间保持完整无损。


    如果您已添加除缺省项以外的任何附加项,请手动进行等效更改。

    如果原始 menu.lst 文件中存在 [-B *] 和 [*] 标志,则必须保留这些标志。另外,故障安全项应该总是具有 -s 标志。

  3. 添加必需的信息之后,保存该文件。

    请注意,对该文件所做的任何更改将在下次重新引导系统时生效。


    提示 –

    如果您正在运行 Linux,然后安装 Oracle Solaris,则当系统重新引导时,Linux 项不会显示在 GRUB 菜单中。在安装或升级系统之前,请保存包含 Linux 信息的 menu.lst 文件的副本。安装后,请将 Linux 信息添加到 Solaris 分区中新近创建的 menu.lst 文件中。


    因为您对 menu.lst 文件所做的更改与 Oracle Solaris OS 不直接相关,所以无法使用 eeprom 命令进行这些更改。您必须直接编辑该文件。请注意, 软件升级过程会保留您对 menu.lst 文件所做的任何更改。


    注意 – 注意 –

    GRUB 可以引导 Linux 和 Oracle Solaris。但是,Linux GRUB 不能引导 Oracle Solaris。

    请始终确保满足以下条件之一:

    • fdisk 分区是活动分区,且该分区安装了 GRUB,并且 menu.lst 文件是活动的 GRUB 菜单。

    • Oracle Solaris GRUB 被安装到主引导记录 (Master Boot Record, MBR),并且它引用 fdisk 分区中的 menu.lst


    有关与每个 Oracle Solaris 发行版相关的 GRUB menu.lst 的详细描述,请参见 x86: 受支持的 GRUB 版本


示例 11–6 具有 Oracle Solaris ZFS 引导装载器的系统上的 menu.lst 文件

以下示例说明 menu.lst 文件在安装了 Oracle Solaris ZFS 引导装载器的系统中的样子。缺省情况下,此系统将从 ZFS 根文件系统引导。请注意,该文件的内容随安装类型而异。

全新安装或标准升级:


title Solaris 10 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

Oracle Solaris Live Upgrade


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-sa


示例 11–7 具有 UFS 引导装载器的系统中的 menu.lst 文件

以下示例说明 menu.lst 文件在安装了 UFS 根文件系统的系统中的样子。缺省情况下,此系统将从 UFS 根文件系统引导。

全新安装或标准升级:


title Solaris 10 s10x_nbu6wos_nightly X86
findroot (rootfs0,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

Oracle Solaris Live Upgrade:


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

x86: 找到活动的 GRUB menu.lst 文件

在具有 ZFS 根的系统上,活动的 menu.lst 文件通常位于 /pool-name/boot/grub/menu.lst 中。

在具有 UFS 根的系统上,活动的 menu.lst 文件通常位于 /boot/grub/menu.lst 中。

要找到活动的 GRUB 菜单,请使用带有 list-menu 子命令的 bootadm 命令。


# bootadm list-menu

此命令还将列出活动 menu.lst 文件的内容:


# bootadm list-menu
The location for the active GRUB menu is: /pool-name/boot/grub/menu.lst
default 0
timeout 10
0 be1
1 be1 failsafe
2 be3
3 be3 failsafe
4 be2
5 be2 failsafe

有关使用 bootadm 命令的进一步说明,请参见使用 bootadm 命令管理引导归档文件

x86: findroot 命令的实现

所有安装方法(包括 Oracle Solaris Live Upgrade)现在都使用 findroot 命令来指定要引导基于 x86 的系统上的哪个磁盘片。此增强功能支持具有 ZFS 根以及 UFS 根的系统引导。此信息位于 GRUB 使用的 menu.lst 文件中。以前,root 命令 root (hd0.0.a) 用于明确指定要引导哪个磁盘片。

安装方法包括 Oracle Solaris Live Upgrade、Oracle Solaris JumpStart 和安装程序 GUI 程序。

findroot 命令后跟片上的签名文件 (mysign, 0, a),其中 mysign 是位于 /boot/grub/bootsign 目录中的签名文件的名称。从 ZFS 根引导系统时,ZFS GRUB 插件会寻找并尝试挂载 fdisk 分区 0 的片 a 中的 ZFS 文件系统。

签名文件的名称随所使用的安装方法而异。有关 findroot 命令使用的命名约定的更多信息,请参见findroot 命令使用的命名约定

在安装或升级后,可以向 GRUB 菜单中添加其他也使用 findroot 命令的菜单项。有关说明,请参见x86: 如何添加使用 findroot 命令的 GRUB 菜单项


注意 – 注意 –

引导签名必须是唯一的。不要使用或删除系统生成的签名或 Oracle Solaris 软件多个实例相同的用户签名。否则,可能会导致引导不正确的 OS 实例或者阻止系统引导。


请注意,在某些情况下(例如,为了引导 Windows),仍然可以在 menu.lst 文件中使用 root 命令。但是,当 findroot 命令为首选项时,不要使用 root 命令。


示例 11–8 x86: 支持 UFS 引导装载器的系统中的缺省 menu.lst 文件

以下示例介绍一个使用 findroot 命令的 menu.lst 文件项的格式:


title Solaris 10 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


示例 11–9 x86: 支持 Oracle Solaris ZFS 引导装载器的缺省 menu.lst 文件

以下是支持 Oracle Solaris ZFS 引导装载器的系统中的 menu.lst 文件示例。在执行 Oracle Solaris Live Upgrade 时,将自动在该文件中添加用于从 ZFS 根文件系统引导的信息。


title be1
findroot (BE_be1,0,a)
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

Procedurex86: 如何添加使用 findroot 命令的 GRUB 菜单项

以下过程说明如何通过使用 findroot 命令的用户定义的项来手动更新 menu.lst 文件。通常,这些项在安装或升级之后添加。有关添加使用 findroot 命令的用户定义项的准则,请参见x86: findroot 命令的实现

  1. 成为超级用户或同等角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 在要引导的根 (/) 文件系统或根池中创建引导签名文件。

    • 对于 ZFS 池 my-pool,请在 /my-pool/boot/grub/bootsign 目录中创建引导签名文件。


      #  touch   /my-pool/boot/grub/bootsign/user-sign
      
    • 对于 UFS 文件系统,请在要引导的根文件系统的 /boot/grub/bootsign 目录中创建引导签名文件。


      #  touch   /boot/grub/bootsign/user-sign
      

    注 –

    请确保您为引导签名选择的文件名是唯一的。不要使用系统生成的签名或在 Oracle Solaris 的多个实例中重复的用户签名。否则,可能会阻止系统引导,或者会导致错误的 Oracle Solaris 实例引导。


  3. 添加一个包含 findroot 命令的菜单项。

    1. 找到活动的 menu.lst 文件:


      # bootadm list-menu
      
    2. 使用文本编辑器编辑活动的 menu.lst 文件,添加以下项:


      title    User Solaris boot entry
      findroot  (user-sign, 3, c)
      kernel$   /platform/i86pc/multiboot
      module  /platform/i86pc/boot_archive

      在上一示例中,3 表示第 4 个 fdisk 分区(分区号从 0 开始)。c 表示 Solaris fdisk 分区内的片(片号从 a 开始)。

  4. 重新引导系统。

    新项会出现在 GRUB 菜单中,并且可以选择该项以引导指定的 Oracle Solaris OS 实例。