X

An Oracle blog about Openomics

  • sun
    June 18, 2013

Moving Oracle Solaris 11 Zones between physical servers


As part of my job in the ISV
Engineering team, I am often asked by partners the following question : is it possible to easily move a Solaris 11 Zone from a
physical server to another?

The short answer is : YES ! The longer
one comes with the following restrictions :

  • Both physical servers should be of

    the same architecture, x64 or SPARC (T-series and M-series systems are compatible).

  • Both physical servers should run

    Oracle Solaris 11.

  • The destination server should run

    at least the same or higher release of Solaris 11. This includes the

    SRU (Support Repository Update) level.






Given a physical server called “Source”
hosting a Solaris 11 Zone called “myZone” on a ZFS filesystem,
here are the steps to move the zone on another physical server called
“Target” :






  1. Export the Zones configuration
    The

    zone needs to be configured on the destination server before it can

    be installed. The first step is to export the configuration of the

    Zone to a file:

    [Source]#

    zonecfg -z myZone export -f myZone.cfg


  2. Archive the Zone
    My favourite solution is to

    use the ZFS “send” functionality to archive the ZFS file system

    hosting the Zone in a single movable file, although this can also be achieved in other ways (cpio, pax)

    • Halt the Zone
      [Source]#

      zoneadm -z myZone halt

    • Take a recursive ZFS Snapshot of

      the rpool of the zone
      [Source]#

      zfs snapshot -r rpool/zones/myZone@archive


    • Archive the Zone using ZFS send (ZFS and cpio archives can be zipped using gzip or bzip2)
      [Source]# zfs
      send -rc rpool/zones/myZone@archive | bzip2 > /var/tmp/myZone.zfs.bz2
  1. Move the configuration and archive

    files to the destination server
    FTP, scp, NFS, removable hard drive, …

  2. Configure the zone on the

    destination server

    Depending on the configuration of the Targer server, you might need to tweak the zone configuration file before using it.

    [Target]#

    zonecfg -z myZone -f myZone.cfg

  3. Install the Zone

    If the zone is being installed in the same network, the zone configuration (IP address, DNS server, Gateway, etc) can be preserved using the "-p" option:

    [Target]# zoneadm -z

    myZone install -a myZone.zfs.bz2 -p

    If the Zone is being installed in a new network environment, using the "-u" option instead of "-p" will unconfigure the system. The Zone would need to be manually configured on the first boot. The configuration can be automatized during installation if a system configuration profile XML file is provided:

    #

    zoneadm -z myZone install -a myZone.zfs -u -c sc_profile.xml


    Quick Tip
    : To create a system configuration file, you can use the sysconfig program with option "create-profile":

    # sysconfig create-profile -o sc_profile.xml


    The configuration text wizard will walk you through the system configuration steps (same process as the first boot configuration wizard) but will not re-configure your system. It will simply create an output XML file with the defined system configuration. This files can then be manually tweaked if needed and act as a template for future use.

  4. Boot the Zone
    #

    zoneadm -z myZone boot

  5. You
    should now be able to log in the Zone which is the exact copy of the
    original Zone on the source server.

Obviously
there are many more options and possibilities that go beyond
the scope of this post. My intend was just to give a glimpse of what
can be done, so don't hesitate to consult the documentation
for more options.

Also,
these simple steps cans be scripted to be made even more flexible and
usable. Below are two scripts I have written for my own needs. There
are only provided as an example and must not be considered as
production ready scripts.

archive_zone.sh

#!/bi#!/bin/sh

#----------------------------------------------------------------

#
archive_zone.sh

#

#
This script creates a movable archive of an Solaris 11 Zone

#
It take a single input parameter: The Zone name

#----------------------------------------------------------------

SCRIPT_NAME=$0
BASE_DIR="$(pwd
-P)"

ZONE_NAME=$1

ZONES_ROOT=rpool/zones

ARCHIVE_FOLDER=/var/tmp/${ZONE_NAME}
ARCHIVE_FILE=${ZONE_NAME}.zfs.bz2

CONFIG_FILE=${ZONE_NAME}.cfg

SNAPSHOT=${ZONES_ROOT}/${ZONE_NAME}@`date
'+%d_%m_%Y-%H:%M:%S'`

if
[ if [ ! -d ${ARCHIVE_FOLDER} ] ; then
   mkdir
-p ${ARCHIVE_FOLDER}
fi

zoneadm
-z ${ZONE_NAME} halt

zonecfg
-z ${ZONE_NAME} export -f ${ARCHIVE_FOLDER}/${CONFIG_FILE}

#
Take a ZFS Snapshot of the rpool of the zone
zfs
snapshot -r ${SNAPSHOT}

#
Archive the Zone using ZFS send
zfs
send -rc ${SNAPSHOT} | bzip2 > ${ARCHIVE_FOLDER}/${ARCHIVE_FILE}

#
Delete the snapshot used to create the archive
zfs
destroy -r ${SNAPSHOT}

deploy_zone.sh

#!/bin/sh

#----------------------------------------------------------------

#
deploy_zone.sh

#

#
This script deploys an archived Solaris 11 Zone

#
It take a single input parameter: The Zone name

#----------------------------------------------------------------

SCRIPT_NAME=$0

BASE_DIR="$(pwd
-P)"

ZONE_NAME=$1

ARCHIVE_FOLDER=/var/tmp/${ZONE_NAME}
ARCHIVE_FILE=${ZONE_NAME}.zfs.bz2

CONFIG_FILE=${ZONE_NAME}.cfg

#
Configure the Zone
zonecfg
-z ${ZONE_NAME} -f ${ARCHIVE_FOLDER}/${CONFIG_FILE}

#
Install the Zone and configure the system
zoneadm
-z ${ZONE_NAME} install -a ${ARCHIVE_FOLDER}/${ARCHIVE_FILE} -u

#
Boot the Zone
zoneadm
-z ${ZONE_NAME} boot

Join the discussion

Comments ( 1 )
  • Carlos Azevedo Tuesday, June 18, 2013

    Excellent summary.

    I'd like to highlight the crucial -c option of when sending the ZFS stream.

    Thank you.


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