Clonazione di blocchi in ReFS

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

La clonazione di 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 uguale o diverso dal file di origine. Le operazioni di copia, purtroppo, sono costose, perché attivano operazioni di lettura e scrittura costose nei dati fisici sottostanti.

La clonazione di blocchi in ReFS, tuttavia, esegue copie come operazione di metadati a basso costo anziché leggere e scrivere nei dati dei file. Poiché ReFS consente a più file di condividere gli stessi cluster logici (percorsi fisici in un volume), le operazioni di copia devono solo eseguire il mapping di un'area di un file in una posizione fisica separata, convertendo un'operazione fisica costosa in un'operazione rapida e logica. In questo modo le copie possono essere completate più velocemente e generare meno I/O nella risorsa di archiviazione sottostante. Questo miglioramento offre anche vantaggi ai carichi di lavoro di virtualizzazione, poiché le operazioni di unione dei checkpoint con estensione vhdx vengono notevolmente accelerate quando si usano operazioni di clonazione di blocchi. Inoltre, poiché più file possono condividere gli stessi cluster logici, i dati identici non vengono archiviati fisicamente più volte, migliorando la capacità di archiviazione.

Funzionamento

La clonazione di blocchi in ReFS converte un'operazione di dati di file in un'operazione di metadati. Per eseguire questa ottimizzazione, ReFS introduce i conteggi dei riferimenti nei relativi metadati per le aree copiate. Questo conteggio dei riferimenti registra il numero di aree file distinte che fanno riferimento 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 tra i file: le scritture nelle aree condivise attivano un meccanismo di allocazione in scrittura, in cui ReFS alloca una nuova area per la scrittura in ingresso. Questo meccanismo mantiene l'integrità dei cluster logici condivisi.

Esempio

Si supponga che siano presenti due file, X e Y, in cui ogni file è composto da tre aree e ogni area è mappata a 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 esenga un'operazione di clonazione di blocchi da File X a File Y, per le aree A e B da copiare in corrispondenza dell'offset dell'area E. Lo stato del file system seguente risulterebbe:

Reference count shows 2 for blocked clone region

Questo stato del file system rivela una duplicazione corretta dell'area clonata del blocco. Poiché ReFS esegue questa operazione di copia aggiornando solo i mapping VCN a LCN, non è stato letto alcun dato fisico né i dati fisici nel file Y sovrascritto. File X e Y condividono ora cluster logici, riflessi dai conteggi dei riferimenti nella tabella. Poiché non sono stati copiati dati fisicamente, ReFS riduce il consumo di capacità nel volume.

Si supponga ora che l'applicazione tenti di sovrascrivere l'area A in File X. ReFS duplicerà l'area condivisa, aggiornerà i conteggi dei riferimenti in modo appropriato ed eseguirà la scrittura in ingresso nell'area appena duplicata. In questo modo si garantisce che l'isolamento tra i file venga mantenuto.

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

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

Restrizioni e osservazioni sulle funzionalità

  • L'area di origine e di destinazione deve iniziare e terminare in corrispondenza di un limite del cluster.
  • L'area clonata deve avere una lunghezza inferiore a 4 GB.
  • Il numero massimo di aree di file che possono essere mappate alla stessa area fisica è 8175.
  • L'area di destinazione non deve estendersi oltre la fine del file. Se l'applicazione vuole estendere la destinazione con dati clonati, deve prima chiamare SetEndOfFile.
  • Se le aree di origine e di destinazione si trovano nello stesso file, non devono sovrapporsi. L'applicazione potrebbe essere in grado di procedere suddividendo l'operazione di clonazione del blocco in più cloni di blocchi che non si sovrappongono più.
  • I file di origine e di destinazione devono trovarsi nello stesso volume ReFS.
  • I file di origine e di destinazione devono avere la stessa impostazione di integrità Flussi.
  • Se il file di origine è di tipo sparse, anche il file di destinazione deve essere di tipo sparse.
  • L'operazione di clonazione del blocco interrompe 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 il clustering di failover è in uso, il livello funzionale clustering deve essere Windows Server 2016 o versione successiva in fase di formato.

Riferimenti aggiuntivi