共用方式為


區塊複製

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

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

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

區塊複製僅適用於從 Windows Server 2016 開始的 ReFS 檔案系統 類型。 從 Windows 11 Moment 5 更新版(KB5034848)和更新版本的 Windows 用戶端和 Windows Server 組建開始,在支援的 Windows 複製作業中原生發生區塊複製。

在 ReFS 上封鎖複製

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

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

限制和備註

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

範例

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

複製前

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

複製之後

A 和 B 區域中的數據會藉由將 VCN 變更為 ReFS 磁碟區內的 LCN 對應,有效地從檔案 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