[OpenIndiana-discuss] Migrating zones between OpenIndiana machines

Dave Koelmeyer davekoelmeyer at me.com
Fri Jun 3 09:11:17 UTC 2011


On 28/05/11 02:23 AM, Dave Koelmeyer wrote:
> On 28/05/11 01:29 AM, Dave Koelmeyer wrote:
>>
>>> From: Dave Koelmeyer<davekoelmeyer at me.com>
>>> Date: Wed, 25 May 2011 06:03:41
>>> To: Discussion list for 
>>> OpenIndiana<openindiana-discuss at openindiana.org>
>>> Reply-To: Discussion list for 
>>> OpenIndiana<openindiana-discuss at openindiana.org>
>>> Subject: [OpenIndiana-discuss] Migrating zones between OpenIndiana 
>>> machines
>>>
>>> Hi,
>>>
>>> I'm having a hell of a time trying to simply migrate a zone from one 
>>> OI machine to another, wondering if anyone can help. Both machines 
>>> are running oi_147
>>>
>>> I have configured and install a NGZ on machine 1, and wish to detach 
>>> and install it on machine 2.
>>>
>>> I am following the guide here:
>>>
>>> http://download.oracle.com/docs/cd/E19044-01/sol.containers/819-2450/gcgnc/index.html 
>>>
>>>
>>>
>>> On machine 1:
>>>
>>> First I have run zoneadm -z myzone detach
>>> Then, cd /rpool/zones/zone_roots and tar cvf myzone.tar myzone/
>>>
>>> This creates a .tar file of the zone, which I've then copied over to 
>>> machine 2
>>>
>>> On machine 2:
>>>
>>> I've extracted the .tar file to /rpool/zones/zone_roots
>>>
>>> The above steps so far are all covered at:
>>>
>>> http://download.oracle.com/docs/cd/E19044-01/sol.containers/819-2450/gcglo/index.html 
>>>
>>>
>>> So, next I run:
>>> zonecfg -z myzone
>>> create -a /rpool/zones/zone_roots/myzone
>>>
>>> I alter the zone configuration properties as needed for networking 
>>> etc, then commit and exit.
>>>
>>> Finally, I attempt to attach the zone:
>>> pfexec zoneadm -z myzone attach
>>>
>>> at which point I get:
>>> Log File: /var/tmp/myzone.attach_log.Wsaq8n
>>> ERROR: no active dataset.
>>> Result: Attach Failed.
>>>
>>> What is this referring to, and why can I not find any reference to 
>>> it in the documentation? Any pointers welcome :)
>>>
>>> Cheers,
>>> Dave
>>
>>
>> On 25/05/11 06:16 PM, Okky Hendriansyah wrote:
>>> Hi Dave,
>>>
>>> What are the output of "zfs list" on both machines? I think you have 
>>> to create the "myzone" ZFS dataset on machine 2 before attaching the 
>>> zone to it.
>>>
>>> Regards,
>>> Okky Hendriansyah
>>
>> Hi Okky,
>>
>> Thanks for your reply, output of machine 1 (the source machine) and 
>> machine 2 (the target):
>>
>> Machine 1:
>>
>> NAME                                                   USED  AVAIL  
>> REFER  MOUNTPOINT
>> rpool/zones                                           7.80G   214G    
>> 34K  /rpool/zones
>> rpool/zones/zone_roots                                7.80G   214G    
>> 35K  /rpool/zones/zone_roots
>> rpool/zones/zone_roots/myzone              4.08G   214G    33K  
>> /rpool/zones/zone_roots/myzone
>> rpool/zones/zone_roots/myzone/ROOT         4.08G   214G    31K  legacy
>> rpool/zones/zone_roots/myzone/ROOT/zbe     4.08G   214G  4.01G  legacy
>>
>>
>> Machine 2:
>>
>> NAME                                               USED  AVAIL  
>> REFER  MOUNTPOINT
>> rpool/zones                                       7.59G  18.8G    
>> 32K  /rpool/zones
>> rpool/zones/zone_roots                            7.59G  18.8G  
>> 7.59G  /rpool/zones/zone_roots
>>
>>
>> So yes, the ""myzone" ZFS data set does not exist, but wouldn't this 
>> get created when the zone is attached? Alternatively, creating the 
>> dataset manually before the zone is attached does not change the 
>> behaviour, and I get the same error message.
>>
>> I'm clearly getting something confused here, any ideas?
>>
>
>
> As tends to happen, right after sending this I located a guide which 
> apparently doesn't make the assumptions in the first documentation 
> link I sent, specifically the section headed "Containers Residing on 
> an Oracle Solaris ZFS Filesystem":
>
> http://developers.sun.com/solaris/docs/howto_movesolariscontainer_051410-1.pdf 
>
>
> Will work thought this and shout if I have questions...
>

