Freigeben über


Klonen blockieren

Ein Blockklonvorgang weist das Dateisystem an, einen Bereich von Dateibytes im Auftrag einer Anwendung zu kopieren. Die Zieldatei ist möglicherweise identisch mit der Quelldatei oder unterscheidet sich von der Quelldatei.

Ein Dateisystem verwaltet die Zuordnungen von Clustern und Vergrößerungen und kann die Kopie durch Ändern der virtuellen Clusternummer (VCN) in logische Clusternummer (LCN)-Zuordnungen als kostengünstige Metadatenoperation durchführen, anstatt die zugrunde liegenden Dateidaten zu lesen und zu schreiben. Dadurch kann die Kopie schneller abgeschlossen werden und generiert weniger E/A für den zugrunde liegenden Speicher. Darüber hinaus können mehrere Dateien logische Cluster nach dem Blockklon freigeben, wodurch Kapazität gespart wird, indem identische Cluster nicht mehrmals auf dem Datenträger gespeichert werden.

Durch einen Blockklonvorgang wird die zwischen Dateien bereitgestellte Isolation nicht getrennt. Nach Abschluss eines Blockklons werden Schreibvorgänge in die Quelldatei nicht im Ziel angezeigt oder umgekehrt.

Block cloning ist nur für den ReFS-Dateisystemtyp ab Windows Server 2016 verfügbar. Ab dem Windows 11 Moment 5-Update (KB5034848) und späteren Versionen von Windows-Client- und Windows Server-Builds tritt das Klonen in unterstützten Windows-Kopiervorgängen nativ auf.

Klonen auf ReFS blockieren

Ab Windows Server 2016 implementiert ReFS das Block Cloning, indem logische Cluster (d. h. physische Speicherorte auf einem Volume) vom Quellbereich in den Zielbereich umgemappt werden. Anschließend wird ein Zuweisungs-on-Write-Mechanismus verwendet, um die Isolierung zwischen diesen Regionen sicherzustellen. Die Quell- und Zielregionen befinden sich möglicherweise in denselben oder unterschiedlichen Dateien.

Für diese Implementierung müssen die Anfangs- und Enddateioffsets an Clustergrenzen ausgerichtet werden. In ReFS ab Windows Server 2016 sind Cluster standardmäßig 4 KB groß, können aber optional auf 64 KB festgelegt werden. Die Clustergröße ist ein volumeweiter Parameter, der zur Formatzeit festgelegt ist.

Clustergröße und Leistungsauswirkungen

Die Clustergröße eines ReFS-Volumes wirkt sich direkt auf das Block-Klonverhalten und die Leistungsmerkmale aus:

  • Standardclustergröße: 4 KB (für die meisten Workloads empfohlen)
  • Alternative Clustergröße: 64 KB (geeignet für große, sequenzielle E/A-Workloads)

Die Clustergröße bestimmt die Granularität, bei der Block-Kloning- und Kopiervorgänge auftreten. Wenn in einen Dateibereich geschrieben wird, der Cluster mit einer anderen Datei teilt (nach einem Blockklon), verwendet ReFS einen Allocate-on-Write-Mechanismus, der auf Clusterebene arbeitet:

  • Nur der geänderte Cluster wird dupliziert und an einen neuen physischen Speicherort geschrieben.
  • Unveränderte Cluster innerhalb derselben Region bleiben gemeinsam genutzt.
  • Dieses Verhalten gilt unabhängig davon, ob block cloning explizit über FSCTL_DUPLICATE_EXTENTS_TO_FILE oder automatisch vom System initiiert wurde (Windows 11 Moment 5 und höher)

Leistungsüberlegungen

Die Auswahl der Clustergröße hat wichtige Auswirkungen auf die Leistung und den Speicherplatzverbrauch:

  • 4 KB Cluster: Bieten Sie eine bessere Platzeffizienz für Workloads mit kleinen, zufälligen Schreibvorgängen (KB bis MB-Bereich), da pro geändertem Cluster nur 4 KB dupliziert werden. Dies kann jedoch zu häufigeren Copy-on-Write-Vorgängen führen.
  • 64 KB Cluster: Sie verringern den Metadatenaufwand und verbessern die sequenzielle E/A-Leistung, können jedoch aufgrund ihrer Größe dazu führen, dass bis zu 64 KB für jeden Schreibvorgang in einen freigegebenen Bereich dupliziert werden, selbst wenn der Schreibvorgang kleiner als 64 KB ist.

Die Clustergröße wird zur Formatzeit bestimmt und kann nicht geändert werden, ohne das Volume neu zu formatieren. Verwenden Sie den folgenden Befehl, um die aktuelle Clustergröße eines ReFS-Volumes zu überprüfen:

fsutil fsinfo refsinfo <volume>

Bei volumes, die von Windows automatisch formatiert werden (z. B. wenn block cloning standardmäßig aktiviert ist), verwendet das System die Standardclustergröße 4 KB, es sei denn, dies ist während der Volumeerstellung explizit konfiguriert.

