zoukankan      html  css  js  c++  java
  • [知乎]老狼:硬盘忽然掉电会损坏硬盘和数据吗?

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

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

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

    我们知道操作系统为了效率的考虑,在文件系统驱动中都有缓存。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里面没有存下来的,风险不大。

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

    后记

    有很多同学留言问我某些情况下磁盘会不会损坏等等。我建议大家重要的数据一定要做好备份,毕竟数据是无价的,丢了再就找不回来了。现在硬盘损坏,数据恢复的价格是很贵的,动辄数千上万,而且经常只能恢复部分数据。再加上我们的某些数据因为敏感性,担心数据恢复公司滥用(谁想当陈冠希?),也不想给他们恢复。也许大家还记得去年的病毒勒索事件,我的一个朋友的所有照片都被加密了,欲哭无泪啊。

    我的建议是重要数据,如照片和文档等都要保存两份(热备份),至少脱机备份两份份(冷备份)。才能保证数据无虞。我后期可能会写些磁盘数据恢复的文章,大家可以看看。

  • 相关阅读:
    hadoop2.2.0+hive-0.10.0完全分布式安装方法
    linux之vim编辑器
    hive与hbase的区别与联系
    linux系统管理
    Hive 自定义函数(转)
    hive 存储格式
    ActiveMQ 使用spring模板 发布消息过程分析
    ActiveMQ spring (一)
    ActiveMQ 权限(二)
    ActiveMQ 权限(一)
  • 原文地址:https://www.cnblogs.com/jinanxiaolaohu/p/10037695.html
Copyright © 2011-2022 走看看