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

パフォーマンス

整合性ストリームによって、システムのデータの整合性は向上しますが、パフォーマンスの低下も招きます。 これには、いくつかの原因が考えられます。

  • 整合性ストリームが有効な場合、すべての書き込み操作は Allocate-on-Write 操作になります。 この操作では ReFS が既存のデータの読み取りや変更を行う必要がないため、Read-Modify-Write のボトルネックは回避されますが、ファイル データが頻繁に断片化し、読み取りの遅延が発生します。
  • システムのワークロードと基盤となる記憶域に応じて、チェックサムを計算して検証するためのコンピューティング コストは IO の待機時間の増加を招く可能性があります。

整合性ストリームを使用すると、パフォーマンスが低下する可能性があるため、パフォーマンスが重要なシステムでは整合性ストリームを無効にしておくことをおすすめします。

整合性スクラブ機能

前述のように、ReFS でデータにアクセスする前に、必ずデータの整合性が自動的に検証されます。 ReFS はまた、アクセス頻度の低いデータを ReFS で検証できるバックグラウンド スクラブ機能も使用します。 このスクラブ機能ではボリュームが定期的にスキャンされ、破損する可能性のある部分が特定されて、破損データの修復が事前にトリガーされます。

注意

データ整合性スクラブ機能で検証できるのは、整合性ストリームが有効なファイルのファイル データのみです。

既定ではスクラブ機能が 4 週間ごとに実行されますが、この間隔は、タスク スケジューラーの [Microsoft]\[Windows]\[データ整合性スキャン ]で構成できます。

ファイル データの整合性の設定を監視および変更するには、ReFS は Get-FileIntegrity および Set-FileIntegrity コマンドレットを使用します。

Get-FileIntegrity

ファイル データの整合性ストリームが有効になっているかどうかを確認するには、Get-FileIntegrity コマンドレットを使用します。

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

Get-Item コマンドレットを使用して、指定したディレクトリにあるすべてのファイルの整合性ストリームの設定を取得することもできます。

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

Set-FileIntegrity

ファイルのデータの整合性のストリームを有効/無効にするには、Set-FileIntegrity コマンドレットを使用します。

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

Get-Item コマンドレットを使用して、指定したフォルダーにあるすべてのファイルの整合性ストリームの設定項目を設定することもできます。

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

Set-FileIntegrity コマンドレットは、ボリュームやディレクトリに対して直接使用することもできます。

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

その他の参照情報