很多朋友都遇到过电脑强制关机之后再次启动时不能上网的情况,这是由于异常断电导致了网卡驱动程序的破坏或遗失。对于固态硬盘来说,异常断电除了丢文件还有更可怕的后果:硬盘像手机刷机失败一样直接变砖。
为了增强写入性能,电脑硬盘默认都开启了写入缓存,允许程序在写入数据时由操作系统先放入内存缓冲,程序可以继续执行后边的任务,缓冲区内数据可以慢慢写入到硬盘里。但这一过程中如果发生停电或强制关机,就有可能会丢文件了。
除了启用写入缓存之外,下方还有一个“关闭设备上写入缓冲区刷新”的选项,NVMe固态硬盘必须要勾上这个选项才能全速运行,但显然这样做会增加更多的数据遗失风险。这也是现在NVMe不如普通SATA固态硬盘成熟的一个表现。
我们先来看机械硬盘是如何预防断电数据遗失的:Toshiba在最新的10TB企业级机械硬盘上增加了一颗原本固态硬盘上才会运用的闪存芯片。在断电时借助盘片旋转的惯性发电,供主控将DRAM缓存内数据转移到闪存中安全保存,完美实现了断电数据不遗失,规划非常巧妙。
企业级固态硬盘通常运用断电保护电容供电来实现缓存内数据的紧急写入。不过电容寿命限制较多,很可能会在闪存之前破坏并导致严重的问题,所以家用固态硬盘中并没有这个功能。另外固态硬盘的DRAM缓存内主要存放FTL闪存映射表,只有至多16MB容量用来短时缓存用户读写的数据,随着Flush指令的下达,这部分数据就会写入到NAND闪存中永久保存下来。
Flush指令是由Win系统自动定时发送的,会强制固态硬盘缓存区内数据实际写入到闪存永久保存。下面以ToshibaQ200 240G固态硬盘来进行测验。Q200是Toshiba原厂8通道MLC闪存SSD,当前性价比最高的原厂固态硬盘之一。
运用名为sync的手动Flush软件来检验一下Flush指令的作用:
文件复制完成后立刻断电,重新开机后文件MD5会出错,因为还有部分数据留在缓存中没有实际写入闪存:
如果文件复制后执行Flush命令,然后立刻断电,再次校验MD5是正确的,说明文件被完整写入到了固态硬盘内。
Win系统自动向固态硬盘发送Flush指令的频率是很快的,所以偶尔强制关机并不一定出现问题。此外家用电脑的断电保护和有无DRAM缓存关系不大:即便你能保护住硬盘缓存数据,主机没有UPS不间断供电的话,主内存数据依然会丢,断电瞬间发送到SATA接口上的指令也有可能是错误的。
家用固态硬盘断电防护的主要目标是避免闪存写飞,破坏到同单元的原有数据位内容。ToshibaQ200主要使用了Copy on Write的方式来实现保护:当固态硬盘要修改Page 3时,会先将Page 3原有内容拷贝一份到保留区域,然后再写入Page 3的数据。如果写入被停电打断而出错,固态硬盘还能通过提前拷贝出来的数据进行恢复。
总的来说,家用固态硬盘防断电主要靠聪明的主控与固件搭配,当然如果大家能养成良好习惯,最大限度减少强制关机的发生才是对固态硬盘最好的保护。