部署事务 NTFS
与大多数事务机制一样,事务 NTFS (TxF) 依赖于数据写入的正确顺序。 确保正确的写入顺序需要对数据缓存进行显式控制。 为了满足此要求,TxF 要求磁盘驱动器实现属于标准化驱动器接口(如 SCSI、SATA 和 ATA)的缓存控制机制。
TxF 使用的缓存控制机制是一个称为强制单位访问 (FUA) 函数的标志。 此标志指定驱动器应在发出信号之前将数据写入稳定的媒体存储。 在事务内的某些关键点,TxF 需要发出 FUA,以确保在发生电源故障时,成功回滚事务所需的一些控制数据不会丢失。
(SCSI 和光纤通道) 的服务器类磁盘驱动器通常支持 FUA 标志。 从 Vista 开始,Windows 仅支持 SCSI 和光纤通道磁盘的 FUA 标志。
在 (ATA/SATA/USB) 的商用驱动器上,TxF 存在一段时间的漏洞,在此期间驱动器电源故障可能导致 TxF 无法正确回滚事务,因此除非禁用驱动器的写入缓存,否则数据将处于不一致状态。
某些主机总线适配器 (HBA) 和存储控制器 (例如,RAID 系统) 具有内置的电池备份缓存。 由于这些设备在发生电源故障时会保留缓存的数据,因此无需连接到它们的任何磁盘都遵循 FUA 标志。 此外,其电源受不间断电源 (UPS) 保护的磁盘不需要遵循 FUA 标志。 这是因为 UPS 将保持足够长的电源,以便磁盘将其缓存刷新到媒体。
禁用驱动器的写入缓存无需驱动器遵循 FUA 标志。 可以通过向磁盘发出 IOCTL_DISK_SET_CACHE_INFORMATION 控制代码来禁用磁盘的写入缓存。 在系统重新启动后,写入缓存 (打开/关闭) 的状态将保留。 发出此控制代码会对颁发到该磁盘的所有 I/O 产生非常严重的性能后果,这很可能是性能明显下降。 在部署之前,应仔细考虑使用此控制代码。
注意
要使 TxF 能够通过电源故障持续保护数据的完整性,系统必须至少满足以下条件之一:
- (SCSI、光纤通道) 使用服务器类磁盘。
- 确保磁盘连接到电池备份的缓存 HBA。
- 使用存储控制器 (例如 RAID 系统) 作为存储设备。
- 确保磁盘的电源受 UPS 保护。
- 确保磁盘的写入缓存功能已禁用。