If you have just arrived at this page, then you might want to start with Solaris 10 zones: a working example and Solaris 10 zones: resource types posts. Today I’ll tell you about root filesystem models for non-global zones in Solaris.
Two filesystem models in Solaris 10 zones
As you probably know, there are two such models in Solaris 10: sparse root and whole root. The former approach means that the newly created non-global zone’s root filesystem will only partially consist of actually copied into it packages and files, the rest will be inherited from the global zone. Such a model needs approximately 100Mb of disk space per zone, which is obviously much less than a full Solaris 10 installation, which happens in a case of a whole root approach. I’ve already mentioned this earlier.
By default, there are four directories of your global zone’s root filesystem which are accessible to a non-global zone via sparse root model: /lib, /platform, /sbin and /usr.
If a non-global zone is created with at least one resource of inherit-pkg-dir type, such a zone is said to be a sparse root one.
If you look at the zone’s description, you can easily see how exactly such an access is configured:
solaris# zonecfg -z zone1 export
...
add inherit-pkg-dir
set dir=/lib
end
add inherit-pkg-dir
set dir=/platform
end
add inherit-pkg-dir
set dir=/sbin
end
add inherit-pkg-dir
set dir=/usr
end
...
Remember: resources of this type can only be created when a zone is in a configured state, in other words – when it’s set up, but no Solaris 10 installation copied any packages into it just yet. Thus, if you decide to alter these resources for an existing zone, you’re going to have to uninstall it first (by doing something like zonecfg -z zone1 uninstall).
Just to sum it all up: if a non-global zone doesn’t have any inherit-pkg-dir resources, such a zone is said to be a whole root one, since all of the Solaris 10 packages are properly and fully copied into it. Such a mode takes up much more space, but you gain a great deal of flexibility – inside such a zone you can easily remove any files and packages, which isn’t always possible within a zone with inherit-pkg-dir resources.
Sparse-root zones
A sparse root model does the following: when installing Solaris 10 into your non-global zone, only the most necessary files are copied – the ones from packages where SUNW_PKGTYPE parameter is set to root. All the rest packages won’t be installed into the non-global zone, and later files from these packages will be accessible from withing the zone via loopback filesystems (lofs) in a read-only mode. Imagine how much space is saved with such an approach!
If you don’t know anything about lofs, please read man lofs, and most things will probably clear up 😉
As an example, do the following:
solaris# mkdir /var/tmp/hey solaris# mount -F lofs -o ro /usr /var/tmp/hey
Now, if you cd into /var/tmp/hey and try to create or remove any file, you won’t be able to, simply because /var/tmp/hey is a read-only mounted filesystem view of a /usr directory.
Zeek says
First, thanks for the great info.!!
The only advantage I can see for a sparse root zone is the savings in space. Lets say the /opt directory in the Gloabal zone is shared to the Non Global zone, and the Global zone needs to be rebooted, then the Non Global zone cannot access /opt during the reboot. Is this correct?
Also, how do you configure/install a whole root zone, in a non global zone?
Thanks
RK says
If you reboot the Global zone, non global zone will be rebooted too irrespective of whether it is a whole or sparse root zone.
marco says
Excellent explanation. Much appreciated. Thank you very much.
Garry Garrett says
Unfortunately, your article leaves out the important bit of information that everyone else’s does – how do you create a whole root zone?
Obviously I want to remove these inherit-pkg-dir settings when I build out the zone, but how???
Gleb Reys says
Thanks for stopping by Garry! This is part 3 of the series, so have a look at part one and part two for instructions on how to leave these settings out: https://solaris.reys.net/solaris-10-zones-part-one-a-working-example/ and https://solaris.reys.net/zones-in-solaris-10-part-two-types-of-resources/
Feel free to ask if you still need help.
Garry Garrett says
Thanks for your reply. Unfortunately, parts 1 & 2 don’t say how to create a whole root zone either (unless I missed something).
I did eventually find the answer here:
http://www.solarisinternals.com/wiki/index.php/Zones
Essentially, you when you do the zonecfg, and you do the “create”, you pass give it “create -b” (now that was inuititive [sarcasm]). I would think, if you are going to add this anywhere, that you’d want to cover this here, where you talk about whole root vs. sparse root. Perhaps this comment will suffice to help others who are seeking the same answer?
Window 7 themes says
in whole root zone every zone installs it’s own copy of OS like solaris 10
That is not space efficient
So it’s good to use sparse root method