We've just launched. The site and the service are still being polished — we apologize in advance for any inaccuracies or rough edges. Spotted a mistake or something that doesn't work as expected? Tell us and we'll fix it quickly.

← All projects
EN
Beyond TAKT

zfs

A fork of OpenZFS. Its default branch mirrors upstream master; the project’s own work lives in separate branches: a prototype of in-place RAIDZ reshaping and the material for proposing it upstream.

  • OpenZFS
  • RAIDZ
  • C
Status
A validated prototype, not a finished feature, in the repository’s own words: not production-ready, the on-disk format is not final. Tested with device-loss matrices, crash cutpoints, KASAN and soak runs; large-pool scale and a full ZTS run are still open.
License
CDDL, as upstream OpenZFS; exceptions are noted in individual source files.
Platforms
Linux; tested in an Ubuntu QEMU/KVM lab VM on builds based on zfs-2.4.4 and on current master.

What it solves

On a pool that backs running virtual machines and containers, changing RAIDZ redundancy or removing a disk today means a maintenance window: move the guests, export the pool, rebuild, bring everything back. RAIDZ expansion in OpenZFS 2.3 added only online width growth. The goal of this work is to change the geometry of a live pool in place, using only the pool’s own free space, with snapshots and clones preserved.

Key features

  • zpool reparity raises or lowers RAIDZ parity in place (raidz1 ↔ raidz2 ↔ raidz3); with --online the datasets stay mounted, and --async, --status and --cancel run it in the background.
  • A per-vdev layout-epoch table behind one new feature flag (working name com.openzfs:raidz_parity_epochs): every block is read and reconstructed at the geometry it was written with.
  • Fail-closed commit: the new parity takes effect only after a census finds no blocks left at the old one; otherwise the sweep resumes, also after a crash.
  • Offline zhack tools: removing a disk from a RAIDZ vdev (N → N−1), reshaping with snapshots and clones, re-checksumming and recompressing existing data; the last two are experimental.
  • ZTS functional tests and man pages for the new commands; an RFC and a stacked series of branches prepared for upstream review.

How it works

Each top-level RAIDZ vdev gets a small append-only table of {start_txg, width, parity} records, the same shape as the existing RAIDZ expansion records. A block’s geometry is chosen by its birth txg, so old and new blocks coexist. A bounded, crash-resumable sweep rewrites the existing blocks through ordinary copy-on-write. The RAIDZ row encoding, the block pointer format and ashift do not change.

zpool reparity [--online | --async | --status | --cancel] [--target N] pool

Requirements

  • A pool with RAIDZ vdevs. The feature flag is incompatible and becomes active with the first reshape.
  • Built from source like OpenZFS. The branches ozfs-pr/1-parity-epochs-recon, ozfs-pr/2-reparity-command and ozfs-pr/3-reshape-toolkit are based on master, feat/raidz-* on zfs-2.4.4.
  • Removing a disk and the offline zhack tools need the pool exported.

This page summarises the repository’s README and documentation as of October 2026. The repository itself is the authoritative source.