Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 9 Jan 2022 01:28:00 -0800
From:      David Christensen <dpchrist@holgerdanske.com>
To:        questions@freebsd.org
Subject:   Re: Can I add a raidz vdev as a mirror of existing vdevs
Message-ID:  <c3a987c6-b576-799e-c312-00c87c3490a9@holgerdanske.com>
In-Reply-To: <81940818-6aaf-1a11-dd71-86eb5c51cab5@bluerosetech.com>
References:  <81940818-6aaf-1a11-dd71-86eb5c51cab5@bluerosetech.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On 1/8/22 6:11 PM, Mel Pilgrim wrote:
> I have a zpool with a "stripe of mirrors" structure:
> 
> mech
>    mirror-0
>      disk0
>      disk1
>    mirror-1
>      disk2
>      disk3
>    ...
> 
> I want to convert it from mirrors to raidz as part of an upgrade, with 
> the final form looking something like this:
> 
> mech
>    raidz-0
>      disk20
>      disk21
>      ...
> 
> I'd like to be able to attach the new raidz vdev as a mirror to the 
> entire pool, have it silver, then detach the old vdevs.  Is this at all 
> possible?  I'd rather not create a whole new pool and copy everything 
> over because doing so would require downtime.


On 1/8/22 8:32 PM, Mel Pilgrim wrote:
 > On 2022-01-08 18:52, Paul Procacci wrote:
 >> Found an answer to this on facebook of all places .......
 >>
 >> 
https://www.facebook.com/notes/unix-in-egypt/converting-zfs-2-way-mirror-to-a-raidz-array-wihtout-losing-data/10151919826687996/ 

 >> 
<https://www.facebook.com/notes/unix-in-egypt/converting-zfs-2-way-mirror-to-a-raidz-array-wihtout-losing-data/10151919826687996/>; 

 >>
 >>
 >> My initial reaction was going to be 'no'....but after reading this, it
 >> does seem it is possible.
 >> I've never done it personally, but with proper backups .... why not?
 >
 > The degraded pool shenanigans described are to avoid needing separate
 > disks for the old and new structure, but that's exactly what I have, so
 > I can skip all of that.  With those bits skipped, that becomes a regular
 > exercise of creating a new pool and streaming snapshots, which requires
 > downtime.


It would help if you posted the actual disk sizes (disk0, disk1, disk2, 
disk3, etc., and disk20, disk21, disk22, etc.), drive slot quanities 
(total, used, and available), the current pool structure ('zpool status 
mech'), the raidz level you want (1, 2, or 3), and the desired pool 
structure.


Assuming suitable drive quantities and sizes, spare drive slots, etc., I 
believe the following can be done without downtime (but performance will 
be impacted during evacuation/ copy):

1.  Add drives disk20, disk21, etc., to pool "mech" as raidzN  vdev's. 
For example:

	zpool add mech raidz1 disk20 disk21 disk22

	zpool add mech raidz1 disk23 disk24 disk25

	...

2.  Remove mirrors from the pool:

	zpool remove mech mirror-0

	zpool remove mech mirror-1

	...


Alternatively, interleave add's and remove's:

	zpool add mech raidz1 disk20 disk21 disk22

	zpool remove mech mirror-0

	zpool add mech raidz1 disk23 disk24 disk25

	zpool remove mech mirror-X

	...

Verify "mirror-X" for the second and subsequent removals.


Beware that FreeBSD 12.2-R man zpool(8) states that 'zpool remove' can 
remove mirrored top-level vdevs, but not raidz.  So, if you botch adding 
a raidz vdev, you may need to wipe the pool, try again, and restore from 
backup.


David



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?c3a987c6-b576-799e-c312-00c87c3490a9>