TAKTのほかに
zfs
OpenZFSのフォークです。デフォルトブランチはアップストリームのmasterをそのまま反映しており、独自の作業は別のブランチにあります。RAIDZのインプレース再構成のプロトタイプと、それをアップストリームに提案するための資料です。
- OpenZFS
- RAIDZ
- C
- ステータス
- リポジトリ自身の表現では、完成した機能ではなく検証済みのプロトタイプです。本番環境での利用には対応しておらず、ディスク上のフォーマットも確定していません。デバイス喪失マトリクス、クラッシュのカットポイント、KASAN、長時間のソーク試験でテスト済みです。大規模プールでの検証と完全なZTSの実行はまだ残っています。
- ライセンス
- アップストリームのOpenZFSと同じくCDDLです。例外は個々のソースファイルに記載されています。
- プラットフォーム
- Linux。UbuntuのQEMU/KVMラボVMで、zfs-2.4.4ベースと現在のmasterベースのビルドでテストしています。
解決する課題
稼働中の仮想マシンやコンテナを支えるプールでは、現在、RAIDZの冗長度を変更したりディスクを取り外したりするにはメンテナンス時間が必要です。ゲストを移し、プールをエクスポートし、組み直し、すべてを元に戻します。OpenZFS 2.3のRAIDZ拡張で加わったのは、オンラインでの幅の拡張だけです。この作業の目標は、稼働中のプールのジオメトリを、プール自身の空き容量だけを使い、スナップショットとクローンを保ったままインプレースで変更することです。
主な機能
zpool reparityはRAIDZのパリティをインプレースで上げ下げします(raidz1 ↔ raidz2 ↔ raidz3)。--onlineではデータセットはマウントされたままで、--async、--status、--cancelでバックグラウンド実行を扱えます。- 1つの新しいフィーチャーフラグ(仮称
com.openzfs:raidz_parity_epochs)の下に置かれたvdevごとのレイアウトエポック表。各ブロックは書き込まれたときのジオメトリで読み出され、再構築されます。 - フェイルクローズのコミット:古いパリティのブロックが残っていないことを調査で確認して初めて、新しいパリティが有効になります。そうでなければスイープは再開され、クラッシュ後も同様です。
- オフラインの
zhackツール:RAIDZ vdevからのディスクの取り外し(N → N−1)、スナップショットとクローンがある状態での再構成、既存データのチェックサムの再計算と再圧縮。後の2つは実験的です。 - 新しいコマンドのZTS機能テストとmanページ。アップストリームのレビュー向けに用意したRFCと、積み重ねたブランチの系列。
仕組み
各トップレベルRAIDZ vdevに、{start_txg, width, parity}のレコードを追記していく小さな表を持たせます。形式は既存のRAIDZ拡張のレコードと同じです。ブロックのジオメトリは生成時のtxgで決まるため、古いブロックと新しいブロックが共存できます。範囲を限定し、クラッシュ後も再開できるスイープが、通常のコピーオンライトで既存のブロックを書き直します。RAIDZの行エンコーディング、ブロックポインタの形式、ashiftは変わりません。
zpool reparity [--online | --async | --status | --cancel] [--target N] pool
要件
- RAIDZ vdevを持つプール。フィーチャーフラグは非互換で、最初の再構成で有効になります。
- OpenZFSと同様にソースからビルドします。ブランチ
ozfs-pr/1-parity-epochs-recon、ozfs-pr/2-reparity-command、ozfs-pr/3-reshape-toolkitはmasterベース、feat/raidz-*はzfs-2.4.4ベースです。 - ディスクの取り外しとオフラインの
zhackツールには、プールのエクスポートが必要です。
このページは、2026年10月時点のリポジトリのREADMEとドキュメントの要約です。正式な情報源はリポジトリそのものです。