共用方式為


ReFS 完整性資料流

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

運作方式

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

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

計算檔案數據的總和檢查碼

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

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

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

更正寫入還原數據完整性

效能

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

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

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

完整性清除程式

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

注意

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

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

範例

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

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

其他參考