更改日记记录

添加、删除和修改文件、目录和其他 NTFS 文件系统对象时,NTFS 文件系统在流中输入更改日志记录,计算机上每个卷一个。 每条记录都指明了变更的类型以及所更改的对象。 特定记录的流开头的偏移量称为更新序列号 (特定记录的 USN) 。 新记录将追加到流的末尾。

NTFS 文件系统可能会删除旧记录以节省空间。 如果需要的记录已被删除,索引服务通过重新索引卷进行恢复,就像没有更改日志时一样。

更改日志仅记录对文件进行更改的事实以及更改原因 (例如写入操作、截断、延长、删除等) 。 它未记录足够的信息,无法撤消更改。

此外,对同一文件进行多次更改可能会导致只有一个原因标志添加到当前记录。 如果多次发生同一类型的更改,则 NTFS 文件系统不会在第一次更改后为更改写入新记录。 例如,多个不干预关闭和重新打开操作的写入操作会导致只有一个更改记录,USN_REASON_DATA_OVERWRITE设置原因标志。

为了说明更改日志的工作原理,假设用户按以下顺序访问文件:

  1. 写入文件。
  2. 设置文件的时间戳。
  3. 写入文件。
  4. 截断文件。
  5. 写入文件。
  6. 关闭文件。

在这种情况下,NTFS 文件系统在更改日志 (执行以下操作,其中 |指示) 按位 OR 操作。

事件 NTFS 文件系统操作
初始写入操作
NTFS 文件系统写入设置了USN_REASON_DATA_OVERWRITE原因标志的新 USN 记录。 有关可能的原因标志的详细信息,请参阅 USN_RECORD 结构。
设置文件时间戳
NTFS 文件系统写入具有标志设置的新 USN 记录USN_REASON_DATA_OVERWRITE |USN_REASON_BASIC_INFO_CHANGE。
第二个写入操作
NTFS 文件系统不写入新的 USN 记录。 由于已为现有记录设置了USN_REASON_DATA_OVERWRITE,因此不会对记录进行更改。
文件截断
NTFS 文件系统写入具有标志设置的新 USN 记录USN_REASON_DATA_OVERWRITE |USN_REASON_BASIC_INFO_CHANGE |USN_REASON_DATA_TRUNCATION。
第三个写入操作
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 记录。