I have found many articles about using ZFS mirroring with different sized disks, and it appears to be possible to grow a mirror by using larger disks. Is it possible to consolidate a stripe onto larger disks but fewer of them using mirroring?

We currently have 8 x 200GB LUNs on an old DMX2000 array

  NAME                                     STATE     READ WRITE CKSUM
    pool1                                   ONLINE       0     0     0
      disk1                                 ONLINE       0     0     0
      disk2                                 ONLINE       0     0     0
      disk3                                 ONLINE       0     0     0
      disk4                                 ONLINE       0     0     0
      disk5                                 ONLINE       0     0     0
      disk6                                 ONLINE       0     0     0
      disk7                                 ONLINE       0     0     0
      disk8                                 ONLINE       0     0     0

I know we could easily move this to our new VMAX array using the following commands

zpool attach pool1 disk9 disk10 disk11 disk12 disk13 disk14 disk15 disk16

zpool detach pool1 disk1 disk2 disk3 disk4 disk5 disk6 disk7 disk8

However, we want to consolidate this into 2x800GB LUNs

Can we do that with:

zpool attach pool1 disk9 disk10

where disk9 and disk10 are >800GB

zpool detach pool1 disk1 disk2 disk3 disk4 disk5 disk6 disk7 disk8

I've done similar consildation with Veritas Volume Manager, and Solaris Volume Manager, but never with ZFS. Is it possible?


1 Answer 1


Finally found a dev system for testing, and I realise I have misunderstod the structure of a pool.

Its strictly RAID 1+0 ish, and can never be RAID 0+1 which is what you would need to relayout.

The pool is first split into a stripe/concat, and then each column can be mirrored.

e.g. here is a 4-column stripe where the 2nd column is a normal mirror and the last column is a 4-way mirror

    POOLA                                        ONLINE       0     0     0
      c4t600A0B8000481D2400003BC54CE157B4d0s0    ONLINE       0     0     0
      mirror-1                                   ONLINE       0     0     0
        c4t600A0B8000481D2400003BC54CE157B4d0s1  ONLINE       0     0     0
        c4t600A0B8000481D2400003BC34CE15760d0s1  ONLINE       0     0     0
      c4t600A0B8000481D2400003BC54CE157B4d0s2    ONLINE       0     0     0
      mirror-3                                   ONLINE       0     0     0
        c4t600A0B8000481D2400003BC34CE15760d0s3  ONLINE       0     0     0
        c4t600A0B8000481D2400003BC54CE157B4d0s3  ONLINE       0     0     0
        c4t600A0B8000481D2400003BC34CE15760d0s2  ONLINE       0     0     0
        c4t600A0B8000481D2400003BC34CE15760d0s0  ONLINE       0     0     0

The add* command will only add more columns. They can be simple or mirrored columns.

The attach command will add mirrors to the columns.

The detach command will remove mirrors from the columns.

The remove command cannot remove a column.

* The add/remove commands also operate on cache, log, etc.

The syntax I suggested above is completely wrong, as attach will only accept ONE name of the component to be mirrored and ONE component to mirror it to. The only way to achieve what I want would be to create a new pool and send/receive the data to it.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .