Clonazione dei blocchi su ReFS

Si applica a: Windows Server 2022, Windows Server 2019, Windows Server 2016

La clonazione dei blocchi indica al file system di copiare un intervallo di byte di file per conto di un'applicazione in cui il file di destinazione può essere lo stesso oppure può essere diverso dal file di origine. Le operazioni di copia sono costose in quanto attivano letture e scritture impegnative sui dati fisici sottostanti.

La clonazione dei blocchi in ReFS, tuttavia, esegue le copie come un'operazione di metadati a basso costo invece che leggere e scrivere nei dati dei file. Poiché ReFS consente a più file di condividere gli stessi cluster logici (posizioni fisiche su un volume), le operazioni di copia devono solo rimappare un'area di un file in una posizione fisica separata, trasformando in questo modo un'operazione fisica costosa in una rapida operazione logica. Ciò consente di completare le copie in modo più rapido e di generare meno I/O nell'archiviazione sottostante. Questo miglioramento offre vantaggi anche ai carichi di lavoro della virtualizzazione in quanto, quando si utilizzano le operazioni di clonazione dei blocchi, le operazioni di unione del checkpoint .vhdx. vengono estremamente velocizzate. Inoltre, poiché più file possono condividere gli stessi cluster logici, i dati identici non vengono fisicamente archiviati più volte, migliorando la capacità di archiviazione.

Funzionamento

La clonazione dei blocchi su ReFS converte un'operazione dati dei file in un'operazione di metadati. Per effettuare questa ottimizzazione, ReFS introduce nei metadati i conteggi dei riferimenti per le aree copiate. Questo conteggio dei riferimenti registra il numero delle aree distinte del file che si riferiscono alle stesse aree fisiche. Ciò consente a più file di condividere gli stessi dati fisici:

Show reference count updates when multiple files reference same region

Mantenendo un conteggio dei riferimenti per ogni cluster logico, ReFS non interrompe l'isolamento dei file: la scrittura nelle aree condivise attiva un meccanismo di allocazione in fase di scrittura dove ReFS alloca una nuova area per la scrittura. Questo meccanismo preserva l'integrità dei cluster logici condivisi.

Esempio

Si supponga ci siano due file, X e Y; ciascun file è formato da tre aree e ciascuna area è mappata su cluster logici separati.

Two files each with three distinct regions which all map to regions that have ref count 1

Si supponga ora che un'applicazione avvii un'operazione di clonazione dei blocchi dal File X al File Y per copiare le aree A e B all'offset dell'area E. Lo stato del file system sarà il seguente:

Reference count shows 2 for blocked clone region

Questo stato del file system indica una duplicazione corretta dell'area con i blocchi clonati. Poiché ReFS effettua questa operazione di copia aggiornando solo le mappature VCN su LCN, non sono stati letti dati fisici, né sovrascritti dati fisici nel File Y. I file X e Y ora condividono cluster logici, riflessi dai conteggi dei riferimenti nella tabella. Poiché non sono stati fisicamente copiati dati, ReFS riduce il consumo di capacità del volume.

Si supponga ora che l'applicazione tenti di sovrascrivere l'area A nel File X. ReFS duplicherà l'area condivisa, aggiornerà il conteggio dei riferimenti in modo appropriato ed eseguirà la scrittura nell'area duplicata. In questo modo viene mantenuto l'isolamento dei file.

Isolation preserved by writing to a new region G and updating ref counts

Dopo la scrittura di modifica, l'area B è ancora condivisa da entrambi i file. Notare che se l'area A fosse stata più grande di un cluster, sarebbe stato duplicato solo il cluster modificato e la parte rimanente sarebbe rimasta condivisa.

Restrizioni e note sulle funzionalità

  • L'area di origine e di destinazione deve iniziare e terminare al limite di un cluster.
  • L'area clonata deve avere una lunghezza minore di 4 GB.
  • Il numero massimo di aree file che possono essere mappate alla stessa area fisica è 8175.
  • L'area di destinazione non può estendersi oltre la fine del file. Se l'applicazione vuole estendere la destinazione con i dati clonati, deve prima chiamare SetEndOfFile.
  • Se le aree di origine e di destinazione si trovano nello stesso file, non si devono sovrapporre. (L'applicazione può continuare dividendo l'operazione di clonazione dei blocchi in più clonazioni dei blocchi che non si sovrappongono).
  • I file di origine e di destinazione devono essere nello stesso volume ReFS.
  • I file di origine e di destinazione devono avere la stessa impostazione Flussi di integrità.
  • Se il file di origine è un file sparse, anche il file di destinazione deve essere sparse.
  • L'operazione di clonazione dei blocchi interromperà i blocchi opportunistici condivisi (noti anche come Blocchi opportunistici di Livello 2).
  • Il volume ReFS deve essere stato formattato con Windows Server 2016 e, se è in uso il Clustering di failover, il Livello di funzionalità del clustering al momento della formattazione doveva essere Windows Server 2016 o versioni successive.

Riferimenti aggiuntivi