変更ジャーナルのレコード
ファイル、ディレクトリ、およびその他の NTFS ファイル システム オブジェクトが追加、削除、および変更されると、NTFS ファイル システムは、コンピューター上のボリュームごとに 1 つずつ、変更履歴レコードをストリームに入力します。 レコードはそれぞれ、変更の種類と変更されたオブジェクトを示します。 特定のレコードのストリームの先頭からのオフセットは、特定のレコードの更新シーケンス番号 (USN) と呼ばれます。 新しいレコードがストリームの末尾に追加されます。
NTFS ファイル システムでは、領域を節約するために古いレコードが削除される場合があります。 必要なレコードが削除されている場合、変更ジャーナルが存在しない場合と同様に、インデックス作成サービスはボリュームのインデックスを再作成することによって復旧します。
変更履歴では、ファイルへの変更の事実と変更の理由 (書き込み操作、切り捨て、延長、削除など) のみがログに記録されます。 変更を元に戻すのに十分な情報が記録されません。
さらに、同じファイルに複数の変更を加えた場合、現在のレコードに追加される理由フラグは 1 つだけになる場合があります。 同じ種類の変更が複数回発生した場合、NTFS ファイル システムは、最初の変更の後に新しいレコードを書き込むことはありません。 たとえば、閉じて再度開く操作を介入しない複数の書き込み操作では、理由フラグUSN_REASON_DATA_OVERWRITE設定された変更レコードは 1 つだけになります。
変更ジャーナルのしくみを説明するために、ユーザーが次の順序でファイルにアクセスするとします。
- ファイルに書き込みます。
- ファイルのタイム スタンプを設定します。
- ファイルに書き込みます。
- ファイルを切り捨てます。
- ファイルに書き込みます。
- ファイルを閉じます。
この場合、NTFS ファイル システムは変更ジャーナルで次のアクションを実行します (ここで、 | はビットごとの OR 操作を示します)。
イベント | NTFS ファイル システムアクション |
---|---|
初期書き込み操作 |
NTFS ファイル システムは、USN_REASON_DATA_OVERWRITE理由フラグが設定された新しい USN レコードを書き込みます。 考えられる理由フラグの詳細については、 USN_RECORD 構造体を参照してください。 |
ファイルタイムスタンプの設定 |
NTFS ファイル システムは、フラグ設定を使用して新しい USN レコードを書き込USN_REASON_DATA_OVERWRITE |USN_REASON_BASIC_INFO_CHANGE。 |
2 回目の書き込み操作 |
NTFS ファイル システムでは、新しい USN レコードは書き込まれません。 USN_REASON_DATA_OVERWRITEは既存のレコードに対して既に設定されているため、レコードに変更は加えわれません。 |
ファイルの切り捨て |
NTFS ファイル システムは、フラグ設定を使用して新しい USN レコードを書き込USN_REASON_DATA_OVERWRITE |USN_REASON_BASIC_INFO_CHANGE |USN_REASON_DATA_TRUNCATION。 |
3 番目の書き込み操作 |
NTFS ファイル システムでは、新しい USN レコードは書き込まれません。 USN_REASON_DATA_OVERWRITEは既存のレコードに対して既に設定されているため、レコードに変更は加えわれません。 |
閉じる操作 |
変更を加えるユーザーがファイルの唯一のユーザーである場合、NTFS ファイル システムは、次のフラグ設定で新しい USN レコードを書き込みます: USN_REASON_DATA_OVERWRITE |USN_REASON_BASIC_INFO_CHANGE |USN_REASON_DATA_TRUNCATION |USN_REASON_CLOSE。 |
変更ジャーナルは、ファイルの最初の開始と最後のクローズの間に一連のレコードを累積します。 各レコードには、新しい種類の変更が発生したことを示す新しい理由フラグが設定されています。 レコードのシーケンスは、ファイルの部分的な履歴を提供します。 ファイルを閉じるときに作成された最後のレコードは、USN_REASON_CLOSE フラグを追加します。 このレコードは、ファイルに対する変更の概要を表しますが、以前のレコードとは異なり、変更の順序は示されません。
ファイルにアクセスして変更する次のユーザーは、単一の理由フラグを持つ新しい USN レコードを生成します。