![](https://csdnimg.cn/release/download_crawler_static/86346244/bga.jpg)
操作分解为多个事务。事务启动后,要么完成它,要么发生导致操作失败的事件,然后回滚它,NTFS 卷返回到
事务开始前的状态。可能导致操作失败的事件包括坏扇区(bad sectors,)、暂态低内存条件(transient low-memory
conditions)和断开连接的设备(disconnected devices.)。
为确保事务可以完成或回滚,NTFS 对每个事务执行以下步骤:
1、将事务的元数据操作记录在内存中的缓存日志文件中。
2、在内存中记录实际的元数据操作(metadata operation)。
3、将缓存日志文件中的事务标记为已提交。
4、将日志文件刷新到磁盘。
5、将实际的元数据操作刷新到磁盘。
步骤 4 和 5 在事务完成后以延迟的方式发生,这意味着刷新操作不绑定到事务本身。相反,NTFS 在内存中快速
修改日志和元数据,然后在方便的时候刷新,以提高性能。
NTFS 保证在将事务中修改的元数据写入磁盘之前,将包含事务元数据操作的日志记录写入磁盘。在 NTFS 更新
缓存之后,NTFS 通过在缓存的日志文件中记录事务已完成来提交事务。将缓存的日志文件刷新到磁盘后,所有
提交的事务都将保证完成,即使在将更改写入磁盘之前系统发生故障。
如果发生系统故障,NTFS 日志中有足够的信息来完成或中止任何部分 NTFS 事务。在恢复操作期间,NTFS 将重
做日志文件中找到的每个提交的事务。然后 NTFS 在日志文件中定位系统故障时未提交的事务,并撤消日志文件
中记录的每个元数据操作。因为 NTFS 在将任何元数据更改写入磁盘之前将日志刷新到磁盘,所以 NTFS 拥有关
于在恢复期间需要回滚的任何元数据更改(any metadata changes)的完整信息。
(二)日志记录表介绍(About $LogFile)
在系统中,$LogFile 元数据表即是 NTFS 的事务日志文件(transaction log file)。
如果因电源故障或关键系统故障导致系统意外停机,操作系统会将文件系统状态恢复到以前的状态,并将信息
保存在$LogFile 文件中。
下面是与$LogFile 相关的关键要素:
1、$LogFile 中包含文件的所有事务操作记录,其中包括:
文件或目录的创建。
文件或目录的删除。
对$data 的修改。
对 MFT 条目(MFT entry)的修改。
2、每条$LogFile 记录都有 LSN($LogFile 序列号)。
3、每条$LogFile 记录都有用于恢复的操作数据(operation data)和操作前数据(data before operation)。通过操
作数据,我们可以进行重新操作(Redo);通过操作前数据,我们可以进行撤销操作(Undo)。
4、每个卷中都有一个$LogFile 文件,以记录该卷中文件的增删改等操作。
5、$LogFile 位于 MFT 的 2 号条目。如下示: