Abbiamo appena lanciato il servizio. Il sito e il servizio sono ancora in fase di rifinitura: ci scusiamo in anticipo per eventuali imprecisioni o imperfezioni. Ha notato un errore o qualcosa non funziona come previsto? Ci scriva e lo correggeremo subito.

← Tutti i progetti
IT
Oltre TAKT

zfs

Un fork di OpenZFS. Il branch predefinito rispecchia il master upstream; il lavoro proprio del progetto si trova in branch separati: un prototipo di riconfigurazione di RAIDZ sul posto e il materiale per proporlo upstream.

  • OpenZFS
  • RAIDZ
  • C
Stato
Un prototipo validato, non una funzionalità finita, secondo le parole del repository stesso: non pronto per la produzione, formato su disco non definitivo. Testato con matrici di perdita di dispositivi, punti di interruzione per crash, KASAN ed esecuzioni di soak; la scala di pool grandi e un’esecuzione completa di ZTS restano aperte.
Licenza
CDDL, come OpenZFS upstream; le eccezioni sono indicate nei singoli file sorgente.
Piattaforme
Linux; testato in una VM di laboratorio Ubuntu con QEMU/KVM su build basate su zfs-2.4.4 e sul master attuale.

Quale problema risolve

Su un pool che ospita macchine virtuali e container in esecuzione, cambiare la ridondanza RAIDZ o rimuovere un disco richiede oggi una finestra di manutenzione: spostare i guest, esportare il pool, ricostruire, rimettere tutto in funzione. L’espansione RAIDZ di OpenZFS 2.3 ha aggiunto solo l’aumento di larghezza online. L’obiettivo di questo lavoro è cambiare la geometria di un pool attivo sul posto, usando solo lo spazio libero del pool stesso e preservando snapshot e cloni.

Funzionalità principali

  • zpool reparity aumenta o riduce la parità RAIDZ sul posto (raidz1 ↔ raidz2 ↔ raidz3); con --online i dataset restano montati, e --async, --status e --cancel lo eseguono in background.
  • Una tabella di epoche di layout per vdev dietro un unico nuovo feature flag (nome provvisorio com.openzfs:raidz_parity_epochs): ogni blocco viene letto e ricostruito con la geometria con cui è stato scritto.
  • Commit fail-closed: la nuova parità entra in vigore solo dopo che un censimento non trova più blocchi con quella vecchia; altrimenti la scansione riprende, anche dopo un crash.
  • Strumenti zhack offline: rimozione di un disco da un vdev RAIDZ (N → N−1), riconfigurazione con snapshot e cloni, ricalcolo dei checksum e ricompressione dei dati esistenti; gli ultimi due sono sperimentali.
  • Test funzionali ZTS e pagine man per i nuovi comandi; un RFC e una serie impilata di branch preparati per la revisione upstream.

Come funziona

Ogni vdev RAIDZ di primo livello riceve una piccola tabella append-only di record {start_txg, width, parity}, con la stessa forma dei record esistenti dell’espansione RAIDZ. La geometria di un blocco viene scelta in base al suo txg di nascita, quindi blocchi vecchi e nuovi coesistono. Una scansione limitata e ripristinabile dopo un crash riscrive i blocchi esistenti tramite il normale copy-on-write. La codifica delle righe RAIDZ, il formato dei block pointer e l’ashift non cambiano.

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

Requisiti

  • Un pool con vdev RAIDZ. Il feature flag è incompatibile e diventa attivo con la prima riconfigurazione.
  • Si compila dai sorgenti come OpenZFS. I branch ozfs-pr/1-parity-epochs-recon, ozfs-pr/2-reparity-command e ozfs-pr/3-reshape-toolkit si basano su master, feat/raidz-* su zfs-2.4.4.
  • La rimozione di un disco e gli strumenti zhack offline richiedono il pool esportato.

Questa pagina riassume il README e la documentazione del repository a ottobre 2026. La fonte di riferimento è il repository stesso.