Well, if this wasn't the biggest pain in the arse to actually get going 
(the document linked above was useless) - a brief summary of what to do 
(pieced together from a bunch of places on the web) follows in case 
anyone else needs it in the future (will blog this too):

In summary, I want to migrate the zone "myzone" on machine 1 to machine 2.

On Machine 1:

1) Detach myzone, e.g.:

#zoneadm -z myzone detach


2) Make snapshots of the following ZFS filesystems relevant to the zone 
"myzone":

rpool/zones/zone_roots/myzone
rpool/zones/zone_roots/myzone/ROOT
rpool/zones/zone_roots/myzone/ROOT/zbe

e.g.

# zfs snapshot -r rpool/zones/zone_roots/myzone at snap1


3) Archive the snapshots into files in preparation for copying to 
machine 2, e.g.:

# zfs send rpool/zones/zone_roots/myzone at snap1 > 
/export/home/davek/myzone.snap1
# zfs send rpool/zones/zone_roots/myzone/ROOT at snap1 > 
/export/home/davek/myzone_root.snap1
# zfs send rpool/zones/zone_roots/myzone/ROOT/zbe at snap1 > 
/export/home/davek/myzone_root_zbe.snap1

4) Copy the archived snapshot files to machine 2 in any way you see fit


On Machine 2:

1) Assuming the desired zonepath for your zones is 
/rpool/zones/zone_roots, create the ZFS filesystems if necessary, e.g.:

# zfs create rpool/zones
# zfs create rpool/zones/zone_roots


2) Restore the snapshot files into the relevant ZFS filesystems (these 
will be created on the fly), e.g.:

# zfs receive rpool/zones/zone_roots/myzone < 
/export/home/davek/myzone.snap1
# zfs receive rpool/zones/zone_roots/myzone/ROOT < 
/export/home/davek/myzone_root.snap1
# zfs receive rpool/zones/zone_roots/myzone/ROOT/zbe < 
/export/home/davek/myzone_root_zbe.snap1

3) Change the mountpoint type to legacy for the following two ZFS 
filesystems:

rpool/zones/zone_roots/myzone/ROOT
rpool/zones/zone_roots/myzone/ROOT/zbe

e.g.:

# zfs set mountpoint=legacy rpool/zones/zone_roots/myzone/ROOT
# zfs set mountpoint=legacy rpool/zones/zone_roots/myzone/ROOT/zbe


4) Mount the following filesystem using a legacy mount command:

rpool/zones/zone_roots/myzone/ROOT/zbe

We want to mount this to /rpool/zones/zone_roots/myzone/root

e.g.:

# mount  -F zfs rpool/zones/zone_roots/myzone/ROOT/zbe 
/rpool/zones/zone_roots/myzone/root


5) Now, configure the zone:

# zonecfg -z myzone

When prompted to create a zone, use the XML configuration file that will 
be sitting in /rpool/zones/zone_roots/myzone. Use the create command in 
the following way:

create -a /rpool/zones/zone_roots/myzone

If this is successful, you won't receive any confirmation (only an error 
if the configuration file cannot be found).

Continue to use zonecfg to customise any properties relevant to machine 
2 (e.g. set a different IP address), then commit the changes and exit 
zonecfg


6) Attach the zone

Finally, run the follwing:

# zoneadm -z myzone attach -u

Zone will attach and can now be booted.

-- 
Dave Koelmeyer
http://davekoelmeyer.wordpress.com/





More information about the OpenIndiana-discuss mailing list