IT debris

SmartOS – Mirroring your Zones pool

· Remy

Warning! Out of date content.

If you performed your initial SmartOS configuration with a single disk your Zones pool will have no fault-tolerance.

A zpool list -v shows the single disk (c0t3d0 in my setup) in my zones pool.

# zpool list -v
NAME         SIZE  ALLOC   FREE  EXPANDSZ    CAP  DEDUP  HEALTH  ALTROOT
zones       1.81T   484G  1.34T         -    26%  1.00x  ONLINE  -
c0t3d0      1.81T   484G  1.34T         -

During my initial setup I used a single WD Red 2TB disk. If that one disk dies all data will be lost and that got me thinking about creating some fault tolerance.

A few weeks after the initial setup I added several other disks to the system. In my case a second 2TB WD Red drive and two old OCZ Vertex2 SSD drives I had lying around. The SSD drives will be used as cache and log drives in the future.

I added some basic fault tolerance by creating a mirror.
This was accomplished by adding the second WD red drive to the zones pool as a mirror of the existing drive.

Below a short write up on to how to create a mirror.

First find out the names of the new disk devices
Below I use the format commando to generate a list of disks devices in my system. I exit format by pressing CTRL+C.

# format
Searching for disks...done

AVAILABLE DISK SELECTIONS:
       0. c0t0d0 <ATA-OCZ-VERTEX2-1.37-55.90GB>
          /pci@0,0/pci1849,1c02@1f,2/disk@0,0
       1. c0t1d0 <ATA-OCZ-VERTEX2-1.37-55.90GB>
          /pci@0,0/pci1849,1c02@1f,2/disk@1,0
       2. c0t2d0 <ATA-WDC WD20EFRX-68A-0A80-1.82TB>
          /pci@0,0/pci1849,1c02@1f,2/disk@2,0
       3. c0t3d0 <ATA-WDC WD20EFRX-68A-0A80-1.82TB>
          /pci@0,0/pci1849,1c02@1f,2/disk@3,0
Specify disk (enter its number): ^C

A cfgadm -l -v also shows your disk devices.

# cfgadm -l -v
Ap_Id                          Receptacle   Occupant     Condition  Information
When         Type         Busy     Phys_Id
sata0/0::dsk/c0t0d0            connected    configured   ok         Mod: OCZ-VERTEX2 FRev: 1.37 SN:
unavailable  disk         n        /devices/pci@0,0/pci1849,1c02@1f,2:0
sata0/1::dsk/c0t1d0            connected    configured   ok         Mod: OCZ-VERTEX2 FRev: 1.37 SN:
unavailable  disk         n        /devices/pci@0,0/pci1849,1c02@1f,2:1
sata0/2::dsk/c0t2d0            connected    configured   ok         Mod: WDC WD20EFRX-68AX9N0 FRev: 80.00A80 SN:
unavailable  disk         n        /devices/pci@0,0/pci1849,1c02@1f,2:2
sata0/3::dsk/c0t3d0            connected    configured   ok         Mod: WDC WD20EFRX-68AX9N0 FRev: 80.00A80 SN:
unavailable  disk         n        /devices/pci@0,0/pci1849,1c02@1f,2:3
sata0/4                        empty        unconfigured ok
unavailable  sata-port    n        /devices/pci@0,0/pci1849,1c02@1f,2:4
sata0/5                        empty        unconfigured ok
unavailable  sata-port    n        /devices/pci@0,0/pci1849,1c02@1f,2:5
[..additional output removed for brevity..]

The above two lists shows:

  • disk c0t3d0 which I know to be already part of the zones pool
  • the new WD disk called c0t2d0
  • two new OCZ Vertex2 disks called c0t0d0 and c0t1d0

Creating the mirror
After learning the device ids of the new disks I created the mirror in the zones pool by attaching the new WD device (c0t2d0) to the existing device (c0t3d0) in the zones zpool.

# zpool attach zones c0t3d0 c0t2d0

Refer to man zpool for more info about the zpool attach command.  A quick zpool list -v to confirm the result is as expected:

# zpool list -v
NAME         SIZE  ALLOC   FREE  EXPANDSZ    CAP  DEDUP  HEALTH  ALTROOT
zones       1.81T   484G  1.34T         -    26%  1.00x  ONLINE  -
  mirror    1.81T   484G  1.34T         -
    c0t3d0      -      -      -         -
    c0t2d0      -      -      -         -

A new mirror consisting of c0t3d0 and c0t2d0 had been created.

Checking the status
The new mirror starts rebuilding (resilvering) immediately. Zpool status -v shows the progress.

# zpool status -v
  pool: zones
 state: ONLINE
status: One or more devices is currently being resilvered.  The pool will
        continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
  scan: resilver in progress since Mon Sep 30 20:45:59 2013
    427M scanned out of 484G at 71.2M/s, 1h55m to go
    423M resilvered, 0.09% done
config:

        NAME        STATE     READ WRITE CKSUM
        zones       ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            c0t3d0  ONLINE       0     0     0
            c0t2d0  ONLINE       0     0     0  (resilvering)

errors: No known data errors

You can monitor the progress by repeatedly querying the status.

Done
When resilvering is done the status will change accordingly.

# zpool status -v
  pool: zones
 state: ONLINE
  scan: resilvered 484G in 2h32m with 0 errors on Mon Sep 30 23:18:47 2013
config:

        NAME        STATE     READ WRITE CKSUM
        zones       ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            c0t3d0  ONLINE       0     0     0
            c0t2d0  ONLINE       0     0     0

errors: No known data errors