區塊複製
區塊複製作業會指示檔案系統代表應用程式複製一系列檔案位元組。 目的地檔案可能與來源檔案相同或不同。
文件系統會管理叢集和範圍的對應,並且能夠透過將虛擬叢集編號(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 執行區塊複製作業,將這些區塊複製到檔案 Y 中目前 E 所在的位移。 下列檔案系統狀態會產生:
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 大於叢集,則只有修改過的叢集會重複,其餘部分會維持共用。