Clonazione in blocchi

Un'operazione di clonazione a blocchi indica al file system di copiare un intervallo di byte di file per conto di un'applicazione. Il file di destinazione può essere uguale o diverso dal file di origine.

Un file system gestisce i mapping di cluster e extent e può essere in grado di eseguire la copia modificando il numero di cluster virtuale (VCN) ai mapping del numero di cluster logici (LCN) come operazione di metadati a basso costo, anziché leggere e scrivere i dati del file sottostante. Ciò consente alla copia di completare più velocemente e genera meno I/O nell'archiviazione sottostante. Inoltre, più file possono ora condividere cluster logici dopo il clone del blocco, salvando la capacità non archiviando più volte cluster identici su disco.

Un'operazione di clonazione a blocchi non interrompe l'isolamento fornito tra i file. Al termine di un clone di blocco, le scritture nel file di origine non vengono visualizzate nella destinazione o viceversa.

La clonazione del blocco è disponibile solo nel tipo di file system ReFS a partire da Windows Server 2016.

Blocca clonazione in ReFS

ReFS in Windows Server 2016 implementa la clonazione del blocco ripristinando i cluster logici , ovvero posizioni fisiche in un volume, dall'area di origine all'area di destinazione. Usa quindi un meccanismo di allocazione in scrittura per garantire l'isolamento tra tali aree. Le aree di origine e di destinazione possono trovarsi nello stesso file, o diverso.

Questa implementazione richiede che gli offset di file iniziali e finali siano allineati ai limiti del cluster. In ReFS in Windows Server 2016 i cluster sono 4 KB per impostazione predefinita, ma facoltativamente possono essere impostati su 64 KB. Le dimensioni del cluster sono un set di parametri a livello di volume in fase di formato.

Restrizioni e osservazioni

  • Le aree di origine e di destinazione devono iniziare e terminare a un limite del cluster.
  • L'area clonata deve avere una lunghezza minore di 4 GB.
  • L'area di destinazione non deve estendere 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 si devono sovrapporre. L'applicazione può 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 essere nello stesso volume ReFS.
  • I file di origine e di destinazione devono avere la stessa impostazione Dei flussi di integrità , ovvero i flussi di integrità devono essere abilitati in entrambi i file o disabilitati in entrambi i file.
  • Se il file di origine è un file sparse, anche il file di destinazione deve essere 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 di Windows è in uso, il livello funzionale clustering deve essere stato Windows Server 2016 o versione successiva in fase di formato.

Esempio

Si supponga di avere due file, X e Y, in cui ogni file è composto da 3 aree distinte. Ogni area file viene archiviata in un'area distinta del volume. Il file system archivia le conoscenze a cui si fa riferimento ognuna di queste aree del volume in un'area file:

prima del clone

Si supponga ora che un'applicazione problemi un'operazione di clonazione a blocchi da File X, su aree file A e B, su File Y all'offset in cui è attualmente E. Lo stato del file system seguente risulterebbe:

dopo il clone

I dati nelle aree A e B sono stati effettivamente duplicati da File X a File Y modificando i mapping VCN a LCN all'interno del volume ReFS. L'estensione del disco esegue il backup delle aree A e B non sono state lette, né sono stati sottoposti a backup delle aree precedenti E e F sovrascritte durante l'operazione.

I file X e Y condividono ora cluster logici su disco. Ciò si riflette nei conteggi dei riferimenti visualizzati nella tabella. La condivisione comporta un consumo di capacità inferiore rispetto a se le aree A e B sono state duplicate nel volume sottostante.

Si supponga ora che l'applicazione sovrascrive l'area A in File X. ReFS esegue una copia duplicata di A, che ora chiameremo G. ReFS e quindi esegue il mapping di G in File X e applica la modifica. In questo modo viene mantenuto l'isolamento dei file. I conteggi di riferimento vengono aggiornati in modo appropriato:

dopo la modifica della scrittura

Dopo la modifica della scrittura, l'area B è ancora condivisa su disco. 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.

DUPLICATE_EXTENTS_DATA

FSCTL_DUPLICATE_EXTENTS_TO_FILE