From what I can tell, Nope, MUCH, MUCH, (add 10 more), harder.
Adding parity will involve block pointer updates. Not the de-fragment or fragment that some people want. Just a plain block pointer update for new location. So, VERY HARD because of:
- hard links
- block clones
- snapshots
- dataset clones
- bookmarks?
Now why does that need a new location?
Simple, a full width RAID-Zx stripe without a spare block immediately after, can’t support an additional parity. Remember, adding a column to RAID-Zx does not add free space at the column level, but at the end of the vDev.
Further, during the disk add routine, exactly the same as RAID-Zx expansion, any new writes would need to be restricted to the old maximum width. Or perhaps written with the new parity level. This is needed because we must not let any old level of parity be written to the new maximum width. That would prevent additional parity to be added to that RAID-Zx stripe, (without adding yet another disk!).
This does assume that RAID-Zx stripes are contiguous. But, I think they are, (just covering my bets in case they don’t have to be…).
The biggest stumbling block for this feature is the “block pointer update”. As soon as word gets out that you are working on such, people will jump all over you and ask / demand / threaten for the Holy Grail of de-fragmenting or fragmenting. Those are in a whole another universe of HARD. Right up there with changing compression, encryption & de-duplication in place.
Now the first step could be taking a single disk and adding single parity. Initially it would have all the new parity on the new disk. But, future writes would be distributed between the 2 disks. And of course, you can then expand that 2 disk RAID-Z1 as desired.
People may say why?
Because converting a Mirror pool to RAID-Zx might then be possible.
Of course, this does not get us normal Add Parity to RAID-Z1/2.