ReFS 完整性資料流程

適用于:Windows Server 2022、Windows Server 2019、Windows Server 2016、Windows Server 2012 R2、Windows Server 2012、Windows 10

完整性資料流程是 ReFS 中的選擇性功能,可使用總和檢查碼來驗證和維護資料完整性。 雖然 ReFS 一律會針對中繼資料使用總和檢查碼,但 ReFS 預設不會產生或驗證檔案資料的總和檢查碼。 完整性資料流程是選擇性功能,可讓使用者利用總和檢查碼來取得檔案資料。 啟用完整性資料流程時,ReFS 可以清楚判斷資料是否有效或損毀。 此外,ReFS 和儲存空間可以自動校正損毀的中繼資料和資料。

運作方式

您可以針對個別檔案、目錄或整個磁片區啟用完整性資料流程,而且可以隨時切換完整性資料流程設定。 此外,檔案和目錄的完整性資料流程設定會繼承自其父目錄。

啟用完整性資料流程之後,ReFS 將會在該檔案的中繼資料中建立及維護指定檔案的總和檢查碼。 此總和檢查碼可讓 ReFS 在存取資料之前驗證資料的完整性。 傳回已啟用完整性資料流程的任何資料之前,ReFS 會先計算總和檢查碼:

Compute checksum for file data

然後,此總和檢查碼會與檔案中繼資料中包含的總和檢查碼進行比較。 如果總和檢查碼相符,則資料會標示為有效,並傳回給使用者。 如果總和檢查碼不相符,則資料會損毀。 磁片區的復原能力會決定 ReFS 如何回應損毀:

  • 如果 ReFS 掛接在非復原性簡單空間或裸機磁片磁碟機上,ReFS 會將錯誤傳回給使用者,而不會傳回損毀的資料。
  • 如果 ReFS 掛接在復原鏡像或同位空間上,ReFS 會嘗試更正損毀。
    • 如果嘗試成功,ReFS 會套用更正寫入來還原資料的完整性,並將有效的資料傳回至應用程式。 應用程式仍然不知道任何損毀。
    • 如果嘗試失敗,ReFS 會傳回錯誤。

ReFS 會記錄系統事件記錄檔中的所有損毀,記錄檔會反映是否已修正損毀。

Corrective write restores data integrity

效能

雖然完整性資料流程為系統提供更大的資料完整性,但也會產生效能成本。 有幾種不同的原因:

  • 如果已啟用完整性資料流程,所有寫入作業都會變成寫入時配置作業。 雖然這可避免任何讀取-修改-寫入瓶頸,因為 ReFS 不需要讀取或修改任何現有的資料,但檔案資料經常會變成分散,因而延遲讀取。
  • 根據系統的工作負載和基礎儲存體,計算和驗證總和檢查碼的計算成本可能會導致 IO 延遲增加。

由於完整性資料流程具有效能成本,因此建議您在效能敏感系統上將完整性資料流程停用。

完整性清除器

如上所述,ReFS 會在存取任何資料之前自動驗證資料完整性。 ReFS 也會使用背景清除器,讓 ReFS 驗證不常存取的資料。 此清除程式會定期掃描磁片區、識別潛在損毀,並主動觸發修復任何損毀的資料。

注意

資料完整性清除程式只能驗證已啟用完整性資料流程之檔案的檔案資料。

根據預設,清除器會每隔四周執行一次,不過此間隔可以在 Microsoft\Windows\Data Integrity Scan 下的工作排程器內設定。

範例

若要監視和變更檔案資料完整性設定,ReFS 會使用 Get-FileIntegrity 和 Set-FileIntegrity Cmdlet。

Get-FileIntegrity

若要查看檔案資料是否已啟用完整性資料流程,請使用 Get-FileIntegrity Cmdlet。

PS C:\> Get-FileIntegrity -FileName 'C:\Docs\TextDocument.txt'

您也可以使用 Get-Item Cmdlet 來取得指定目錄中所有檔案的完整性資料流程設定。

PS C:\> Get-Item -Path 'C:\Docs\*' | Get-FileIntegrity

Set-FileIntegrity

若要啟用/停用檔案資料的完整性資料流程,請使用 Set-FileIntegrity Cmdlet。

PS C:\> Set-FileIntegrity -FileName 'H:\Docs\TextDocument.txt' -Enable $True

您也可以使用 Get-Item Cmdlet 來設定指定資料夾中所有檔案的完整性資料流程設定。

PS C:\> Get-Item -Path 'H\Docs\*' | Set-FileIntegrity -Enable $True

Set-FileIntegrity Cmdlet 也可以直接用於磁片區和目錄。

PS C:\> Set-FileIntegrity H:\ -Enable $True
PS C:\> Set-FileIntegrity H:\Docs -Enable $True

其他參考