Einschränkungen und Hinweise

  • Die Quell- und Zielbereiche müssen an einer Clustergrenze beginnen und enden.
  • Die geklonte Region muss kleiner als 4 GB lang sein.
  • Der Zielbereich darf nicht über das Ende der Datei hinaus erweitert werden. Wenn die Anwendung das Ziel mit geklonten Daten erweitern möchte, muss sie zuerst SetEndOfFile aufrufen.
  • Wenn sich die Quell- und Zielregionen in derselben Datei befinden, dürfen diese nicht überlappen. (Die Anwendung kann fortfahren, indem sie den Blockklonvorgang in mehrere Blockklonen aufteilen kann, die sich nicht mehr überlappen.)
  • Die Quell- und Zieldateien müssen sich auf demselben Volume ReFS befinden.
  • Die Quell- und Zieldateien müssen dieselbe Integritätsstreams-Einstellung haben (d. a. Integritätsstreams müssen in beiden Dateien aktiviert oder in beiden Dateien deaktiviert sein).
  • Hat die Quelldatei eine geringe Datendichte, muss die Zieldatei ebenfalls eine geringe Datendichte aufweisen.
  • Der Block-Klonvorgang unterbricht freigegebene opportunistische Sperren (auch bekannt als "Opportunistic Locks der Ebene 2").
  • Das ReFS-Volume muss mit Windows Server 2016 oder höher formatiert sein, und wenn Windows-Failover-Clustering verwendet wird, muss die Clustering-Funktionsebene Windows Server 2016 oder höher zum Zeitpunkt der Formatierung sein.

Beispiel

Angenommen, wir haben zwei Dateien, X und Y, wobei jede Datei aus 3 unterschiedlichen Regionen besteht. Jeder Dateibereich wird in einem bestimmten Bereich des Volumes gespeichert. Das Dateisystem speichert das Wissen, dass auf jeden dieser Volumebereiche in einer Dateiregion verwiesen wird:

Ein Diagramm, das den Zustand der Volumenbereiche vor dem Klonprozess veranschaulicht.

Angenommen, eine Anwendung stellt einen Blockklonvorgang von File X über dateibereiche A und B in Datei Y am Offset aus, in dem E aktuell ist. Der folgende Dateisystemstatus würde dazu führen:

Ein Diagramm, das den Zustand der Volumenbereiche nach dem Klonprozess veranschaulicht.

Die Daten in den Regionen A und B wurden effektiv von File X in File Y dupliziert, indem der VCN in LCN-Zuordnungen innerhalb des ReFS-Volumes geändert wurde. Die Datenträgerbereiche A und B wurden nicht gelesen, und die Datenträgerdehnungen sichern die alten Regionen E und F während des Vorgangs überschrieben.

Dateien X und Y teilen jetzt logische Cluster auf dem Datenträger. Dies wird in den in der Tabelle angezeigten Referenzanzahlen wider. Die Freigabe führt zu einem geringeren Volumenkapazitätsverbrauch als wenn Regionen A und B auf dem zugrunde liegenden Volume dupliziert wurden.

Angenommen, die Anwendung überschreibt den Bereich A in Datei X. ReFS erstellt eine duplizierte Kopie von A, die wir jetzt G nennen. ReFS ordnet dann G der Datei X zu und wendet die Änderung an. Dadurch wird sichergestellt, dass die Isolation zwischen den Dateien beibehalten wird. Referenzanzahlen werden entsprechend aktualisiert:

Ein Diagramm, das den Zustand der Volume-Bereiche nach dem modifizierenden Schreibvorgang veranschaulicht.

Nach dem Ändern des Schreibvorgangs wird Region B weiterhin auf dem Datenträger freigegeben. Falls Region A größer als ein Cluster wäre, würde nur der geänderte Cluster dupliziert und der verbleibende Teil würde freigegeben.

Verhalten beim Kopieren beim Schreiben

Der Allocate-on-Write-Mechanismus wird auf Clusterebene ausgeführt, was erhebliche Auswirkungen auf die Leistung und den Platzverbrauch hat.

  • Schreibvorgänge kleiner als die Clustergröße: Ein Schreibzugriff auf einen freigegebenen Cluster (sogar 1 Byte) bewirkt, dass der gesamte Cluster dupliziert wird. Bei der Standardmäßigen Größe des 4 KB-Clusters führt ein Schreibvorgang von 1 KB in einen freigegebenen Bereich dazu, dass 4 KB kopiert werden.
  • Schreibvorgänge, die mehrere Cluster umfassen: Wenn ein Schreibvorgang mehrere Cluster umfasst, werden nur die geänderten Cluster dupliziert. Beispielsweise dupliziert ein 8-KB-Schreibvorgang mit 4 KB-Clustern 2 Cluster (insgesamt 8 KB), während ein 8-KB-Schreibvorgang mit 64 KB-Clustern 1 Cluster dupliziert (insgesamt 64 KB).
  • Große sequenzielle Schreibvorgänge: Bei Workloads, die häufig große zusammenhängende Regionen nach dem Klonen ändern, können größere Clustergrößen (64 KB) den Aufwand verringern, indem die Anzahl der Kopier-on-Write-Vorgänge minimiert wird.

Diese Granularität auf Cluster-Ebene gilt für alle Schreibvorgänge nach dem Klonen von Blöcken, einschließlich Szenarien, in denen Windows 11 ab Version Moment 5 das Block-Klonen während Kopiervorgängen automatisch durchführt.

DUPLICATE_EXTENTS_DATA

FSCTL_DUPLICATE_EXTENTS_TO_FILE