ReFS でのブロックの複製

適用対象: Windows Server 2022、Windows Server 2019、Windows Server 2016

ブロックの複製によって、アプリケーションの代わりにファイル システムが一定範囲のファイル サイズに応じたファイルのコピーを実行します。この際、コピー先のファイルをコピー元のファイルと同じにしたり、別のファイルにしたりすることができます。 残念ながら、コピー操作にはコストがかかります。これは、コピー操作によって、コストがかかる読み取りや書き込みが基になる物理データに対してトリガーされるためです。

ただし ReFS のブロックの複製では、ファイル データに対して読み取りや書き込みが実行されるのではなく、低コストのメタデータ操作としてコピーが実行されます。 ReFS を使用すると、複数のファイルが同じ論理クラスター (ボリューム上の物理的な場所) を共有することが可能になるため、コピー操作では、ファイルの領域を個別の物理的な場所に再マップすることだけが必要となります。これにより、コストがかかる物理的な操作ではなく、すばやい論理操作が実行されることになります。 ブロックの複製を利用すると、操作は短時間で完了し、基になる記憶域に対する I/O の数が減少します。 こうしたパフォーマンスの向上により、ブロックの複製操作を使用したときに、.vhdx チェックポイントのマージ操作が大幅に高速化されるため、仮想化ワークロードでもメリットが生じます。 また、複数のファイルが同じ論理クラスターを共有できるため、同一のデータが複数回物理的に格納されることがなくなり、記憶域容量が節約されます。

しくみ

ReFS のブロックの複製では、ファイル データの操作ではなくメタデータ操作が実行されます。 この最適化を実現するために、ReFS では、コピー元の領域のメタデータに対して参照カウントが採用されています。 この参照カウントは、同じ物理領域を参照する個々のファイル領域の数を記録します。 これにより、複数のファイルが同じ物理データを共有できるようになります。

Show reference count updates when multiple files reference same region

論理クラスターごとに参照カウントを保持するため、ReFS では、ファイル間の分離が維持されます。また、共有領域への書き込みによって書き込み時割り当て (Allocate-on-Write) メカニズムがトリガーされ、ReFS では、受け入れた書き込みに対して新しい領域が割り当てられます。 このメカニズムは、共有されている論理クラスターの整合性を保持します。

2 つのファイル、X と Y があるとします。各ファイルは 3 つの領域で構成されており、各領域は個別の論理クラスターにマップされています。

Two files each with three distinct regions which all map to regions that have ref count 1

ここで、アプリケーションが、ファイル X からファイル Y に対してブロックの複製操作を実行したとします。この操作では、領域 A と B は、領域 E のオフセットにコピーされます。その結果、ファイル システムでは次のような状態になります。

Reference count shows 2 for blocked clone region

このファイル システムの状態では、ブロックの複製の対象となった領域が適切に複製されていることが示されています。 ReFS では、このコピー操作を実行するときに VCN から LCN へのマッピングの更新のみが行われるため、物理データの読み取りや、ファイル Y に含まれる物理データの上書きは実行されません。 現在、ファイル X と Y は論理クラスターを共有しています。このことは、表の参照カウントに示されています。 データが物理的にコピーされないため、ReFS ではボリューム上の容量の消費量が削減されます。

次に、アプリケーションがファイル X に含まれる領域 A の上書きを実行したとします。ReFS では、共有領域が複製され、参照カウントが適切に更新され、新しく複製された領域へ受け入れる書き込みが実行されます。 これにより、ファイル間の分離が維持されます。

Isolation preserved by writing to a new region G and updating ref counts

書き込みを変更した後でも、領域 B は両方のファイルによって共有されています。 領域 A がクラスターよりも大きい場合、変更されたクラスターのみが複製され、残りの部分は共有されたままになることに注意してください。

機能に関する制限と注意事項

  • コピー元とコピー先の領域は、クラスターの境界で始まり、クラスターの境界で終了する必要があります。
  • 複製される領域は、4 GB 未満の長さにする必要があります。
  • 同じ物理領域にマップできるファイル領域の最大数は、8175 個です。
  • コピー先の領域は、ファイルの終わりを超えて拡張しないでしてください。 アプリケーションで複製されるデータのコピー先を拡張する必要がある場合は、最初に SetEndOfFile を呼び出す必要があります。
  • コピー元とコピー先の領域が同じファイルに含まれている場合、それらの領域は重複してコピーされません (場合によっては、ブロックの複製操作を、重複を回避する複数のブロックの複製に分割することによって、アプリケーションを続行することができます)。
  • コピー元とコピー先のファイルは、同じ ReFS ボリューム上にある必要があります。
  • コピー元とコピー先のファイルは、整合性ストリームの設定が同じになっている必要があります。
  • コピー元のファイルがスパース ファイルである場合は、コピー先のファイルもスパース ファイルであることが必要です。
  • ブロックの複製操作では、共有されている便宜的ロック (レベル 2 の便宜的ロックとも呼ばれています) が動作しなくなります。
  • ReFS ボリュームは、Windows Server 2016 でフォーマットされている必要があります。フェールオーバー クラスタリングを使用している場合は、フォーマット時にクラスタリングの機能レベルが Windows Server 2016 以降になっている必要があります。

その他の参照情報