跳过导航链接 | |
退出打印视图 | |
引导和关闭 Oracle Solaris 11.1 系统 Oracle Solaris 11.1 Information Library (简体中文) |
2. x86: 管理 GRand Unified Bootloader(任务)
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: 通过编辑 GRUB 菜单在引导时添加 -B prop=val 内核参数
x86: 使用 bootadm install-bootloader 命令安装 GRUB 2
x86: 在已安装 GRUB 2 的系统上安装 GRUB Legacy
本节提供了以下过程:
在支持 GRUB Legacy 的系统上,GRUB 配置和 GRUB 菜单主要通过编辑 menu.lst 文件进行管理。在支持 GRUB 2 的系统上,将使用 grub.cfg 文件。但是,此文件不能手动编辑。不过,可通过引导管理接口 bootadm 来管理此文件。bootadm 命令可用于管理先前通过编辑 menu.lst 文件而执行的大多数任务。这些任务包括管理引导装载程序设置、GRUB 菜单以及特定引导项的各个属性。
注 - 因为只要使用 bootadm 命令或 beam 命令更改引导装载程序就会覆盖 grub.cfg 文件且无通知,所以永远不应直接编辑此文件。
以下 bootadm 子命令已修改为支持 GRUB 2 配置的管理:
显示 GRUB 菜单中的当前引导项。
按标题或项编号查看各个菜单项,如下所示:
# bootadm list-menu -i 0 the location of the boot loader configuration files is: /rpool/boot/grub title: Oracle Solaris 11 FCS kernel: /platform/i86pc/kernel/$ISADIR/unix kernel arguments: -B $ZFS-BOOTFS -v boot archive: /platform/i86pc/$ISADIR/boot_archive ZFS root pool: rpool
维护 GRUB 菜单。此子命令用于将特定 GRUB 菜单项设置为缺省值以及设置其他菜单选项和引导装载程序选项。
以下 bootadm 子命令为新增子命令:
安装系统引导装载程序。此子命令适用于 x86 和 SPARC 平台。
注 - 因为 SPARC 平台不使用 GRUB,所以无任何引导菜单需要使用 bootadm 命令进行管理。但是,bootadm 命令可在基于 SPARC 的系统上用于列出引导归档文件的内容、手动更新引导归档文件和安装引导装载程序。请参见管理 Oracle Solaris 引导归档文件。
以下过程介绍了如何使用 bootadm 命令管理 GRUB 配置和 GRUB 菜单。有关更完整的信息,请参见 bootadm(1M) 手册页。
使用 bootadm 命令的 list-menu 子命令列出系统上的当前 GRUB 菜单项列表。此信息由 grub.cfg 文件提供。命令输出还包括位置引导装载程序配置文件、缺省引导项编号、autoboot-timeout 值和每个引导项的标题。
$ bootadm list-menu
例如:
$ bootadm list-menu the location of the boot loader configuration files is: /rpool/boot/grub default 0 console graphics timeout 30 0 Oracle Solaris 11 FCS 1 Oracle Solaris backup-1 2 Oracle Solaris 11 11.1
如果在运行此命令时指定项标题或项编号,也会显示此信息。
$ bootadm list-menu -i entry-number
例如:
$ bootadm list-menu -i 0 the location of the boot loader configuration files is: /rpool/boot/grub title: Oracle Solaris 11 FCS kernel: /platform/i86pc/kernel/$ISADIR/unix kernel arguments: -B $ZFS-BOOTFS -v boot archive: /platform/i86pc/$ISADIR/boot_archive ZFS root pool: rpool
使用 bootadm generate-menu 命令手动重新生成包含系统上当前安装的 OS 实例的 grub.cfg 文件。
/usr/lib/grub2/bios/etc/default/grub 或 /usr/lib/grub2/uefi64/etc/default/grub 文件中的信息与 GRUB 元配置文件 rpool/boot/grub/menu.conf 中的信息合并后用于生成最终的 grub.cfg 文件。
# bootadm generate-menu
# bootadm generate-menu -f
# bootadm generate-menu -P pool-name
# bootadm list-menu
注 - 如果未看到更改,请检查 grub.cfg 文件以确认进行了更改。
使用 bootadm 命令的 set-menu 子命令维护 GRUB 菜单。 例如,您可以使用此命令更改 GRUB 菜单中的菜单超时和缺省引导项。
# bootadm list-menu
# bootadm set-menu [-P pool] [-R altroot [-p platform]] key=value
有关可使用 set-menu 子命令指定的每个值的更多信息,请参见 bootadm(1M) 手册页。可使用 set-menu 子命令的常见方法示例均遵循此过程。
# bootadm list-menu
注 - 如果未看到更改,请检查 grub.cfg 文件以确认进行了更改。
示例 2-1 更改 GRUB 菜单中的缺省引导项
使用带有相应 key=value 选项的 bootadm set-menu 命令设置 GRUB 菜单中的缺省项编号(例如,0、1 或 2)。此编号指定计时器到期时要引导的操作系统。
例如,以下 bootadm list-menu 命令的输出将缺省引导项显示为 2,其为 Oracle Solaris 11_test:
# bootadm list-menu The location of the boot loader configuration file is /rpool/boot/grub default 2 console graphics timeout 30 0 Oracle Solaris 11/11 1 Oracle Solaris 11.1 2 Oracle Solaris 11_test
在此示例中,控制台设置为 graphics 模式。可将控制台设置成的其他模式包括 text 和 serial。
您可以将缺省引导项设置为 1,如下所示:
# bootadm set-menu default=1 # bootadm list-menu The location of the boot loader configuration file is /rpool/boot/grub default 1 console graphics timeout 30 0 Oracle Solaris 11/11 1 Oracle Solaris 11.1 2 GRUB2
在此示例中,缺省菜单项现在为 1。系统重新引导后,将在缺省计时器到期后自动引导新的 Oracle Solaris 项。
您还可以使用 change-entry 子命令设置 GRUB 菜单中的缺省项。请参见x86: 如何设置 GRUB 菜单中指定引导项的属性。
示例 2-2 更改 GRUB 菜单中的菜单超时值
使用带有相应 key=value 选项的 bootadm set-menu 命令设置菜单超时值。
在以下示例中,bootadm list-menu 命令的输出显示已将 30 秒的缺省超时值更改为 45 秒。此更改将在下次引导系统时生效。
# bootadm list-menu The location of the boot loader configuration file is /rpool/boot/grub default 2 console graphics timeout 30 0 Oracle Solaris 11/11 1 Oracle Solaris 11.1 2 Oracle Solaris 11_test # bootadm set-menu timeout=45 # bootadm list-menu The location of the boot loader configuration file is /rpool/boot/grub default 2 console graphics timeout 45 0 Oracle Solaris 11/11 1 Oracle Solaris 11.1 2 Oracle Solaris 11_test
示例 2-3 设置 GRUB 控制台类型
您可以使用 bootadm 命令的 set-menu 子命令设置的一个值是控制台类型。以此方式对控制台类型进行的更改会在系统重新引导后持续有效。
例如,您在 grub.cfg 文件中将控制台类型设置为 serial,如下所示:
# bootadm set-menu console=serial
您还可以将控制台类型设置为 text(适用于纯文本控制台)。如果使用的是 BIOS 串行重定向,请选择此选项。或者,您可以将控制台类型设置为 graphics。此选项提供了一个更具图形化的菜单,此时会用到一个后台映像。
将控制台类型设置为 serial 后,可配置 GRUB 2 在引导时初始化串行端口时使用的串行参数。如果未指定 serial_params 值,则在缺省情况下使用串行端口 0 (COM1/ttya) 而不是指定一个速度。请注意,如果未指定速度且仅指定了一个端口(例如 serial_params=0),则不会定义所使用的速度,此速度将为执行 GRUB 之前串行端口初始化到的任何速度。如果要确保使用特定速度,则需要使用 serial_params 显式设置它们。
将 serial_params 键值添加到 bootadm 命令行中,如下所示:
# bootadm set-menu console=serial serial_params=port[,speed[,data bits[,parity[,stop bits]]]]
端口号。0 到 3 之间的任意数字(通常 0 用于 ttya 或 COM1)可用于分别指定 ttya 到 ttyd 之间的端口或 COM1 到 COM4 之间的端口。
是串行端口使用的速度。如果省略此值,GRUB 2 将使用串行端口在初始化后所使用的速度。如果串行端口未初始化,则无法指定速度可能导致不可预测的输出。如果不确定串行端口是否已初始化,且未使用 BIOS 控制台重定向,则最好指定一个速度值。
是使用 7 或 8 值指定的。
被分别指定为 e、o、n(分别代指 even、odd 或 none)。
是使用 0 或 1 值指定的。
除 port 参数之外的所有串行参数均为可选参数。
使用 bootadm 命令的 change-entry 子命令设置 GRUB 菜单中指定引导项或以逗号分隔的项列表的某些引导属性。可以通过项标题或项编号指定项。如果多个项具有同一标题,则会影响所有项。
有关如何在引导时通过编辑 GRUB 菜单来设置特定引导项的属性的信息,请参见x86: 通过在引导时编辑 GRUB 菜单添加内核参数。
# bootadm list-menu
# bootadm change-entry [-P pool] {[entry-title[,entry-title...]}] | -i entry-number[,entry-number]...]} { key=value [ key=value ...] | set-default }
如果指定的值包含空格,则必须将此值括在单引号或双引号中。
有关可使用 change-entry 子命令指定的每个值的更多信息,请参见 bootadm(1M) 手册页。使用 change-entry 子命令的常见方法示例均遵循此过程。
# bootadm list-menu
注 - 如果未看到更改,请检查 grub.cfg 文件以确认进行了更改。
示例 2-4 设置 GRUB 菜单中指定引导项的标题
您可以使用 bootadm 命令的 change-entry 子命令设置指定引导项的标题。设置标题时,既可以指定项编号,也可以指定项标题。以下示例显示了如何通过这两种方式设置指定引导项的标题。如果多个项具有同一标题,则会影响所有项。
通过指定项编号设置引导项的标题,如下所示:
# bootadm list-menu The location of the boot loader configuration file is /rpool/boot/grub default 1 console graphics timeout 30 0 Oracle Solaris 11/11 1 Oracle Solaris 11.1 2 Oracle Solaris 11_test # bootadm change-entry -i 2 title="Oracle Solaris 11-backup1" # bootadm list-menu The location of the boot loader configuration file is /rpool/boot/grub default 2 console graphics timeout 45 0 Oracle Solaris 11/11 1 Oracle Solaris 11.1 2 Oracle Solaris 11-backup1
通过指定标题设置引导项的标题,如下所示:
# bootadm list-menu The location of the boot loader configuration file is /rpool/boot/grub default 1 console graphics timeout 30 0 Oracle Solaris 11/11 1 Oracle Solaris 11.1 2 Oracle Solaris 11_test # bootadm change-entry "Oracle Solaris 11_test" title="Oracle Solaris 11-backup1" # bootadm list-menu The location of the boot loader configuration file is /rpool/boot/grub default 2 console graphics timeout 45 0 Oracle Solaris 11/11 1 Oracle Solaris 11.1 2 Oracle Solaris 11-backup1
示例 2-5 通过指定内核参数更改引导项
以下示例显示了如何使用 bootadm 命令的 change-entry 子命令设置指定引导项的内核引导参数。
在此示例中,将引导项编号 1 设置为以单用户模式引导:
# bootadm list-menu The location of the boot loader configuration file is /rpool/boot/grub default 1 console graphics timeout 30 0 Oracle Solaris 11/11 1 Oracle Solaris 11.1 2 Oracle Solaris 11_test # bootadm change-entry -i 1 kargs=-s # bootadm list-menu -i 1 The location of the boot loader configuration files is: /rpool/boot/grub title: Oracle Solaris 11.1 kernel: /platform/i86pc/kernel/$ISADIR/unix kernel arguments: -s boot archive: /platform/i86pc/$ISADIR/boot_archive ZFS root pool: rpool
在此示例中,为引导项编号 2 指定多个内核参数:
# bootadm change-entry -i 2 kargs="-v -s" # bootadm list-menu -i 2 The location of the boot loader configuration files is: /rpool/boot/grub title: Oracle Solaris 11_test kernel: /platform/i86pc/kernel/$ISADIR/unix kernel arguments: -v -s boot archive: /platform/i86pc/$ISADIR/boot_archive bootfs: rpool/ROOT/snv_160-nightly-1
在此示例中,指定了 -v 和 -s 选项,这会将系统引导到详细模式下的单用户状态。
只要设置的一个或多个属性包含空格,就必须将值括在单引号或双引号中。
示例 2-6 通过使用 -B 选项指定内核参数来更改引导项
以下示例显示了您可以通过使用 -B 选项设置特定引导项的内核参数的几种方法。
您需要在引导时禁用 e1000g 网络驱动程序并装入内核调试器,如下所示:
# bootadm change-entry -i 0 kargs="-B disable-e1000g=true -k"
您可以使用 bootadm change-entry 命令指定多个 -B 选项。例如,您可以使用以下任一命令同时禁用 e1000g 驱动程序和 ACPI:
# bootadm change-entry -i 0 kargs="-B disable-e1000g=true -B acpi-user-options=2"
# bootadm change-entry -i 0 kargs="-B disable-e1000g=true,acpi-user-options=2"
您还可以通过编辑指定引导项在引导时使用 -B 选项设置特定引导属性。有关说明,请参见x86: 通过在引导时编辑 GRUB 菜单添加内核参数。
示例 2-7 从引导项删除先前添加的内核参数
在以下示例中,将从特定引导项删除一个内核参数 (-s):
# bootadm list-menu -i 1 the location of the boot loader configuration files is: /rpool/boot/grub title: s11.1.backup kernel: /platform/i86pc/kernel/amd64/unix kernel arguments: -s boot archive: /platform/i86pc/amd64/boot_archive bootfs: rpool/ROOT/s11.1.backup # bootadm change-entry -i 1 kargs= # bootadm list-menu -i 1 the location of the boot loader configuration files is: /rpool/boot/grub title: s11.1.backup kernel: /platform/i86pc/kernel/amd64/unix kernel arguments: boot archive: /platform/i86pc/amd64/boot_archive bootfs: rpool/ROOT/s11.1.backup
使用 bootadm 命令的 add-entry 子命令向 GRUB 菜单添加带有指定项标题的新项。如果指定项编号,新项将会插入到 GRUB 菜单中的指定位置。或者,如果项编号高于菜单中项的当前编号,此项将作为菜单中的最后一项进行添加。
# bootadm list-menu
# bootadm add-entry -P pool -i [entry-number] entry-title
# bootadm change-entry -i new-entry-number bootfs='pool-name/ROOT/be-name'
通过此步骤,可确保新添加的引导项不使用根池中设置的缺省 bootfs 值,根池在 bootfs pool-level 属性中指定。
# bootadm list-menu
注 - 如果未看到更改,请检查 grub.cfg 文件以确认进行了更改。
示例 2-8 x86: 向 GRUB 菜单添加引导项
以下示例显示了如何使用 bootadm add-entry 命令向 GRUB 菜单添加菜单项。在此示例中,添加了项编号 2。
# bootadm list-menu The location of the boot loader configuration file is /rpool/boot/grub default 2 console graphics timeout 30 0 Oracle Solaris 11/11 1 Oracle Solaris 11.1 # bootadm add-entry -i 2 Oracle Solaris 11_test # bootadm change-entry -i 2 bootfs='rpool/ROOT/test' # bootadm list-menu The location of the boot loader configuration file is /rpool/boot/grub default 2 console graphics timeout 30 0 Oracle Solaris 11/11 1 Oracle Solaris 11.1 2 Oracle Solaris 11_test
通过指定项编号查看新菜单项的内容,如下所示:
# bootadm list-menu -i 2 the location of the boot loader configuration files is: /rpool/boot/grub title: Oracle Solaris 11_test kernel: /platform/i86pc/kernel/amd64/unix kernel arguments: -B $ZFS-BOOTFS boot archive: /platform/i86pc/amd64/boot_archive ZFS root pool: rpool
使用 bootadm 命令的 remove-entry 子命令从 GRUB 菜单删除指定项或以逗号分隔的项列表。如果指定带有同一标题的多个项,则会删除带有此标题的所有项。
# bootadm list-menu
# bootadm remove-entry [-P pool] [{entry-title [,entry-title...] | -i entry-number[,entry-number...]}
# bootadm list-menu
注 - 如果未看到更改,请检查 grub.cfg 文件以确认进行了更改。
示例 2-9 x86: 从 GRUB 菜单删除引导项
以下示例显示了从 GRUB 菜单删除项编号 2 的操作。
# bootadm list-menu The location of the boot loader configuration file is /rpool/boot/grub default 2 console graphics timeout 30 0 Oracle Solaris 11/11 1 Oracle Solaris 11.1 2 Oracle Solaris 11_test bootadm remove-entry -i 2 1 entry removed # bootadm list-menu The location of the boot loader configuration file is /rpool/boot/grub default 2 console graphics timeout 30 0 Oracle Solaris 11/11 1 Oracle Solaris 11.1