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 reparityaumenta o riduce la parità RAIDZ sul posto (raidz1 ↔ raidz2 ↔ raidz3); con--onlinei dataset restano montati, e--async,--statuse--cancello 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
zhackoffline: 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-commandeozfs-pr/3-reshape-toolkitsi basano su master,feat/raidz-*su zfs-2.4.4. - La rimozione di un disco e gli strumenti
zhackoffline richiedono il pool esportato.
Questa pagina riassume il README e la documentazione del repository a ottobre 2026. La fonte di riferimento è il repository stesso.