意外停电或蓝屏强制重启之后,电脑有可能发生硬盘数据丢失的现象,这主要是由于硬盘没有机会像正常关机那样完成缓存写入。
固态硬盘和机械硬盘一样具备写入缓存,写入缓存使用DRAM内存来存储,断电后数据无法保存。与机械硬盘有所不同的是,固态硬盘缓存中不仅存储有等待写入的用户数据,还有闪存映射表、闪存块管理等元数据。所以一场断电会给固态硬盘带来更多的风险。
由于FTL映射表管理了固态硬盘闪存物理地址与外部逻辑地址的对应关系,它的丢失会导致整块硬盘数据无法读写。过去固态硬盘经历异常断电后往往会因为FTL闪存映射表的丢失而需要全盘扫描和重建,由于需时较长,所以出现了“30分钟闲置”等应急方法。而在较新的固态硬盘当中已经通过定时给映射表建立快照实现了更高效率的意外恢复速度。
与FTL映射表损坏相比,缓存内没来得及写入的用户数据丢失更为常见。为了提升硬盘性能表现,Windows默认开启了写入缓存,将写入数据发送到硬盘写入缓存区后立刻回报写入完成,而不管数据是否已经实际写入到固态硬盘的闪存当中。借助写入缓存,固态硬盘可以整理归并随机数据,合并写入以提升效能。写入缓存使用DRAM存储,意外断电会导致其中内容的丢失。
Windows维持了定时缓冲区刷新设定,每隔几秒钟操作系统就会发出flush指令,要求硬盘将缓存内数据实际写入到盘片(机械硬盘)或闪存(固态硬盘)当中。Flush指令由系统定时发出,当然也可以通过微软提供的sync工具手动清空写入缓存,确保数据已经安全写入。
对于一些重要的、关键性的数据,应用软件可以通过API请求Non-cached写入,这些写入将不经过写入缓存区,直接进入到固态硬盘的闪存中存储。写入命令回报完成时,数据已经实际存储在闪存当中,此时断电不会发生数据丢失。
NTFS文件系统自身也有一套定时日志文件刷新功能,每5秒钟记录一个检查点记录,这样在发送数据丢失后也能通过日志文件回滚恢复停电前的状态。
尽管有很多预防措施,但要从根本上降低异常断电的风险,依然要从缓存本身入手。东芝TR200使用了主控内置缓存设计,将高速的小容量SRAM缓存集成到主控内,增强了异常断电的保护管理。
在东芝TR200的PCB上仅有主控(内置有SRAM缓存)和闪存两种主要部件,布局简单可靠性高,降低了意外停电造成数据丢失的风险。