Compartir a través de


Clonación de bloques

Una operación de clonación de bloques indica al sistema de archivos que copie un intervalo de bytes de archivo en nombre de una aplicación. El archivo de destino puede ser el mismo que, o diferente, del archivo de origen.

Un sistema de archivos administra las asignaciones de clústeres y extensiones, y puede realizar la copia modificando el número de clúster virtual (VCN) a las asignaciones de números de clúster lógico (LCN) como una operación de metadatos de bajo costo, en lugar de leer y escribir los datos del archivo subyacente. Esto permite que la copia se complete más rápido y genere menos E/S en el almacenamiento subyacente. Además, ahora es posible que varios archivos compartan clústeres lógicos después del clon del bloque, lo que ahorra capacidad sin almacenar clústeres idénticos varias veces en el disco.

Una operación de clonación de bloques no interrumpe el aislamiento proporcionado entre archivos. Una vez completado un clon de bloque, las escrituras en el archivo de origen no aparecen en el destino o viceversa.

La clonación de bloques solo está disponible en el tipo de sistema de archivos ReFS a partir de Windows Server 2016. A partir de la actualización de Windows 11 Moment 5 (KB5034848) y versiones posteriores de las compilaciones de cliente de Windows y Windows Server, la clonación de bloques se produce de forma nativa en las operaciones de copia de Windows admitidas.

Bloquear clonación en ReFS

A partir de Windows Server 2016, ReFS implementa la clonación de bloques mediante la reasignación de clústeres lógicos (es decir, ubicaciones físicas en un volumen) desde la región de origen a la región de destino. A continuación, usa un mecanismo de asignación de escritura para garantizar el aislamiento entre esas regiones. Las regiones de origen y destino pueden estar en los mismos archivos, o diferentes.

Esta implementación requiere que los desplazamientos de archivo inicial y final se alineen con los límites del clúster. En ReFS a partir de Windows Server 2016, los clústeres tienen un tamaño de 4 KB de forma predeterminada, pero opcionalmente se pueden establecer en 64 KB. El tamaño del clúster es un parámetro de todo el volumen establecido en tiempo de formato.

Implicaciones de rendimiento y tamaño del clúster

El tamaño del clúster de un volumen ReFS afecta directamente al comportamiento de clonación de bloques y a las características de rendimiento:

  • Tamaño de clúster predeterminado: 4 KB (recomendado para la mayoría de las cargas de trabajo)
  • Tamaño alternativo del clúster: 64 KB (adecuado para cargas de trabajo de E/S grandes y secuenciales)

El tamaño del clúster determina la granularidad en la que se producen las operaciones de clonación de bloques y copia en escritura. Cuando se realiza una escritura en una región de archivo que comparte clústeres con otro archivo (después de un clon de bloque), ReFS usa un mecanismo de asignación en escritura que funciona en el nivel de clúster:

  • Solo el clúster modificado se duplica y se escribe en una nueva ubicación física.
  • Los clústeres sin modificar dentro de la misma región permanecen compartidos
  • Este comportamiento se aplica independientemente de si la clonación de bloques se inició explícitamente a través de FSCTL_DUPLICATE_EXTENTS_TO_FILE o automáticamente por el sistema (Windows 11 Moment 5 y versiones posteriores).

Consideraciones sobre el rendimiento

La elección del tamaño del clúster tiene implicaciones importantes para el rendimiento y el consumo de espacio:

  • Clústeres de 4 KB: proporcionan una mejor eficacia de espacio para las cargas de trabajo con escrituras pequeñas y aleatorias (intervalo de KB a MB), ya que solo se duplican 4 KB por cada clúster modificado. Sin embargo, esto puede dar lugar a operaciones de copia en escritura más frecuentes.
  • Clústeres de 64 KB: reduzca la sobrecarga de metadatos y mejore el rendimiento de E/S secuencial, pero puede dar lugar a que se dupliquen hasta 64 KB para cada escritura en una región compartida, incluso si la escritura es inferior a 64 KB.

El tamaño del clúster se determina en tiempo de formato y no se puede cambiar sin volver a formatear el volumen. Para comprobar el tamaño actual del clúster de un volumen ReFS, use el siguiente comando:

fsutil fsinfo refsinfo <volume>

En el caso de los volúmenes con formato automático de Windows (por ejemplo, cuando la clonación de bloques está habilitada de forma predeterminada), el sistema usa el tamaño de clúster predeterminado de 4 KB a menos que se configure explícitamente durante la creación del volumen.

