Modifying Solaris Boot Behavior on x86 Based Systems (Task Map)
Table 11-1 x86: Modifying Boot Behavior: Task Map
Task |
Description |
For Information |
Set
boot file parameters by using the eeprom command. |
Modify boot behavior on an
x86 based system by using the eeprom command. Boot options that are set
by using the eeprom command persist over a system reboot, unless these options
are overridden by modifying kernel behavior in the GRUB menu at boot time. |
x86: How to Modify Boot Behavior by Using the eeprom Command |
Modify
boot behavior by editing the GRUB menu at boot time. |
Modify boot behavior
by editing GRUB menu at boot time. Boot options that are specified by
modifying the boot behavior in the GRUB menu persist only until the next
system reboot. |
x86: How to Modify Boot Behavior by Editing the GRUB Menu at Boot Time |
Modify boot behavior by manually editing the menu.lst file. |
Modify boot behavior
by editing the menu.lst configuration file to add new OS entries or redirect
the console. Changes you make to the file persist over system reboots. |
x86: How to Modify Boot Behavior by Editing the menu.lst File |
Modify the menu.lst
file to include entries that support the findroot command. |
Additional menu entries that use
the findroot command can be added to the menu.lst file menu after an
installation or upgrade. |
x86: How to Add GRUB Menu Entries That Use the findroot Command |
Modifying Boot Behavior on x86 Based Systems
The primary methods for modifying boot behavior on an x86 based system are
as follows:
By using the eeprom command.
The eeprom command is used to assign a different value to a standard set of properties. These values, which are equivalent to the SPARC OpenBoot PROM NVRAM variables, are stored either in the /boot/solaris/bootenv.rc file or in the menu.lst file. Changes that are made to boot behavior by using the eeprom command persist over each system reboot and are preserved during a software upgrade. See the eeprom(1M) man page for more information.
Caution - If you directly edit the menu.lst file, certain boot properties (boot-file, boot-args, and console) may not be changed at a later time by using the eeprom command.
By editing the GRUB menu at boot time.
Changes that are made by modifying the GRUB kernel behavior at boot time override options that you set by using the eeprom command. However, these changes only remain in effect until the next time you boot the system. See the kernel(1M) man page for more information.
By manually editing the GRUB menu.lst file.
Caution - Any system generated changes made to menu.lst entries are changed or lost during a system upgrade. However, any new boot entries that you manually added remain after an upgrade. You can override eeprom settings by editing the GRUB menu at boot time or by editing the menu.lst file. Changes made by editing the GRUB menu at boot time do not persist. Changes that are made to menu.lst file persist over system reboots.
x86: How to Modify Boot Behavior by Using the eeprom Command
You can display or set boot parameters by using the eeprom command. These
parameters are found in the /boot/solaris/bootenv.rc file. Changes that are made by using
the eeprom command persist over a system reboot. You can override eeprom settings by
editing the GRUB menu at boot time to specify alternative boot behavior.
See x86: How to Modify Boot Behavior by Editing the GRUB Menu at Boot Time. For more information about changes to the eeprom command in this
release, see the eeprom(1M) man page.
- Become superuser or assume an equivalent role.
Roles contain authorizations and privileged commands. For more information about roles, see Configuring RBAC (Task Map) in System Administration Guide: Security Services.
- To change the specified parameter, type the eeprom command with the appropriate arguments
.
# eeprom parameter=new-value
- Verify that the new parameter has been set.
# eeprom parameter
The output should display the new eeprom value for the specified parameter.
Example 11-3 x86: Setting boot-file Parameters by Using the eeprom Command
This example shows how to manually specify that the system boot a
64-bit kernel. Note that the system must support 64-bit computing.
# eeprom boot-file=kernel/amd64/unix
This example shows how to manually boot a 32-bit kernel on a
64-bit capable system.
# eeprom boot-file=kernel/unix
This example shows how to restore the default auto detected boot behavior on
a system.
# eeprom boot-file=""
x86: Modifying Boot Behavior by Editing the GRUB Menu at Boot Time
The following is an example of a GRUB main menu in a
Solaris release that supports booting a system from a ZFS root file system.
This menu is based on the contents of the menu.lst configuration file and includes
menu entries for all of the bootable OS instances on the system. The
first entry in the menu is the default, unless otherwise specified. To specify
another boot entry as the default, add the default=n command to the
menu.lst file, where n is a number, starting from 0 (the first
boot entry).
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.
Note - The information that is contained in the menu.lst file varies, depending on the
Solaris release and the installation method that was used.
To edit a boot entry in the GRUB menu, use the arrow
keys to select the entry, then type e.
GNU GRUB version 0.95 (637K lower / 3144640K upper memory)
+-------------------------------------------------------------------------+
findroot (BE_be1,0,a)
bootfs rpool/ROOT/szboot_0508
kernel$ /platform/i86pc/kernel/$ISADIR/unix -B $ZFS-BOOTFS
module$ /platform/i86pc/$ISADIR/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.
For instructions on editing the GRUB menu at boot time, see x86: How to Modify Boot Behavior by Editing the GRUB Menu at Boot Time.
Description of the GRUB Edit Menu
The following examples show the edit menu in the various GRUB implementations:
GRUB ZFS Support:
grub edit> kernel$ /platform/i86pc/kernel/$ISADIR/unix -B $ZFS-BOOTFS,prop=value [,prop=value...]][-asrvxk]
[-m smf-options] [-i altinit]
Note - When adding boot arguments on a system with ZFS support, any additional
-B options should be added after the default -B $ZFS-BOOTFS argument.
GRUB hypervisor Support:
grub edit> module$ /platform/i86xpv/$ISADIR/unix /platform/i86xpv/$ISADIR/unix -B $ZFS-BOOTFS,\
prop=value [,prop=value...]][-asrvxk] [-m smf-options] [-i altinit]
GRUB UFS Support:
grub edit> kernel$ /platform/i86pc/kernel/$ISADIR/unix [-asrvxk]
[-m smf-options] [-i altinit][-B prop=value [,prop=value...]]
Boot Arguments You Can Specify When Editing the GRUB Menu at Boot Time
The following list describes the boot arguments and options that can be specified
by editing the GRUB menu at boot time:
- unix
Specifies the kernel to boot.
- -a
Prompts the user for configuration information.
- -s
Boots the system in single-user mode.
- -r
Specifies a reconfiguration boot.
The system probes all attached hardware devices and then assigns nodes in the file system to represent only those devices that are actually found.
- -v
Boots the system with verbose messages enabled.
- -x
Does not boot in clustered mode.
- -k
Boots the system with the kernel debugger enabled.
- -m smf-options
Controls the boot behavior of the Service Management Facility (SMF). Included are two categories of options, recovery options and messages options.
- -i altinit
Specifies an alternative executable as the primordial process. altinit is a valid path to an executable.
- -B prop=value [,prop=value]...
Specifies kernel boot properties.
The following are various ways you can modify boot behavior in the
GRUB menu by using the -B prop=val option:
- -B console=ttya
Redirects the console to ttya.
- -B acpi-enum=off
Disables Advanced Configuration and Power Interface (ACPI) enumeration of devices.
- -B console=ttya,acpi-enum=off
Redirects the console to ttya and disables the ACPI enumeration of devices.
- -B acpi-user-options=0x2
Disables ACPI entirely.
Note - When properties are specified by using the eeprom command and on the
GRUB command line, the GRUB command takes precedence.
x86: How to Modify Boot Behavior by Editing the GRUB Menu at Boot Time
When you modify the GRUB kernel behavior by editing the GRUB menu
at boot time, the changes do not persist over a system reboot. Default
boot behavior is restored the next time you boot the system.
- Reboot the system.
When the boot sequence begins, the GRUB main menu is displayed.
- Use the arrow keys to select the boot entry to edit, then
type e to access the GRUB edit menu.
- Use the arrow keys to select the kernel or kernel$ line in
this menu.
- Type e to add boot arguments to the line.
- Type any additional boot arguments that you want to specify.
- Press Return to save your changes and return to the previous menu.
Note - Pressing the Escape key returns you to the GRUB main menu without saving
your changes.
- To boot the system, type b.
Changes you make take affect when the system is booted.
Example 11-4 x86: Booting a 32-Bit Kernel on a 64-Bit Enabled System
To boot a 32-bit kernel on a 64-bit capable system, add the
kernel/unix argument.
grub edit> kernel /platform/i86pc/multiboot kernel/unix
Example 11-5 x86: Redirecting the Serial Console
To redirect the serial console to ttyb, add the -B console=ttyb argument.
grub edit> kernel /platform/i86pc/multiboot -B console=ttyb
Alternatively, you can use input-device/output-device property, as shown in the following example:
grub edit> kernel /platform/i86pc/multiboot -B input-device=ttyb,output-device=ttyb
This example shows how you would override the serial line speed:
grub edit> kernel /platform/i86pc/multiboot -B ttyb-mode="115200,8,n,1,-"
Caution: In the preceding example, the property value contains commas, which is also
a property separator. To avoid confusing the property parser, use double quotation marks
around the entire property value.
x86: Modifying Boot Behavior by Editing the menu.lst File
The GRUB menu, which is based on the menu.lst configuration file, can be
customized. When you install or upgrade the Solaris release, the bootadm command automatically
updates the menu.lst file to reflect menu entries that are supported for
that particular GRUB implementation. Any newly installed OS that is listed in this
file is displayed as a boot entry in the GRUB menu when the
system is rebooted. Note that when installing an operating system other than the
Solaris OS, you will need to manually add the menu entry to the
menu.lst file afterwards.
The following is an example of a typical GRUB main menu, based
on the contents of the menu.lst file. The GRUB main menu consists of boot
entries that are available, plus a failsafe archive.
GNU GRUB version 0.95 (631K lower / 2095488K upper memory)
+-------------------------------------------------------------------------+
| Solaris 10.1 ... X86 |
| Solaris failsafe |
| |
+-------------------------------------------------------------------------+
A configurable timeout is available to boot the default OS entry. The default
OS boot entry that is booted is configurable through the default command.
The Solaris installation software typically sets this command to boot one of the
valid Solaris boot entries. To boot a different instance of the Solaris OS
(if applicable), or to boot a different OS, use the arrow keys to
highlight a different boot entry. Then press Enter to boot that entry. Note
that if the default command is not set, the first boot entry in
the GRUB menu is booted.
Only the active menu.lst file is used to boot the system. To
modify the GRUB menu that is displayed when you boot the system, edit
the active GRUB menu.lst file. Changing any other menu.lst file has no
effect on the menu that is displayed when you boot the system To
determine the location of the active menu.lst file, use the list-menu subcommand of the
bootadm command. For more information about using the bootadm command, see Using the bootadm Command to Manage the Boot Archives.
For a complete description of the menu.lst file in each of the GRUB
implementations in the Solaris OS, see x86: Supported GRUB Implementations.
x86: How to Modify Boot Behavior by Editing the menu.lst File
You might need to modify the menu.lst file for one of the following
reasons:
Before You Begin
Because only the active GRUB menu.lst file is used to boot the system,
make sure you edit the correct file. Changing any other GRUB menu.lst file
has no effect on the menu that is displayed when you boot the
system.
The location of the active menu.lst file varies, depending on whether you have
a system with a UFS root or a ZFS root.
For a UFS root, the active menu.lst file is /boot/grub/menu.lst.
For a ZFS root, the active menu.lst file is /pool-name/boot/grub/menu.lst
You can determine the location of the active GRUB menu.lst file by using
the bootadm command with the list-menu subcommand.
# bootadm list-menu
For more information about the bootadm command, see the bootadm(1M) man page.
- Become superuser or assume an equivalent role.
- To add a new OS entry to the active menu.lst file, use a
text editor to modify the file.
The comments within the menu.lst file provide you with the necessary information
for adding a new OS entry.
The following is an example of a menu.lst file on a system that
is running a Solaris release with ZFS boot support. Boot entries in
the menu.lst file vary, depending on the Solaris release you are running.
#---------- ADDED BY BOOTADM - DO NOT EDIT ----------
title Solaris 11 s10x_90 X86
findroot (pool_rpool,0,a)
kernel$ /platform/i86pc/kernel/$ISADIR/unix -B $ZFS-BOOTFS
module$ /platform/i86pc/$ISADIR/boot_archive
#---------------------END BOOTADM--------------------
Caution - Do not directly edit the original contents of the menu.lst file. To
make changes to any of the OS entries in the file, edit the
file manually, duplicating the existing content. Then, make the modifications to the duplicated
content.
Also note when manually adding new user entries to the file, do not
include guard comments that are reserved for use by the system, such as
“Added by bootadm” or “Added by Live Upgrade”. Not using these comments for
manually-added entries ensures that these entries remain intact during a software upgrade.
- To specify a 32-bit Solaris kernel as the default kernel to boot, remove
all instances of the $ISADIR keyword from the menu.lst file.
title Solaris Nevada snv_53 X86
kernel$ /platform/i86pc/kernel/unix [*]
module$ /platform/i86pc/boot_archive
To specify a 32-bit kernel as the boot method, you must also
change the line that begins with the kernel keyword in the Solaris failsafe entry:
title Solaris failsafe
kernel /boot/platform/i86pc/kernel/unix [-B *] -s [*]
module /boot/x86.miniroot-safe
If you have added any additional entries, beyond the default entries, make equivalent
changes manually.
The [-B *] and [*] flags must be preserved, if these flags exist
in the original menu.lst file. Also, the failsafe entry should always have an
-s flag.
- After adding the required information, save the file.
Note that any changes you make to the file take effect at the
next system reboot.
Tip - If you are running the Linux OS, and install the Solaris OS,
the Linux OS entry is not displayed in the GRUB menu when the
system is rebooted. Before installing the Solaris software, save a copy of the
menu.lst file that contains the Linux information. After the installation, add the Linux information
back to the newly-created menu.lst file in the Solaris partition.
Because changes you make to the menu.lst file are not directly related to
the Solaris OS, you cannot make them by using the eeprom command.
You must edit the file directly. Note that the Solaris software upgrade process
preserves any changes that you make to the menu.lst file.
Caution - Solaris GRUB is capable of booting both the Linux OS and the Solaris
OS. However, Linux GRUB is not capable of booting the Solaris OS.
Always ensure that one of the following conditions are met:
The Solaris fdisk partition is active, that it has GRUB installed , and that the menu.lst file is the active GRUB menu
That Solaris GRUB is installed to the Master Boot Record (MBR) and that it refers to a menu.lst in the Solaris fdisk partition.
For a detailed description of the GRUB menu.lst that pertains to each Solaris
release, see x86: Supported GRUB Implementations.
Example 11-6 menu.lst File on a System With a ZFS Boot Loader
The following examples show what a menu.lst file looks like on a system
that has a ZFS boot loader. By default, this system will boot from
a ZFS root file system. Note that the contents of the file varies,
depending on the installation type.
New installation or standard upgrade:
title Solaris 11 s10x_90 X86
findroot (pool_rpool,0,a)
kernel$ /platform/i86pc/kernel/$ISADIR/unix -B $ZFS-BOOTFS
module$ /platform/i86pc/$ISADIR/boot_archive
title Solaris 11 failsafe
findroot (pool_rpool,0,a)
kernel /boot/platform/i86pc/kernel/unix -B console=ttyb
module /boot/x86.miniroot-safe
Solaris Live Upgrade:
title be1
findroot (BE_be1,0,a)
bootfs rpool/ROOT/szboot_0508
kernel$ /platform/i86pc/kernel/$ISADIR/unix -B $ZFS-BOOTFS
module$ /platform/i86pc/$ISADIR/boot_archive
title be1 failsafe
findroot (BE_be1,0,a)
kernel /boot/platform/i86pc/kernel/unix -s -B console=ttyb
module /boot/x86.miniroot-safe
Example 11-7 menu.lst File on a System With a UFS Boot Loader
The following examples show what a menu.lst file looks like on a system
that has a UFS root file system installed. By default, this system will
boot from a UFS root file system.
New installation or standard upgrade:
title Solaris 11 s10x_90 X86
findroot (rootfs0,0,a)
kernel$ /platform/i86pc/kernel/$ISADIR/unix
module$ /platform/i86pc/$ISADIR/boot_archive
title Solaris 11 failsafe
findroot (rootfs0,0,a)
kernel /boot/platform/i86pc/kernel/unix -s -B console=ttyb
module /boot/x86.miniroot-safe
Solaris Live Upgrade:
title be1
findroot (BE_be1,0,a)
kernel$ /platform/i86pc/kernel/$ISADIR/unix
module$ /platform/i86pc/$ISADIR/boot_archive
title be1 failsafe
findroot (BE_be1,0,a)
kernel /boot/platform/i86pc/kernel/unix -s -B console=ttyb
module /boot/x86.miniroot-safe
Example 11-8 x86: menu.lst File With Hypervisor Support
The following examples are for a GRUB implementation that supports booting the Solaris
OS as a dom0, with hypervisor support.
In this example, the menu.lst file has been modified to enable a 64-bit
capable system to boot the Solaris OS as a dom0, in 32-bit mode.
This modification includes removing all instances of $ISADIR from the file.
title 32-bit Solaris on xVM
kernel$ /boot/xen.gz
module$ /platform/i86xpv/kernel/unix /platform/i86xpv/kernel/unix -B $ZFS-BOOTFS [*]
module$ /platform/i86pc/boot_archive
In this example, the menu.lst file has been modified to direct the hypervisor
to use the serial console. Note that the serial console is also shared
by the Solaris OS dom0 console.
title Solaris on xVM
kernel$ /boot/$ISADIR/xen.gz console=com1 com1=9600,8n1
module$ /platform/i86xpv/kernel/$ISADIR/unix /platform/i86xpv/kernel/$ISADIR/unix \
-B $ZFS-BOOTFS console=hypervisor
module$ /platform/i86pc/$ISADIR/boot_archive
x86: Locating the Active GRUB menu.lst File
On systems that have a ZFS root, the active menu.lst file is typically
located in /pool-name/boot/grub/menu.lst.
On systems that have a UFS root, the active menu.lst file is typically
located in /boot/grub/menu.lst.
To locate the active GRUB menu, use the bootadm command with the list-menu
subcommand:
# bootadm list-menu
This command also lists the contents of the active menu.lst file:
# 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
For further instructions on using the bootadm command, see Using the bootadm Command to Manage the Boot Archives.
x86: Implementation of the findroot Command
All Solaris installation methods, including Solaris Live Upgrade, now use the findroot command
for specifying which disk slice on an x86 based system to boot. This
implementation supports booting systems with ZFS roots, as well as UFS roots. This
information is located in the menu.lst file that is used by GRUB.
Previously, the root command, root (hd0.0.a), was used to explicitly specify which disk
slice to boot.
The installation methods include Solaris Live Upgrade, JumpStart, and the installation GUI program.
In addition to the findroot command, is the additional of a signature file
on the slice, (mysign, 0, a), where mysign is the name of a
signature file that is located in the /boot/grub/bootsign directory. When booting a system from
a ZFS root, the ZFS GRUB plug-in looks for and tries to mount
a ZFS file system in slice a of fdisk partition 0.
The name of the signature file varies, depending on the type of installation
that was used. For more information about the naming convention that is used
by the findroot command, see Naming Conventions That Are Used by the findroot Command.
Additional menu entries, which also use the findroot command, can be added
to the GRUB menu after an installation or upgrade. For instructions, see
x86: How to Add GRUB Menu Entries That Use the findroot Command.
Caution - The boot signature must be unique. Do not use or remove system generated
signatures or user signatures that are duplicated across multiple instances of the Solaris
software. Doing so might result in booting an incorrect OS instance or prevent
the system from booting.
Note that the root command can still be used in the menu.lst
file in certain instances, for example to boot Windows. However, use of the
root command in cases where the findroot command is preferred is discouraged.
Example 11-9 x86: Default menu.lst file on a System That Uses the findroot Command
The following example shows the format of a menu.lst file entry that implements
the findroot command:
# title Solaris version
findroot (foosignpartition-no,slice-no,x) --x = Solaris root slice
kernel$ /platform/i86pc/kernel/$ISADIR/unix
module$ /platform/i86pc/$ISADIR/boot_archive
Example 11-10 x86: Default menu.lst file That Supports ZFS Boot Loader
This is an example of a menu.lst file on system that supports a
ZFS boot loader. The information for booting from a ZFS root file system
is automatically added to the file when a Solaris Live Upgrade is performed.
title be1
findroot (BE_be1,0,a)
kernel$ /platform/i86pc/kernel/$ISADIR/unix -B $ZFS-BOOTFS
module$ /platform/i86pc/$ISADIR/boot_archive
title be1 failsafe
findroot (BE_be1,0,a)
bootfs rpool/ROOT/szboot_0508
kernel /boot/platform/i86pc/kernel/unix -s -B console=ttyb
module /boot/x86.miniroot-safe
x86: How to Add GRUB Menu Entries That Use the findroot Command
This procedure shows how to manually update the menu.lst file with user defined
entries that use the findroot command. Typically, these entries are added after an
installation or an upgrade. For guidelines on adding user‐defined entries that use the findroot
command, see x86: Implementation of the findroot Command.
- Become superuser or assume an equivalent role.
- Create a boot signature file on the root (/) file system or root
pool that is booted.
Note - Make sure the file name that you choose for the boot signature
is unique. Do not use system generated signature names or user signature names
that are duplicated across multiple instances of the Solaris software. Doing so might
prevent the system from booting or cause the wrong Solaris instance to boot.
- Add a menu entry that contains the findroot command.
- Locate the active menu.lst file:
# bootadm list-menu
- Using a text editor, edit the active menu.lst file, adding the following entry:
title User Solaris boot entry
findroot (user-sign, 3, c)
kernel$ /platform/i86pc/kernel/$ISADIR/unix
module$ /platform/i86pc/$ISADIR/boot_archive
In the preceding example, the 3 represents the 4th fdisk partition (partitions start at
0). The c represents the slice within a Solaris fdisk partition (slices
start with a).
- Reboot the system.
The new entry appears in the GRUB menu and can be selected to
boot the specified Solaris OS instance.