Solaris is a very powerful operating system with some great features. Zones brought Docker-like containers to Solaris back in 2005, ZFS is one of the most advanced filesystems currently available, and the Live Upgrade capability is highly underrated and is a great way to patch a server while ensure you have a back out plan.
All good stuff, but when you put Live Upgrade into a mix of Zones and ZFS, things get a bit flakey.
The issue I was having was that when I ran the "lupc -S" (Live Upgrade Preflight Check) script on my zone, I'd get the following message:
# lupc -S
This system has Patch level/IDR of 121430-92.
Please check MOS (My Oracle Support) to verify that the latest Live Upgrade patch is installed -- lupc does not verify patch versions.
Zonepath of zone
This configuration is unsupported
Oracle has a document on My Oracle Support: "List of currently unsupported Live Upgrade (LU) configurations (Doc ID 1396382.1)" which lists a lot of ways in which Live Upgrade won't work(!). On checking this document for the top level dataset issue, it gives the following text:
If ZFS root pool resides on one pool (say rpool) with zone residing on toplevel dataset of a different pool (say newpool) mounted on /newpool i.e. zonepath=/newpool, the lucreate would fail.
Okay, except that's not what I've got. My zone, s1, has a zonepath set to /zones/s1. The zpool is called "zones" and "s1" is a separate ZFS filesystem in this dataset.
What the system is actually complaining about is that the zpool is called "zones" and is mounted as "/zones". The workaround is to set the ZFS mountpoint to be something different from the pool name.
For example, I created a new ZFS filesystem under zones called "zoneroot":
# zfs create zones/zoneroot
Then (and this is the important bit), I set the mountpoint to something else:
# zfs set mountpoint=/zoneroot zones/zoneroot
Running zfs list for this dataset shows:
zones/zoneroot 1.80G 122G 32K /zoneroot
Now, I can create a zone, let's call it "s2":
# zonecfg -z s2
s2: No such zone configured
Use 'create' to begin configuring a new zone.
zonecfg:s2> set zonepath=/zoneroot/s2
On installing this zone, a new ZFS file system is created, /zoneroot/s2.
Now, when running the "lupc -S" command, Live Upgrade doesn't complain about unconfigured configurations!