ReFS 上的區塊複製
區塊複製會指示檔案系統代表應用程式複製一系列檔案位元組,其中目的地檔案可能與來源檔案相同或不同。 遺憾的是,傳統的複製作業成本高昂,因為這類作業會觸發對底層實體資料的昂貴讀取和寫入。
不過,在 ReFS 中的區塊複製會以低成本的中繼資料作業執行複製,而不是對檔案資料進行讀取和寫入。 由於 ReFS 可讓多個檔案共用相同的邏輯叢集 (磁碟區上的實體位置),因此複製作業只需要將檔案區域重新對應至個別實體位置,將昂貴的實體作業轉換為快速、邏輯的實體位置。 這可讓複本更快完成,並產生較少的 I/O 到基礎儲存體。 這一改進也有利於虛擬化工作負載,因為在使用區塊複製作業時,.vhdx
檢查點合併作業會大大加快。 此外,由於多個檔案可以共用相同的邏輯叢集,因此不會多次實際儲存相同資料,這可改善儲存容量。
運作方式
ReFS 上的區塊複製會將檔案資料作業轉換成中繼資料作業。 為了進行此優化,ReFS 會將參考計數引入其複製區域的中繼資料。 此參考計數會記錄參考相同實體區域的相異檔案區域數目。 這可讓多個檔案共用相同的實體資料:
藉由保留每個邏輯叢集的參考計數,ReFS 不會中斷檔案之間的隔離:對共用區域的寫入會觸發寫入時配置機制,其中 ReFS 會為傳入寫入配置新的區域。 此機制會保留共用邏輯叢集的完整性。
範例
假設有兩個檔案 X 和 Y,其中每個檔案是由三個區域所組成,而每個區域都會對應至個別的邏輯叢集。
現在假設應用程式發出從檔案 X 到檔案 Y 的區塊複製操作,以便將區域 A 和 B 複製到區域 E 的位移處。下列檔案系統狀態會產生:
此檔案系統狀態會顯示區塊複製區域的成功複製。 由於 ReFS 只會將 VCN 更新為 LCN 對應來執行此複製作業,因此不會讀取任何實體資料,也不會覆寫檔案 Y 中的實體資料。 檔案 X 和 Y 現在會共用邏輯叢集,由資料表中的參考計數反映。 由於沒有實際複製任何資料,因此 ReFS 可減少磁碟區上的容量耗用量。
現在假設應用程式嘗試覆寫檔案 X 中的區域 A。ReFS 複製共用區域,適當地更新引用計數,並執行對新複製區域的傳入寫入。 這可確保檔案之間的隔離會被保留。
修改寫入之後,兩個檔案仍會共用區域 B。 如果區域 A 大於叢集,則只會複製修改後的叢集,其餘部分將保持共享狀態。
功能限制和備註
- 來源和目的地區域必須在叢集界限開始和結束。
- 複製區域的長度必須小於 4 GB。
- 可以對應至相同實體區域的檔案區域數目上限為 8175。
- 目的地區域不得延伸超過檔案結尾。 如果應用程式想要使用複製的資料擴充目的地,它必須先呼叫 SetEndOfFile。
- 如果來源和目的地區域位於相同的檔案中,則它們不得重疊。 (應用程式可以繼續將區塊複製作業分割成多個不再重疊的區塊複製品)。
- 來源和目的地檔案必須位於相同的 ReFS 磁碟區上。
- 來源和目的地檔案必須有相同的完整性資料流設定。
- 如果來源檔案是疏鬆的,目的地檔案也必須是疏鬆的。
- 區塊複製作業會破壞共享隨機鎖定 (也稱為 2 級隨機鎖定) 。
- ReFS 卷必須已使用 Windows Server 2016 進行格式化,如果正在使用故障轉移群集,則群集功能級別在格式化時必須為 Windows Server 2016 或更高版本。
- 從 Windows 11 24H2 和 Windows Server 2025 組建開始,在支援的 Windows 複製作業中原生發生區塊複製。