查看原文
其他

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

Wolf UEFI社区 2023-12-29
点击上方“公众号” 可以订阅哦!

每个人的无数个过去的瞬间定义了现在的自己。那些欢乐悲伤的瞬间也许对别人无关痛痒,对自己来说却是弥足珍贵。硬盘里的照片和文档承载着过去美好的瞬间和知识的积累,对大家来说是十分宝贵的,远远不是硬盘的那几百一千的价格所能衡量。

现在的个人电脑早就不是原来娇贵的高科技产品,不可中断电源也不复存在,谁没有过在一次忽然断电后,忧心硬盘损坏的的经历。在重新开启电源的瞬间,心中默念,如果这次没问题,下次我一定做好备份!可是当看见操作正常启动,除了当时编辑的资料有很小部分丢失而其他完好无缺后,却又忘记的自己的承诺,继续裸奔,直到下一个循环。

我们知道操作系统为了效率的考虑,在文件系统驱动中都有缓存。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块!

有些低端SSD厂商,没有电容,或者在长时间使用后电容能力下降。在掉电后,FTL表并没有存下来。而是采取在下一次上电的时候重建FTL表,这是用户就会发现SSD反应很慢,要一会才会恢复正常。

结论

古老的机械硬盘没有各种保护功能,掉电的确会造成物理上的损伤,带来数据丢失。现在的无论机械硬盘和固态硬盘,一般来说忽然断电都不会损坏硬盘,丢失的数据也仅限于Cache里面没有存下来的,风险不大。

那么有同学提了个邪恶的问题,怎么优雅的弄坏机械硬盘呢?其实也很简单,在大量读写硬盘的时候猛烈摇动/震动硬盘,让磁头狠狠的划伤表面,神仙也救不回来被物理划伤的部分数据了。


继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存