News, tips, partners, and perspectives for the Oracle Solaris operating system

Simple Live Upgrade Example For Fun and Profit

Live Upgrade Introduction
Solaris Live Upgrade (LU) clones your root filesystem
to allow Solaris upgrades while remaining booted on your original root filesystem.
LU term "Boot Environment" (BE) refers to one or more bootable root filesystems.
You need two slices to do this—your current root slice and an alternate root slice.
OpenSolaris installation creates two 10GB partitions by default, if you have enough disk space. Slice 0 (a) has root and slice 3 (d) has "second_root", which is initially empty and reserved for a live upgrade during upgrade installs.
The other filesystems, such as /export/home are left untouched.

This simple example shows how to clone your root filesystem with LU and boot to it. This is useful for such things as a backup, future upgrade, or testing (without worrying about destroying your system configuration).
I'm just covering the simple case—clone one root filesystem.
More elaborate operations are possible with multiple filesystems, zones, mirroring, and volume managers.

During LU, the alternate root filesystem must not be mounted, or even in the /etc/vfstab file—just comment it out.
Also, your system should be up-to-date with LU patches (see InfoDoc 72099 referenced below). Also, update Live Upgrade with
/media/SOL_11_X86/Solaris_11/Tools/Installers/liveupgrade20 from the DVD.

Create a new Boot Environment (BE)
The lucreate(1M) command clones your root filesystem.
You specify the root mount point (which will be cloned) and an (empty) disk slice to contain the cloned filesystem. The -n option specifies the name of the new BE. For example:

# lucreate -m /:/dev/dsk/c0d0s4:ufs -n second_root
Discovering physical storage devices
Discovering logical storage devices
Cross referencing storage devices with boot environment configurations
Determining types of file systems supported
Validating file system requests
Preparing logical storage devices
Preparing physical storage devices
Configuring physical storage devices
Configuring logical storage devices
Analyzing system configuration.
Comparing source boot environment <c0d0s0> file systems with the file
system(s) you specified for the new boot environment. Determining which
file systems should be in the new boot environment.
Updating boot environment description database on all BEs.
Searching /dev for possible boot environment filesystem devices
Updating system configuration files.
The device </dev/dsk/c0d0s4> is not a root device for any boot environment; cannot get BE ID.
Creating configuration for boot environment <second_root>.
Source boot environment is <c0d0s0>.
Creating boot environment <second_root>.
Checking for GRUB menu on boot environment <second_root>.
The boot environment <second_root> does not contain the GRUB menu.
Creating file systems on boot environment <second_root>.
Creating <ufs> file system for </> in zone <global> on </dev/dsk/c0d0s4>.
Mounting file systems for boot environment <second_root>.
Calculating required sizes of file systems for boot environment <second_root>.
Populating file systems on boot environment <second_root>.
Checking selection integrity.
Integrity check OK.
Populating contents of mount point </>.
Creating shared file system mount points.
Creating compare databases for boot environment <second_root>.
Creating compare database for file system </>.
Updating compare databases on boot environment <second_root>.
Making boot environment <second_root> bootable.
Updating bootenv.rc on ABE <second_root>.
Population of boot environment <second_root> successful.
Creation of boot environment <second_root> successful.

Type lustatus to verify your system configuration:

# lustatus
Boot Environment Is Active Active Can Copy
Name Complete Now On Reboot Delete Status
-------------------------- -------- ------ --------- ------ ----------
c0d0s0 yes yes yes no -
second_root yes no no yes -

Booting to your target BE (cloned root filesystem)
First (for x86 systems), I recommend saving a hard copy of the GRUB boot menu, /boot/grub/menu.lst — then you can boot to a partition in the GRUB command line no matter what might happen to the GRUB menu.lst file (in case you hit bug 6639959).
Newer versions of Live Upgrade don't have this problem, but it doesn't hurt to save menu.lst.
To activate your target BE, use luactivate. Then reboot. You must use init(1M) or shutdown(1M) to reboot—do not use halt(1M) or reboot(1M), as the latter commands skip graceful shutdown procedures, including switching your BE.
Be patient in this step as this could take awhile updating the new BE.
For example:

# luactivate second_root
Saving latest GRUB loader.
Generating partition and slice information for ABE <second_root>
Boot menu exists.
Generating direct boot menu entries for ABE.
Generating direct boot menu entries for PBE.
The target boot environment has been activated. It will be used when you
reboot. NOTE: You MUST NOT USE the reboot, halt, or uadmin commands. You
MUST USE either the init or the shutdown command when you reboot. If you
do not use either init or shutdown, the system will not boot using the
target BE.
In case of a failure while booting to the target BE, the following process
needs to be followed to fallback to the currently working boot environment:
1. Do \*not\* change \*hard\* disk order in the BIOS.
2. Boot from the Solaris Install CD or Network and bring the system to
Single User mode.
3. Mount the Parent boot environment root slice to some directory (like
/mnt). You can use the following command to mount:
mount -Fufs /dev/dsk/c0d0s0 /mnt
4. Run <luactivate> utility with out any arguments from the Parent boot
environment root slice, as shown below:
5. luactivate, activates the previous working boot environment and
indicates the result.
6. Exit Single User mode and reboot the machine.
Modifying boot archive service
GRUB menu is on device: </dev/dsk/c0d0s0>.
Filesystem type for menu device: <ufs>.
Activation of boot environment <second_root> successful.
# lustatus
Boot Environment Is Active Active Can Copy
Name Complete Now On Reboot Delete Status
-------------------------- -------- ------ --------- ------ ----------
c0d0s0 yes no no yes -
second_root yes yes yes no -
# shutdown -i6

