硬盘忽然掉电会损坏硬盘和数据吗?

每个人的无数个过去的瞬间定义了现在的自己 。那些欢乐悲伤的瞬间也许对别人无关痛痒,对自己来说却是弥足珍贵 。硬盘里的照片和文档承载着过去美好的瞬间和知识的积累,对大家来说是十分宝贵的,远远不是硬盘的那几百一千的价格所能衡量 。
现在的个人电脑早就不是原来娇贵的高科技产品,不可中断电源也不复存在,谁没有过在一次忽然断电后,忧心硬盘损坏的的经历 。在重新开启电源的瞬间,心中默念,如果这次没问题,下次我一定做好备份!可是当看见操作正常启动,除了当时编辑的资料有很小部分丢失而其他完好无缺后,却又忘记的自己的承诺,继续裸奔,直到下一个循环 。
我们知道操作系统为了效率的考虑,在文件系统驱动中都有缓存 。word等软件会创建临时文件,不停地刷新该文件的缓存来尽可能避免数据的损失 。而最新的NTFS等现代的日志型文件系统也比传统的FAT对意外掉电的鲁棒性提高很多 。
这是软件的角度,而如果硬件上没有保证的话,这些都是扬汤止沸之举 。那么如果我们从硬件的角度来了解一下,硬件工程师们为我们的数据安全都做了哪些努力 。我们来分别看看硬盘的两种典型的形态:机械硬盘和固态硬盘SSD,它们都是怎么处理掉电(Power Failure/Loss)的 。
机械硬盘
典型的温切斯特硬盘结构如下:

硬盘忽然掉电会损坏硬盘和数据吗?

文章插图
一般操作情况下,盘片(2)在转子(1)的带动下,以每分钟数千转的速度飞速旋转 。转臂(5)在程序指令下,带着磁头(4)来到指定位置开始读取/写入数据 。
磁头是依靠空气动力的原理悬浮在磁盘表面,高度比头发丝还细 。这样它既可以迅速准确的读取/写入内容,又不会和盘面接触(想象一下数千转的速度旋转的磁盘和磁头接触时会发生什么) 。这时如果没有电了,磁盘不转了,空气浮力也不复存在,磁头就会慢慢降落,进而碰到盘片,引发物理损伤 。那怎么避免这种情况呢?
正常断电的时候,硬盘控制芯片会收到SATA控制器传来的STANDBY IMMEDIATE命令;而SAS和SCSI硬盘会收到stop命令 。这时控制器会把磁头归位到一个叫做Parking Zone的地方:
硬盘忽然掉电会损坏硬盘和数据吗?

文章插图
磁头完美地停在停车区,避免了和磁盘接触 。而在停好之前,关机时序并不能够结束,保证了整个过程的完整性 。似乎很完美,但是意外断电的时候,并不会收到各种命令,也没有时间从容的停车,那该怎么办呢?
心细的同学也许注意到我在介绍硬盘构造的图片中没有介绍3的位置 。其实这里别有玄机,这里叫做Landing Zone 。这里并没有磁道,表面介质也不同:
硬盘忽然掉电会损坏硬盘和数据吗?

文章插图
在意外断电的情况下,磁盘控制器会利用空气动力和一些电容的余电,将磁头移到Landing Zone里面降落,从而保证不会划伤盘片 。Landing Zone也是硬盘没事干时,磁头的休息区 。还有些硬盘厂商采用load/unload技术来做类似的事情,这里就不详细介绍了 。
固态硬盘SSD
固态硬盘没有机械旋转,应该不会出问题吧 。其实没有那么简单,看过我们固态硬盘系列的读者应该都知道FTL的存在(杂谈闪存三:FTL) 。FTL的逻辑块和物理块的转换表必须存储在NAND Flash上,否则会造成混乱;高端企业级硬盘上有大量的DRAM来加速,其中的内容也必须存储下来 。
在正常关电的时候,和机械硬盘类似,SATA的STANDBY IMMEDIATE命令和SCSI的Stop指令是合适的存储这些信息的机会 。SSD控制器可以从容的将这些信息写在合适的地方 。
在意外掉电的情况下,情况就复杂不少 。不知道大家注意过没有,现在M.2的SSD上面有很多很小的电容:
硬盘忽然掉电会损坏硬盘和数据吗?

文章插图
在Vcc没电的时候,这些电容的gate就会打开,会为主控争取1ms左右的时间 。主控会立刻放弃现在所有没有存储的数据,而立刻开始存储FTL表,保证不会出大问题 。
在企业级的SSD中,有的DRAM大小将近1GB,而企业SSD的数据完整性要求极高,不容有失,不但FTL表要存好,DRAM中没有存储过的,也必须全部存下来 。这就需要很大的电容,来争取更多的时间,如果我们拆开企业SSD,就会发现很多大黄快:
硬盘忽然掉电会损坏硬盘和数据吗?

文章插图
这个Micron的SSD有3块,而Intel的部分SSD,因为DRAM很大,大电容达到8块!


推荐阅读