zfs
Форк OpenZFS. Ветка по умолчанию зеркалит upstream master; собственная работа проекта лежит в отдельных ветках: прототип перестройки RAIDZ на месте и материалы, чтобы предложить её в upstream.
- OpenZFS
- RAIDZ
- C
- Статус
- По словам самого репозитория — проверенный прототип, а не законченная функция: не готов к продакшену, формат на диске не окончательный. Проверен матрицами потери дисков, точками сбоя, KASAN и длительными прогонами; масштаб больших пулов и полный прогон ZTS ещё впереди.
- Лицензия
- CDDL, как в upstream OpenZFS; исключения указаны в отдельных исходных файлах.
- Платформы
- Linux; проверено в лабораторной ВМ Ubuntu на QEMU/KVM на сборках от zfs-2.4.4 и от текущего master.
Какую задачу решает
Если пул обслуживает работающие виртуальные машины и контейнеры, сменить избыточность RAIDZ или убрать диск сегодня можно только в окно обслуживания: перенести гостей, экспортировать пул, перестроить, вернуть всё обратно. Расширение RAIDZ в OpenZFS 2.3 добавило только онлайн-увеличение ширины. Цель этой работы — менять геометрию живого пула на месте, используя только свободное место самого пула и сохраняя снапшоты и клоны.
Основные возможности
zpool reparityповышает или понижает чётность RAIDZ на месте (raidz1 ↔ raidz2 ↔ raidz3); с--onlineдатасеты остаются смонтированными, а с--async,--statusи--cancelоперация идёт в фоне.- Таблица эпох раскладки для каждого vdev под одним новым флагом функции (рабочее имя
com.openzfs:raidz_parity_epochs): каждый блок читается и восстанавливается в той геометрии, в которой был записан. - Фиксация по принципу fail-closed: новая чётность вступает в силу, только когда перепись блоков не находит ни одного со старой; иначе проход продолжается, в том числе после сбоя.
- Офлайн-инструменты
zhack: удаление диска из RAIDZ vdev (N → N−1), перестройка со снапшотами и клонами, пересчёт контрольных сумм и пересжатие существующих данных; последние два — экспериментальные. - Функциональные тесты ZTS и man-страницы для новых команд; RFC и стек веток, подготовленные для ревью в upstream.
Как это работает
Каждый RAIDZ vdev верхнего уровня получает небольшую таблицу записей {start_txg, width, parity}, которая только дописывается, — той же формы, что и существующие записи расширения RAIDZ. Геометрия блока выбирается по txg его рождения, поэтому старые и новые блоки сосуществуют. Ограниченный проход, который возобновляется после сбоя, переписывает существующие блоки обычным copy-on-write. Кодирование строк 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пул нужно экспортировать.
Эта страница кратко пересказывает README и документацию репозитория по состоянию на октябрь 2026 года. Первоисточник — сам репозиторий.