Partilhar via


Clonagem de blocos

Uma operação de clone de bloco de instrui o sistema de ficheiros a copiar um intervalo de bytes do ficheiro a pedido de uma aplicação. O arquivo de destino pode ser igual ou diferente do arquivo de origem.

Um sistema de arquivos gerencia os mapeamentos de Clusters e Extensõese pode executar a cópia alterando os mapeamentos de número de cluster virtual (VCN) para número de cluster lógico (LCN) como uma operação de metadados de baixo custo, em vez de ler e gravar os dados de arquivo subjacentes. Isso permite que a cópia seja concluída mais rapidamente e gera menos E/S para o armazenamento subjacente. Além disso, vários ficheiros agora podem compartilhar clusters lógicos após o clone do bloco, economizando capacidade ao evitar o armazenamento de clusters idênticos várias vezes no disco.

Uma operação de clone de bloco não compromete o isolamento providenciado entre ficheiros. Após a conclusão de um clone de bloco, as escritas no ficheiro de origem não aparecem no destino, ou vice-versa.

A clonagem de bloco está disponível somente no sistema de arquivos ReFS tipo começando com o Windows Server 2016. A partir da atualização do Momento 5 do Windows 11 (KB5034848) e versões posteriores do cliente Windows e do Windows Server, a clonagem de blocos (block cloning) ocorre nativamente em operações de cópia do Windows suportadas.

Bloquear clonagem no ReFS

A partir do Windows Server 2016, o ReFS implementa a clonagem de blocos remapeando clusters lógicos (ou seja, locais físicos em um volume) da região de origem para a região de destino. Em seguida, ele usa um mecanismo de alocação na escrita para garantir o isolamento entre essas regiões. As regiões de origem e de destino podem estar nos mesmos arquivos ou em arquivos diferentes.

Essa implementação requer que os deslocamentos de arquivo inicial e final sejam alinhados aos limites do cluster. No ReFS a partir do Windows Server 2016, os clusters têm 4 KB de tamanho por padrão, mas podem ser definidos opcionalmente como 64 KB. O tamanho do cluster é um parâmetro de todo o volume definido no momento do formato.

Tamanho do cluster e implicações de desempenho

O tamanho do cluster de um volume ReFS afeta diretamente o comportamento de clonagem de bloco e as características de desempenho:

  • Tamanho padrão do cluster: 4KB (recomendado para a maioria das cargas de trabalho)
  • Tamanho alternativo do cluster: 64KB (apropriado para cargas de trabalho de E/S grandes e sequenciais)

O tamanho do cluster determina a granularidade na qual ocorrem as operações de clonagem de bloco e cópia por escrita. Quando é realizada uma gravação numa região de ficheiro que partilha clusters com outro ficheiro (após um clone de bloco), o ReFS utiliza um mecanismo de alocação ao escrever que opera ao nível do cluster:

  • Somente o cluster modificado é duplicado e gravado em um novo local físico
  • Clusters não modificados dentro da mesma região permanecem compartilhados
  • Esse comportamento se aplica independentemente de a clonagem de bloco ter sido iniciada explicitamente via FSCTL_DUPLICATE_EXTENTS_TO_FILE ou automaticamente pelo sistema (Windows 11 Moment 5 e posterior)

Considerações sobre desempenho

A escolha do tamanho do cluster tem implicações importantes para o desempenho e o consumo de espaço:

  • Clusters de 4 KB: fornecem melhor eficiência de espaço para cargas de trabalho com gravações pequenas e aleatórias (intervalo de KB a MB), pois apenas 4 KB são duplicados por cluster modificado. No entanto, isso pode resultar em operações de cópia-em-gravação mais frequentes.
  • Clusters de 64 KB: reduzem a sobrecarga de metadados e melhoram o desempenho de E/S sequencial, mas podem resultar na duplicação de até 64 KB para cada gravação em uma região compartilhada, mesmo que a gravação seja menor que 64 KB.

O tamanho do cluster é determinado no momento do formato e não pode ser alterado sem reformatar o volume. Para verificar o tamanho atual do cluster de um volume ReFS, use o seguinte comando:

fsutil fsinfo refsinfo <volume>

Para volumes formatados automaticamente pelo Windows (como quando a clonagem de blocos é habilitada por padrão), o sistema usa o tamanho de cluster padrão de 4KB, a menos que explicitamente configurado de outra forma durante a criação do volume.

