Cloning a Solaris zone

The beauty of zones under Solaris for me is the ability to clone any zone and then easily adapt it for it's new resources and function. I wrote this post as an occasional reminder for myself, but also to share with you the steps undertaken to achieve this goal.

At present I have a SunFire V490 system running 5 zones; each installed under /zones but with there own unique IP address and datasets; I need to clone one of these zones so I'll share with you my ssteps taken from this incident:

Firstly, we need to export the configuration for the zone I wish to clone

# zonecfg -z jeeves export > wooster.cfg

In this instance, I'm taking a copy of the config for zone jeeves and saving it in a filename I'll use for my new zone wooster.

I then modify the new configuration file for the new zone, changes included IP address, data set names, network interface, etc.)

# vi wooster.cfg

The main reason for editing the configuration file, is that I give each of my zones a unique IP address, there own data sets, for load balancing I change the network interface, etc.

Once happy with my config change I created an unconfigured zone based on my new configuration file:-

# zonecfg -z wooster -f wooster.cfg

We now need to shutdown the zone I am cloning in order to copy it's contents (I've not found a method yet of performing a clone of a live/active zone, maybe someone can enlighten me)

 # zoneadm -z jeeves halt

followed by the clone command

# zoneadm -z wooster clone jeeves
Copying /zones/jeeves...

the cloning finished in ~20minutes for the 18GB zone I cloned

after verifying that the new zone is installed correctly

# zoneadm list -vi
ID NAME STATUS PATH BRAND IP
0 global running / native shared
13 french running /zones/french native shared
14 saunders running /zones/saunders native shared
17 holmes running /zones/holmes native shared
18 sherlock running /zones/sherlock native shared
- jeeves installed /zones/jeeves - wooster installed /zones/wooster

so far so good, lets bring them both back online

# zoneadm -z jeeves boot
# zoneadm -z wooster boot

One final check to confirm they are up and running

# zoneadm list -vi
ID NAME STATUS PATH BRAND IP
0 global running / native shared
13 french running /zones/french native shared
14 saunders running /zones/saunders native shared
17 holmes running /zones/holmes native shared
18 sherlock running /zones/sherlock native shared
20 jeeves running /zones/jeeves native shared
22 wooster running /zones/wooster native shared

and finally all I need to do is login to the new zone and tweak my configuration for the new zone accordingly

# zlogin -C wooster

After this I am able to log into my new zone, directly using ssh or from the global zone using zlogin. I can confirm that everything is up and running smoothly, and all the packages, services, security settings, and user configuration are all now available under my new zone :-)