Kernel Zone Storage Live Migration with ZOSS
So we have some Kernel Zones on shared storage that need to migrate to another shared storage. Let's do that without any service interruption.
Current status is:
root@global:~ # zonecfg -z kz1 info
...
device 0:
match not specified
storage: lu:luname.naa.6006016027802e00084ff53eefdae511
id: 1
bootpri not specified
device 1:
match not specified
storage: lu:luname.naa.6006016027802e00965dc37eefdae511
id: 0
bootpri: 1
...
root@global:~ # fcinfo lu -v
OS Device Name: /dev/rdsk/c0t600000E00D2B0000002B021000940000d0s2
HBA Port WWN: 2100000e1ed...
Remote Port WWN: 500000e0dac...
LUN: 0
Remote Port WWN: 500000e0dac...
LUN: 0
HBA Port WWN: 2100000e1ed...
Remote Port WWN: 500000e0dac...
LUN: 0
Remote Port WWN: 500000e0dac...
LUN: 0
Vendor: FUJITSU
Product: ETERNUS_DXH
Device Type: Disk Device
...
OS Device Name: /dev/rdsk/c0t600000E00D2B0000002B021000980000d0s2
HBA Port WWN: 2100000e1ed...
Remote Port WWN: 500000e0dac...
LUN: 150
Remote Port WWN: 500000e0dac...
LUN: 150
HBA Port WWN: 2100000e1ed...
Remote Port WWN: 500000e0dac...
LUN: 150
Remote Port WWN: 500000e0dac...
LUN: 150
Vendor: FUJITSU
Product: ETERNUS_DXH
Device Type: Disk Device
Looks good, we see the new LUNs, let's convert the OS Device Name
to a ZOSS Storage URI.
root@global:~ # suriadm lookup-uri -t lu /dev/dsk/c0t600000E00D2B0000002B021000940000d0 lu:luname.naa.600000e00d2b0000002b021000940000 ... root@global:~ # suriadm lookup-uri -t lu /dev/dsk/c0t600000E00D2B0000002B021000980000d0 lu:luname.naa.600000e00d2b0000002b021000980000
Let's add them to our kz1 zone config and do a live zone reconfiguration.
root@global:~ # zonecfg -z kz1 zonecfg:kz1> add device zonecfg:kz1:device> set storage=lu:luname.naa.600000e00d2b0000002b021000980000 zonecfg:kz1:device> set bootpri=1 zonecfg:kz1:device> set id=2 zonecfg:kz1:device> end zonecfg:kz1> add device zonecfg:kz1:device> set storage=lu:luname.naa.600000e00d2b0000002b021000940000 zonecfg:kz1:device> set id=3 zonecfg:kz1:device> end zonecfg:kz1> verify zonecfg:kz1> commit zonecfg:kz1> exit root@global:~ # zoneadm -z kz1 apply zone 'kz1': Checking: Adding device storage=lu:luname.naa.600000e00d2b0000002b021000940000 zone 'kz1': Checking: Adding device storage=lu:luname.naa.600000e00d2b0000002b021000980000 zone 'kz1': Applying the changes ...
Next steps are inside the Kernel Zone now.
root@kz1:~ # echo | format
Searching for disks...done
AVAILABLE DISK SELECTIONS:
0. c1d0 <DGC-VRAID-0532-15.00GB>
/kz-devices@ff/disk@0
1. c1d1 <DGC-VRAID-0532-65.00GB>
/kz-devices@ff/disk@1
2. c1d2 <FUJITSU-ETERNUS_DXH-1070 cyl 1920 alt 0 hd 256 sec 64>
/kz-devices@ff/disk@2
3. c1d3 <FUJITSU-ETERNUS_DXH-1070 cyl 8320 alt 0 hd 256 sec 64>
/kz-devices@ff/disk@3
Specify disk (enter its number): Specify disk (enter its number):
root@kz1:~ # zpool attach rpool c1d0 c1d2
Make sure to wait until resilver is done before rebooting.
root@kz1:~ # zpool attach tank c1d1 c1d3
# wait some time...
root@kz1:~ # zpool status -v
pool: rpool
state: ONLINE
scan: resilvered 7.53G in 33s with 0 errors on Tue Jan 30 15:09:55 2018
config:
NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
c1d0 ONLINE 0 0 0
c1d2 ONLINE 0 0 0
errors: No known data errors
pool: tank
state: ONLINE
scan: resilvered 28.9G in 7m40s with 0 errors on Tue Jan 30 15:17:26 2018
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
c1d1 ONLINE 0 0 0
c1d3 ONLINE 0 0 0
errors: No known data errors
root@kz1:~ # zpool detach rpool c1d0
root@kz1:~ # zpool detach tank c1d1
root@kz1:~ # bootadm install-bootloader
And that's almost it. Last thing is to remove the old storage LUNs from the Kernel Zone.
root@global:~ # zonecfg -z kz1 zonecfg:kz1> remove device id=0 zonecfg:kz1> remove device id=1 zonecfg:kz1> verify zonecfg:kz1> commit zonecfg:kz1> exit root@global:~ # zoneadm -z kz1 apply zone 'kz1': Checking: Removing device storage=lu:luname.naa.6006016027802e00084ff53eefdae511 zone 'kz1': Checking: Removing device storage=lu:luname.naa.6006016027802e00965dc37eefdae511 zone 'kz1': Applying the changes
And we're done.