Restrições e observações

  • As regiões de origem e destino devem começar e terminar em um limite de cluster.
  • A região clonada deve ter menos de 4 GB de comprimento.
  • A região de destino não deve se estender além do final do arquivo. Se o aplicativo deseja estender o destino com dados clonados, ele deve primeiro chamar SetEndOfFile.
  • Se as regiões de origem e de destino estiverem no mesmo arquivo, elas não devem se sobrepor. (O aplicativo pode continuar dividindo a operação de clone de bloco em vários clones de bloco que não se sobrepõem mais.)
  • Os arquivos de origem e de destino devem estar no mesmo volume ReFS.
  • Os arquivos de origem e de destino devem ter a mesma configuração de Fluxos de Integridade (ou seja, os Fluxos de Integridade devem estar habilitados em ambos os arquivos ou desabilitados em ambos os arquivos).
  • Se o arquivo de origem for esparso, o arquivo de destino também deverá ser esparso.
  • A operação de clone de bloco quebrará Bloqueios Oportunistas Compartilhados (também conhecidos como Bloqueios Oportunistas de Nível 2 ).
  • O volume ReFS deve ter sido formatado com o Windows Server 2016 ou posterior e, se o Clustering de Failover do Windows estiver em uso, o Nível Funcional de Clustering deverá ser Windows Server 2016 ou posterior no momento do formato.

Exemplo

Suponhamos que temos dois ficheiros, X e Y, onde cada ficheiro é composto por 3 regiões distintas. Cada região de arquivo é armazenada em uma região distinta do volume. O sistema de arquivos armazena o conhecimento de que cada uma dessas regiões de volume é referenciada em uma região de arquivo:

Um diagrama que ilustra o estado das regiões de volume antes do processo de clonagem.

Agora, suponha que um aplicativo emita uma operação de clone de bloco do Arquivo X, sobre as regiões de arquivo A e B, para o Arquivo Y no deslocamento onde E está atualmente. O seguinte estado do sistema de arquivos resultaria:

Um diagrama que ilustra o estado das regiões de volume após o processo de clonagem.

Os dados nas regiões A e B foram efetivamente duplicados do Arquivo X para o Arquivo Y alterando os mapeamentos VCN para LCN dentro do volume ReFS. As extensões de disco que suportam as regiões A e B não foram lidas, nem as extensões de disco que suportam as regiões antigas E e F foram substituídas durante a operação.

Os arquivos X e Y agora compartilham clusters lógicos no disco. Isto reflete-se nas contagens de referência apresentadas no quadro. A partilha resulta num consumo de capacidade de volume mais baixo do que se as regiões A e B fossem duplicadas no volume subjacente.

Agora, suponha que o aplicativo substitui a região A no Arquivo X. O ReFS faz uma cópia duplicada de A, que agora chamaremos de G. ReFS mapeia G no Arquivo X e aplica a modificação. Isso garante que o isolamento entre os arquivos seja preservado. As contagens de referência são atualizadas adequadamente:

Um diagrama que ilustra o estado das regiões de volume após a gravação modificadora ocorrer.

Após a modificação da gravação, a região B ainda permanece partilhada no disco. Observe que, se a região A fosse maior que um cluster, apenas o cluster modificado teria sido duplicado e a parte restante teria permanecido compartilhada.

Comportamento de Cópia por Escrita

O mecanismo de atribuição durante a gravação funciona ao nível de cluster, o que tem implicações importantes para o desempenho e consumo de espaço.

  • Gravações menores do que o tamanho do cluster: uma gravação de qualquer tamanho em um cluster compartilhado (até mesmo 1 byte) faz com que todo o cluster seja duplicado. Com o tamanho de cluster padrão de 4KB, uma gravação de 1KB em uma região compartilhada resulta na cópia de 4KB.
  • Gravações abrangendo vários clusters: se uma gravação abranger vários clusters, somente os clusters modificados serão duplicados. Por exemplo, uma gravação de 8 KB com clusters de 4 KB duplica 2 clusters (total de 8 KB), enquanto a mesma gravação de 8 KB com clusters de 64 KB duplica 1 cluster (total de 64 KB).
  • Gravações sequenciais grandes: para cargas de trabalho que frequentemente modificam grandes regiões contíguas após a clonagem, tamanhos de cluster maiores (64KB) podem reduzir a sobrecarga minimizando o número de operações de cópia na gravação.

Essa granularidade em nível de cluster se aplica a todas as gravações após a clonagem de blocos, incluindo cenários em que o Windows 11 Moment 5 e posteriores executam automaticamente a clonagem de blocos durante as operações de cópia.

DUPLICATE_EXTENTS_DATA

FSCTL_DUPLICATE_EXTENTS_TO_FILE