Solaris 11: Zone Boot environment selection

Tested on Solaris 11.1, specifically entire@0.5.11-0.175.1.0.0.24.2

I couldn't find this documented anywhere, so here's what I found.

How do solaris 11 zones determine which boot environment to use? Seems they use ZFS properties.

On my test zone, I have:

root@myhostname:/etc# beadm list 
BE        Active Mountpoint Space   Policy Created         
--        ------ ---------- -----   ------ -------         solaris   N      /          488.90M static 2013-02-20 15:45 
solaris-z R      -          60.0K   static 2013-02-21 10:15

And here are the ZFS properties:

root@myhostname:/etc# zfs get -r -d 1 -o name,value,source org.opensolaris.libbe:active rpool/ROOT 
NAME                  VALUE  SOURCE 
rpool/ROOT            -      - 
rpool/ROOT/solaris    off    local 
rpool/ROOT/solaris-z  on     local

Each zone boot envrionment also has a parentbe property which presumably allows the global zone's pkg command to operate on the correct zone, called org.opensolaris.libbe:parentbe

root@myhostname:/etc# zfs get -r -d 1 -o name,value,source org.opensolaris.libbe:parentbe rpool/ROOT
NAME                  VALUE                                 SOURCE 
rpool/ROOT            -                                     - 
rpool/ROOT/solaris    89b52c6a-80a0-670d-e178-cb91c57061d3  local 
rpool/ROOT/solaris-z  89b52c6a-80a0-670d-e178-cb91c57061d3  local

The parentbe seems to be used to detemine which zones boot environments are unbootable (showing as !R in the "Active" column of beadm list).

We can edit these properties directly, but obviously it's better to use the beadm utility -- however knowing which properties it uses can be useful for manually correcting problems.

Useful documentation includes the solaris(5) man page.