Klonen blockieren

Ein Blockklonvorgang weist das Dateisystem an, einen Bereich von Dateibytes im Auftrag einer Anwendung zu kopieren. Die Zieldatei kann mit der Quelldatei identisch sein oder sich von dieser unterscheiden.

Ein Dateisystem verwaltet die Zuordnungen von Clustern und Erweiterungen und ist möglicherweise in der Lage, die Kopie durchzuführen, indem die Zuordnungen der virtuellen Clusternummer (VCN) in die LCN-Zuordnungen (Logical Cluster Number) als kostengünstige Metadatenvorgang geändert werden, anstatt die zugrunde liegenden Dateidaten zu lesen und zu schreiben. Dadurch kann die Kopie schneller abgeschlossen werden und generiert weniger E/A-Vorgänge für den zugrunde liegenden Speicher. Darüber hinaus können mehrere Dateien jetzt logische Cluster nach dem Blockklon gemeinsam nutzen, wodurch Kapazität gespart wird, indem identische Cluster nicht mehrmals auf dem Datenträger gespeichert werden.

Ein Blockklonvorgang unterbricht die zwischen Dateien bereitgestellte Isolation nicht. Nach Abschluss eines Blockklons werden Schreibvorgänge in die Quelldatei nicht im Ziel angezeigt oder umgekehrt.

Das Klonen blockieren ist nur für den ReFS-Dateisystemtyp ab Windows Server 2016 verfügbar.

Klonen in ReFS blockieren

ReFS auf Windows Server 2016 implementiert das Klonen von Blocken, indem logische Cluster (d. h. physische Speicherorte auf einem Volume) von der Quellregion in die Zielregion umgestaltet werden. Anschließend wird ein Mechanismus zur Zuordnung beim Schreiben verwendet, um die Isolation zwischen diesen Regionen sicherzustellen. Die Quell- und Zielregionen können sich in den gleichen oder unterschiedlichen Dateien befinden.

Diese Implementierung erfordert, dass die anfangs und endenden Dateioffsets an Clustergrenzen ausgerichtet werden. In ReFS on 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.

Einschränkungen und Hinweise

  • Die Quell- und Zielregionen müssen an einer Clustergrenze beginnen und enden.
  • Die geklonte Region muss kleiner als 4 GB lang sein.
  • Die Zielregion darf nicht über das Ende der Datei hinaus reichen. 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 Blockklone aufteilt, 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ätsstream-Einstellung aufweisen (d. a. Integritätsdatenströme 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 Blockklonvorgang unterbricht freigegebene opportunistische Sperren (auch bekannt als Opportunistische Sperren der Ebene 2).
  • Das ReFS-Volume muss mit Windows Server 2016 formatiert worden sein, und wenn Windows-Failoverclustering verwendet wird, muss die Clusteringfunktionsebene zum Zeitpunkt des Formats Windows Server 2016 oder höher gewesen sein.

Beispiel

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

vor dem Klonen

Angenommen, eine Anwendung führt einen Blockklonvorgang von Datei X über die Dateibereiche A und B zur Datei Y am Offset aus, in dem sich E derzeit befindet. Der folgende Dateisystemzustand würde sich ergeben:

nach dem Klonen

Die Daten in den Regionen A und B wurden effektiv von Datei X in Datei Y dupliziert, indem die VCN-Zuordnungen innerhalb des ReFS-Volumes in LCN geändert wurden. Die Datenträgerausdehnungen, die die Regionen A und B unterstützenden Bereiche A und B wurden nicht gelesen, noch wurden die Datenträgerausdehnungen, die die alten Regionen E und F während des Vorgangs unterstützt haben, überschrieben.

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

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

nach dem Ändern des Schreibvorgangs

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.

DUPLICATE_EXTENTS_DATA

FSCTL_DUPLICATE_EXTENTS_TO_FILE