zfs
Un fork de OpenZFS. Su rama por defecto replica la rama master de upstream; el trabajo propio del proyecto está en ramas aparte: un prototipo de reconfiguración de RAIDZ in situ y el material para proponerlo upstream.
- OpenZFS
- RAIDZ
- C
- Estado
- Un prototipo validado, no una función terminada, según el propio repositorio: no está listo para producción y el formato en disco no es definitivo. Probado con matrices de pérdida de dispositivos, puntos de interrupción por caída, KASAN y pruebas de resistencia prolongadas; la escala de pools grandes y una ejecución completa de ZTS siguen pendientes.
- Licencia
- CDDL, como OpenZFS upstream; las excepciones se indican en los archivos fuente correspondientes.
- Plataformas
- Linux; probado en una VM de laboratorio Ubuntu con QEMU/KVM sobre compilaciones basadas en zfs-2.4.4 y en el master actual.
Qué resuelve
En un pool que da servicio a máquinas virtuales y contenedores en marcha, cambiar la redundancia de RAIDZ o retirar un disco exige hoy una ventana de mantenimiento: mover los invitados, exportar el pool, reconstruir y volver a ponerlo todo en marcha. La expansión de RAIDZ de OpenZFS 2.3 solo añadió el aumento de ancho en línea. El objetivo de este trabajo es cambiar la geometría de un pool activo in situ, usando solo el espacio libre del propio pool y conservando instantáneas y clones.
Funciones principales
zpool reparitysube o baja la paridad de RAIDZ in situ (raidz1 ↔ raidz2 ↔ raidz3); con--onlinelos datasets siguen montados, y--async,--statusy--cancello ejecutan en segundo plano.- Una tabla de épocas de disposición por vdev tras un único feature flag nuevo (nombre provisional
com.openzfs:raidz_parity_epochs): cada bloque se lee y se reconstruye con la geometría con la que se escribió. - Confirmación en modo fail-closed: la nueva paridad entra en vigor solo cuando un censo no encuentra ningún bloque con la antigua; si no, el barrido se reanuda, también tras una caída.
- Herramientas
zhackfuera de línea: retirar un disco de un vdev RAIDZ (N → N−1), reconfigurar con instantáneas y clones, recalcular checksums y recomprimir los datos existentes; las dos últimas son experimentales. - Pruebas funcionales ZTS y páginas man para los nuevos comandos; un RFC y una serie apilada de ramas preparadas para la revisión upstream.
Cómo funciona
Cada vdev RAIDZ de nivel superior recibe una pequeña tabla de solo anexado con registros {start_txg, width, parity}, con la misma forma que los registros existentes de la expansión de RAIDZ. La geometría de un bloque se elige por su txg de nacimiento, de modo que los bloques antiguos y los nuevos coexisten. Un barrido acotado y reanudable tras una caída reescribe los bloques existentes mediante el copy-on-write ordinario. La codificación de filas de RAIDZ, el formato de los punteros de bloque y el ashift no cambian.
zpool reparity [--online | --async | --status | --cancel] [--target N] pool
Requisitos
- Un pool con vdevs RAIDZ. El feature flag es incompatible y se activa con la primera reconfiguración.
- Se compila desde el código fuente como OpenZFS. Las ramas
ozfs-pr/1-parity-epochs-recon,ozfs-pr/2-reparity-commandyozfs-pr/3-reshape-toolkitparten de master;feat/raidz-*, de zfs-2.4.4. - Retirar un disco y las herramientas
zhackfuera de línea requieren exportar el pool.
Esta página resume el README y la documentación del repositorio a octubre de 2026. La fuente de referencia es el propio repositorio.