After rebooting, you'll notice (for x86) that the GRUB menu (file /boot/grub/menu.lst in the old (source) BE) has been updated with the new BE, allowing you to boot to the old (source) BE or the target BE.

# /boot/grub/menu.lst
default 1
timeout 10
title Solaris Express Developer Edition 9/07 snv_70b X86
kernel$ /platform/i86pc/kernel/$ISADIR/unix
module$ /platform/i86pc/$ISADIR/boot_archive
title second_root
root (hd0,2,e)
kernel$ /platform/i86pc/kernel/$ISADIR/unix
module$ /platform/i86pc/$ISADIR/boot_archive

Solaris Upgrade with Live Upgrade
Use luupgrade to upgrade a BE. Just specify the BE name to upgrade (not the currently-active BE) and the root directory of the install DVD or DVD image. For example:

# luupgrade -u -n second_root -s /media/SOL_11_X86
Copying failsafe kernel from media.
Uncompressing miniroot
Uncompressing miniroot archive (Part2)
13353 blocks
Creating miniroot device
miniroot filesystem is <ufs>
Mounting miniroot at </media/SOL_11_X86/Solaris_11/Tools/Boot>
Mounting miniroot Part 2 at </media/SOL_11_X86/Solaris_11/Tools/Boot>
Validating the contents of the media </media/SOL_11_X86>.
The media is a standard Solaris media.
The media contains an operating system upgrade image.
The media contains <Solaris> version <11>.
Constructing upgrade profile to use.
Locating the operating system upgrade program.
Checking for existence of previously scheduled Live Upgrade requests.
Creating upgrade profile for BE <second_root>.
Checking for GRUB menu on ABE <second_root>.
Checking for x86 boot partition on ABE.
Determining packages to install or upgrade for BE <second_root>.
Performing the operating system upgrade of the BE <second_root>.
CAUTION: Interrupting this process may leave the boot environment unstable
or unbootable.
Upgrading Solaris: 30% completed

Be sure to wait until the upgrade is complete.
For laptops, don't run on the battery during upgrade—make sure the power cord is plugged in.
Upgrading Solaris: 100% completed
Installation of the packages from this media is complete.
Deleted empty GRUB menu on ABE <second_root>.
Adding operating system patches to the BE <second_root>.
The operating system patch installation is complete.
ABE boot partition backing deleted.
Configuring failsafe for system.
Failsafe configuration is complete.
INFORMATION: The file </var/sadm/system/logs/upgrade_log> on boot
environment <second_root> contains a log of the upgrade operation.
INFORMATION: The file </var/sadm/system/data/upgrade_cleanup> on boot
environment <second_root> contains a log of cleanup operations required.
WARNING: <2> packages failed to install properly on boot environment .
INFORMATION: The file </var/sadm/system/data/upgrade_failed_pkgadds> on
boot environment <second_root> contains a list of packages that failed to
upgrade or install properly.
INFORMATION: Review the files listed above. Remember that all of the files
are located on boot environment <second_root>. Before you activate boot
environment <second_root>, determine if any additional system maintenance
is required or if additional media of the software distribution must be
The Solaris upgrade of the boot environment <second_root> is partially complete.
Installing failsafe
Failsafe install is complete.

After it's complete, check for errors, type luactivate second_root to active the newly-updated BE, then reboot.

LU Bug Workaround:
With a Live Update to NV79a you may have a problem with the /bin directory in the new BE. This is a bug and you'll notice it when several services fail during booting. Directory /bin should be a softlink to /usr/bin, not a directory. If it is, then fix it as follows and reboot:

mv /bin /bin.old; ln -s usr/bin /bin

Reverting or cleanup of a BE
To switch back to the original BE, run luactivate again:

# luactivate c0d0s0

To delete your original BE, run ludelete:
# ludelete c0d0s0

Other lu commands

To copy from the current BE to an existing BE (one where lucreate was ran), run lumake.

To look at or edit a file in your original BE (say, for example, to edit your GRUB configuration file /boot/grub/menu.lst), use lumount. For example,

lumount c0d0s0 /mnt

Use luumount to unmount. For example,

luumount /mnt
I use lurename to rename BEs to a more meaningful BE name.


Update: (Sept. 2008): OpenSolaris now has beadm(1M) for use with ZFS bootable filesystems. To use in the simple case, simply type beadm create; beadm list and it will clone the current Boot Environment

Be the first to comment

Comments ( 0 )
Please enter your name.Please provide a valid email address.Please enter a comment.CAPTCHA challenge response provided was incorrect. Please try again.