1. 程式人生 > >[知乎]老狼:硬碟忽然掉電會損壞硬碟和資料嗎?

[知乎]老狼:硬碟忽然掉電會損壞硬碟和資料嗎?

硬碟忽然掉電會損壞硬碟和資料嗎?

https://zhuanlan.zhihu.com/p/32907254

每個人的無數個過去的瞬間定義了現在的自己。那些歡樂悲傷的瞬間也許對別人無關痛癢,對自己來說卻是彌足珍貴。硬盤裡的照片和文件承載著過去美好的瞬間和知識的積累,對大家來說是十分寶貴的,遠遠不是硬碟的那幾百一千的價格所能衡量。

現在的個人電腦早就不是原來嬌貴的高科技產品,不可中斷電源也不復存在,誰沒有過在一次忽然斷電後,憂心硬碟損壞的的經歷。在重新開啟電源的瞬間,心中默唸,如果這次沒問題,下次我一定做好備份!可是當看見操作正常啟動,除了當時編輯的資料有很小部分丟失而其他完好無缺後,卻又忘記的自己的承諾,繼續裸奔,直到下一個迴圈。

我們知道作業系統為了效率的考慮,在檔案系統驅動中都有快取。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裡面沒有存下來的,風險不大。

那麼有同學提了個邪惡的知乎體問題,怎麼優雅的弄壞機械硬碟呢?其實也很簡單,在大量讀寫硬碟的時候猛烈搖動/震動硬碟,讓磁頭狠狠的劃傷表面,神仙也救不回來被物理劃傷的部分資料了。

後記

有很多同學留言問我某些情況下磁碟會不會損壞等等。我建議大家重要的資料一定要做好備份,畢竟資料是無價的,丟了再就找不回來了。現在硬碟損壞,資料恢復的價格是很貴的,動輒數千上萬,而且經常只能恢復部分資料。再加上我們的某些資料因為敏感性,擔心資料恢復公司濫用(誰想當陳冠希?),也不想給他們恢復。也許大家還記得去年的病毒勒索事件,我的一個朋友的所有照片都被加密了,欲哭無淚啊。

我的建議是重要資料,如照片和文件等都要儲存兩份(熱備份),至少離線備份兩份份(冷備份)。才能保證資料無虞。我後期可能會寫些磁碟資料恢復的文章,大家可以看看。