區塊複製

區塊複製作業會指示檔案系統代表應用程式複製檔案位元組範圍。 目的地檔案可能與原始程式檔相同或不同。

檔案系統會管理 叢集和範圍的對應,而且可以藉由將虛擬叢集號碼 (VCN) 變更為邏輯叢集編號, (LCN) 對應做為低成本中繼資料作業,而不是讀取和寫入基礎檔案資料來執行複本。 這可讓複本更快完成,並將較少的 I/O 產生至基礎儲存體。 此外,多個檔案現在可以在區塊複製之後共用邏輯叢集,藉由不要在磁片上多次儲存相同的叢集來節省容量。

區塊複製作業不會中斷檔案之間提供的隔離。 區塊複製完成之後,寫入來源檔案不會出現在目的地中,反之亦然。

區塊複製僅適用于從 Windows Server 2016 開始的ReFS 檔案系統類型。

ReFS 上的區塊複製

Windows Server 2016上的 ReFS 實作區塊複製,方法是將邏輯叢集重新對應 (,也就是磁片區上的實體位置從來源區域) 到目的地區域。 然後,它會使用配置寫入機制來確保這些區域之間的隔離。 來源和目的地區域可能位於相同或不同的檔案中。

此實作需要開始和結束檔案位移與叢集界限對齊。 在 Windows Server 2016 上的 ReFS 中,叢集預設為 4 KB 大小,但可以選擇性地設定為 64KB。 叢集大小是在格式時間設定的全磁片區參數。

限制和備註

  • 來源和目的地區域必須在叢集界限開始和結束。
  • 複製的區域長度必須小於 4GB。
  • 目的地區域不得延伸超過檔案結尾。 如果應用程式想要使用複製的資料擴充目的地,它必須先呼叫 SetEndOfFile
  • 若來源與目的地區域位於相同檔案,其不得重疊。 (應用程式可以繼續將區塊複製作業分割成不再重迭的多個區塊複製。)
  • 來源與目的檔案必須位於相同的 ReFS 磁碟區。
  • 來源和目的地檔案必須有相同的 完整性資料流程 設定 (,也就是必須在這兩個檔案中啟用完整性資料流程,或在兩個檔案中停用) 。
  • 若來源檔案為疏鬆,目的檔案也必須為疏鬆。
  • 區塊複製作業會中斷共用的 Opportunistic Locks (也稱為層級 2 Opportunistic Locks) 。
  • ReFS 磁片區必須已格式化為 Windows Server 2016,而且如果 Windows 容錯移轉叢集正在使用中,則叢集功能等級必須在格式時間Windows Server 2016或更新版本。

範例

假設我們有兩個檔案 X 和 Y,其中每個檔案是由 3 個不同的區域所組成。 每個檔案區域都會儲存在磁片區的不同區域。 檔案系統會儲存每個磁片區區域在一個檔案區域中參考的知識:

在複製之前

現在,假設應用程式從檔案 X 對檔案區域 A 和 B 發出區塊複製作業,到 E 目前所在位移的 File Y。 下列檔案系統狀態會產生:

複製之後

將 VCN 變更為 ReFS 磁片區內的 LCN 對應,將區域 A 和 B 中的資料有效地從檔案 X 複製到檔案 Y。 磁片範圍支援區域 A 和 B 未讀取,也未讀取磁片範圍支援舊區域 E 和 F 在作業期間覆寫。

檔案 X 和 Y 現在會在磁片上共用邏輯叢集。 這會反映在資料表中顯示的參考計數中。 共用會導致磁片區容量耗用量低於區域 A 和 B 在基礎磁片區上重複。

現在,假設應用程式覆寫檔案 X 中的區域 A。ReFS 會複製 A 複本,我們現在將呼叫 G。ReFS 接著將 G 對應至檔案 X,並套用修改。 如此可確保維持檔案間的隔離。 參考計數會適當地更新:

修改寫入之後

修改寫入之後,區域 B 仍會在磁片上共用。 注意,若區域 A 大於叢集,便僅會複製修改的叢集,且剩餘的部分會維持為共用。

DUPLICATE_EXTENTS_DATA

FSCTL_DUPLICATE_EXTENTS_TO_FILE