Clonazione di blocchi
Un'operazione di clonazione di 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 ed extent e può essere in grado di eseguire la copia modificando il numero del cluster virtuale (VCN) in mapping LCN (Logical Cluster Number) come operazione di metadati a basso costo, invece di leggere e scrivere i dati del file sottostante. In questo modo la copia può essere completata più velocemente e genera meno operazioni di I/O nella risorsa di archiviazione sottostante. Inoltre, più file possono ora condividere cluster logici dopo il clone del blocco, risparmiando capacità non archiviando cluster identici più volte su disco.
Un'operazione di clonazione di 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 di blocchi è disponibile solo nel tipo di file system ReFS a partire da Windows Server 2016. A partire dall'aggiornamento di Windows 11 Moment 5 (KB5034848) e dalle versioni successive delle build client Windows e Windows Server, la clonazione dei blocchi viene eseguita in modo nativo nelle operazioni di copia di Windows supportate.
Clonazione di blocchi in ReFS
ReFS in Windows Server 2016 implementa la clonazione di blocchi eseguendo il mapping dei cluster logici (ovvero posizioni fisiche in un volume) dall'area di origine all'area di destinazione. Usa quindi un meccanismo allocato in scrittura per garantire l'isolamento tra tali aree. Le aree di origine e di destinazione possono trovarsi nello stesso file o in file diversi.
Questa implementazione richiede che gli offset del file iniziale e finale siano allineati ai limiti del cluster. In ReFS in Windows Server 2016 i cluster hanno dimensioni di 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 in corrispondenza di un limite del cluster.
- L'area clonata deve avere una lunghezza inferiore a 4 GB.
- L'area di destinazione non deve estendersi oltre la fine del file. Se l'applicazione vuole estendere la destinazione con dati clonati, deve prima richiamare SetEndOfFile.
- Se le aree di origine e di destinazione si trovano nello stesso file, non devono sovrapporsi. L'applicazione può continuare 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 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 è di tipo sparse, anche il file di destinazione deve essere di tipo sparse.
- L'operazione di clonazione del blocco 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 windows Failover Clustering è in uso, il livello di funzionalità clustering deve essere 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 informazioni a cui fanno riferimento ognuna di queste aree del volume in un'area file:
Si supponga ora che un'applicazione rilascia un'operazione di clonazione di blocchi da File X, sulle aree file A e B, su File Y in corrispondenza dell'offset in cui È attualmente. Lo stato del file system seguente risulterebbe:
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. Le aree di backup A e B del disco non sono state lette né gli extent del disco che supportano le aree precedenti E e F sovrascritte durante l'operazione.
I file X e Y ora condividono cluster logici su disco. Ciò si riflette nei conteggi dei riferimenti visualizzati nella tabella. La condivisione comporta un consumo di capacità del volume inferiore rispetto a se le aree A e B sono state duplicate nel volume sottostante.
Si supponga ora che l'applicazione sovrascriva l'area A in File X. ReFS crea una copia duplicata di A, che ora chiameremo G. ReFS, quindi esegue il mapping di G in File X e applica la modifica. In questo modo si garantisce che l'isolamento tra i file venga mantenuto. I conteggi dei riferimenti vengono aggiornati in modo appropriato:
Dopo la modifica della scrittura, l'area B è ancora condivisa su disco. 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.