Can I add a Raidz vdev to an Existing Striped Pool?

Hello,

When I originally setup up my server I setup my media pool in a rather poor way. I had a bunch of drives lying around and wasn’t in a position the shell out money at the time for a new set of of drives to set up a proper pool with them in a Raidz vdev.

Things have now changed and I just completed the burn-in procedure for 6 16TB seagate exos drives and want to add them to my existing pool and get rid of the old drives.

The existing media pool consists of 3 vdevs: the 1st has four striped 4tb drives, the 2nd has two striped 12tb drives and the last vdev is a single 10tb drive. Really ugly, I know, hence why I want to do things properly now.

My initial thought was that I would be able to add a new raidz vdev with the six new 16tb drives to the existing media pool but I don’t see that option in the gui.

I guess my 2nd option is to create a new pool, call it say “Media2” and then copy all the content from the old “Media” pool to the new “Media 2” pool. Once that’s done I can just turf the old drives. Due to how I have everything configured I rather not go down this route.

Do I have any other options? Like maybe wait for Electric Eel to come out with the vdev expandability feature?

Curious to hear what your suggestions are. Thanks in advance!!!

You can add a vdev, but you definitely don’t want to add it to that pool. It seems you’re aware that the pool structure is less than optimal (kinda scary, really).

Create a new pool and copy the data over. You can create a mirror or other smaller pools with the old disks afterwards.

Although you can add a raidz VDev to your pool of stripes, you shouldn’t.

Once you add the raidz vdev, you will no longer be able to remove the stripes.

The right way to do this is to create a new pool with a new raidz VDev and then zfs replicate the contents of your old pool to the new one.

For bonus points rename the new pool to match the old pool and most of your config should still function.

1 Like

Thanks guys. I kinda thought this was what I would have to do but it’s good to get confirmation.

@Stux, regarding your bonus points comment, would this be the right order of things:

  1. create new “Media2” pool
  2. copy contents from “Media” to “Media2”
  3. delete “Media” pool
  4. rename “Media2” pool to “Media”?

Also, when you say “zfs replicate” is this a specific function or just a straight copy from a to b?

Use a once off replication task with local to local.

And yes, that’s the correct order. You use “export pool” to dump and erase the old pool, but leave the configurations.

Ok so it looks like I hit my first snag on step 2. Step 1 was straight forward, I created Media2 but haven’t created any datasets within it like I have in the “Media” pool. I went to Data Protection then tried to add a Replication Task but it didn’t let me get past the first screen:

I assume this is because I don’t have a snapshot created? If so, do I do this through “Periodic Snapshot Tasks” → “Add” in the “Data Protection” tab like this?

I realize this is complete n00b territory so apologies and thanks in advance.

You will want Recursive checked and probably want to create a snapshot (since I think replication is snapshot based).

Yes, good catch, thank you.

So now I think I’m at the stage of replicating the data from the “Media” pool to the “Media2” pool. I’m creating a new Replication Task using the wizard but unfortunately when I get to Step 2, the “When”, the “Start Replication” button is grayed out.

The only way it becomes clickable is if I change the “Replication Schedule” radio button to “Run On a Schedule” which is not what I want to do. I just want to run it once to move the contents from the “Media” pool to the “Media2” pool.

Any suggestions?