Restricciones y comentarios

  • Las regiones de origen y destino deben comenzar y terminar en un límite del clúster.
  • La región clonada debe ser inferior a 4 GB de longitud.
  • La región de destino no debe extenderse más allá del final del archivo. Si la aplicación desea extender el destino con datos clonados, primero debe llamar a SetEndOfFile.
  • Si las regiones de origen y destino están en el mismo archivo, no deben superponerse. (La aplicación puede continuar dividiendo la operación de clonación de bloques en varios clones de bloque que ya no se superponen).
  • Los archivos de origen y de destino deben tener el mismo volumen ReFS.
  • Los archivos de origen y destino deben tener la misma configuración De secuencias de integridad (es decir, Las secuencias de integridad deben estar habilitadas en ambos archivos o deshabilitarse en ambos archivos).
  • Si el archivo de origen es disperso, el archivo de destino también debe serlo.
  • La operación de clonación de bloques interrumpirá los bloqueos oportunistas compartidos (también conocidos como bloqueos oportunistas de nivel 2).
  • El volumen ReFS debe haber sido formateado con Windows Server 2016 o posterior, y, si los clústeres de conmutación por error de Windows están en uso, el nivel funcional de agrupación en clústeres debe haber sido Windows Server 2016 o posterior en el momento del formateo.

Ejemplo

Supongamos que tenemos dos archivos, X e Y, donde cada archivo se compone de 3 regiones distintas. Cada región de archivo se almacena en una región distinta del volumen. El sistema de archivos almacena el conocimiento de que se hace referencia a cada una de esas regiones de volumen en una región de archivo:

Diagrama que ilustra el estado de las regiones de volumen antes del proceso de clonación.

Ahora supongamos que una aplicación emite una operación de clonación de bloque de Archivo X, a través de las regiones de archivo A y B, a Archivo Y en el desplazamiento donde E está actualmente. El siguiente estado del sistema de archivos daría como resultado:

Diagrama que ilustra el estado de las regiones de volumen después del proceso de clonación.

Los datos de las regiones A y B se duplicaron eficazmente de Archivo X a Archivo Y modificando las asignaciones de VCN a LCN dentro del volumen ReFS. Las extensiones de disco que respaldan las regiones A y B no se leyeron, ni las extensiones de disco que respaldan las regiones antiguas E y F se sobrescriben durante la operación.

Los archivos X e Y ahora comparten clústeres lógicos en disco. Esto se refleja en los recuentos de referencia que se muestran en la tabla. El uso compartido da como resultado un menor consumo de capacidad de volumen que si las regiones A y B se duplicaron en el volumen subyacente.

Ahora supongamos que la aplicación sobrescribe la región A en el archivo X. ReFS realiza una copia duplicada de A, que ahora llamaremos a G. ReFS asigna G al archivo X y aplica la modificación. Esto asegura que el aislamiento entre los archivos se conserve. Los recuentos de referencia se actualizan correctamente:

Diagrama que ilustra el estado de las regiones de volumen después de que se produzca la modificación de la escritura.

Después de modificar la escritura, la región B todavía se comparte en el disco. Ten en cuenta que si la región A fuera mayor que un clúster, solo el clúster modificado se habría duplicado y el resto seguiría siendo compartido.

Comportamiento de copia en escritura

El mecanismo de asignación en escritura funciona en el nivel de clúster, lo que tiene implicaciones importantes para el rendimiento y el consumo de espacio:

  • Escrituras menores que el tamaño del clúster: una escritura de cualquier tamaño en un clúster compartido (incluso 1 byte) hace que todo el clúster se duplique. Con el tamaño predeterminado del clúster de 4 KB, una escritura de 1 KB en una región compartida da como resultado que se copien 4 KB.
  • Escrituras que abarcan varios clústeres: si una escritura abarca varios clústeres, solo se duplican los clústeres modificados. Por ejemplo, una escritura de 8 KB con clústeres de 4 KB duplica dos clústeres (total de 8 KB), mientras que la misma escritura de 8 KB con clústeres de 64 KB duplica 1 clúster (total de 64 KB).
  • Escrituras secuenciales grandes: en el caso de las cargas de trabajo que suelen modificar regiones contiguas grandes después de la clonación, los tamaños de clúster más grandes (64 KB) pueden reducir la sobrecarga al minimizar el número de operaciones de copia en escritura.

Esta granularidad de nivel de clúster se aplica a todas las escrituras después de la clonación de bloques, incluidos los escenarios en los que Windows 11 Moment 5 y versiones posteriores realizan automáticamente la clonación de bloques durante las operaciones de copia.

DUPLICATE_EXTENTS_DATA

FSCTL_DUPLICATE_EXTENTS_TO_FILE