自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

為什么固態(tài)會(huì)掉盤(pán)?著名的30分鐘大法修復(fù)是什么原理?

商務(wù)辦公
如果現(xiàn)代的臺(tái)式機(jī)或者筆記本忽然斷電(Power Loss),你覺(jué)得哪個(gè)硬件部分容易損壞?出乎大多數(shù)人的意料的是,固態(tài)硬盤(pán)SSD最脆弱,容易出現(xiàn)掉盤(pán)的現(xiàn)象,也就是BIOS和操作系統(tǒng)不認(rèn)盤(pán)的情況。

如果現(xiàn)代的臺(tái)式機(jī)或者筆記本忽然斷電(Power Loss),你覺(jué)得哪個(gè)硬件部分容易損壞?出乎大多數(shù)人的意料的是,固態(tài)硬盤(pán)SSD最脆弱,容易出現(xiàn)掉盤(pán)的現(xiàn)象,也就是BIOS和操作系統(tǒng)不認(rèn)盤(pán)的情況。今天我們就一起來(lái)Deep Dive一下原理和應(yīng)對(duì)之道,并對(duì)有趣的“30分鐘大法”的原理和是否正確進(jìn)行一些分析。

FTL損壞和丟失

我介紹了很多SSD的原理,其中最重要的根本是對(duì)FTL的理解。SSD甚至SD卡、手機(jī)存貯的很多問(wèn)題和解決方案都或多或少地和它相關(guān),再怎么強(qiáng)調(diào)都不為過(guò)。為了理解后面的原理,我們先來(lái)簡(jiǎn)單回顧一下FTL:我們的寫(xiě)(Program)Flash操作只能把bit 1改成0,而不能從0改成1. 即我們可以把11110000改成11000000,但不能改成11111111。即有點(diǎn)像邏輯and操作(我們可以通過(guò)NAND這個(gè)名字聯(lián)想記憶一下)。那么如何把0改回1呢?這就要靠擦除操作了,但是別忘了,NAND flash的壽命是由其擦寫(xiě)次數(shù)決定的(P/E數(shù) (Program/Erase Count)來(lái)衡量的),頻繁的擦除慢慢的會(huì)產(chǎn)生壞塊,如FAT分區(qū)的文件分配表(老狼:FAT文件系統(tǒng)與UEFI)等。為了能夠做到壽命均衡(Wear Levelling)和對(duì)壞塊的遮蔽,就需要一個(gè)邏輯地址(LBA,logical block addresses )和物理地址(PBA, physical block addresses)的對(duì)應(yīng)表,對(duì)外界暴露邏輯塊,里面是具體是哪個(gè)物理塊,固件自己做主,這個(gè)對(duì)應(yīng)關(guān)系表就是FTL表: 

為什么固態(tài)會(huì)掉盤(pán)?著名的30分鐘大法修復(fù)是什么原理?

因?yàn)長(zhǎng)BA大部分實(shí)現(xiàn)是基于Page的,也叫做Page Mapping Table (PMT):  

為什么固態(tài)會(huì)掉盤(pán)?著名的30分鐘大法修復(fù)是什么原理?

FTL看起來(lái)挺簡(jiǎn)單,但它是SSD、NAND等基礎(chǔ)邏輯,它的實(shí)現(xiàn)多種多樣,是各個(gè)固件的核心機(jī)密。也有些Open Source的方案。

FTL表在哪里呢?作為核心數(shù)據(jù)結(jié)構(gòu),它當(dāng)然也要存儲(chǔ)在Flash上。但由于它會(huì)被頻繁更新,所以每次改動(dòng)也不能立刻寫(xiě)會(huì)Flash,一般會(huì)先暫存在內(nèi)存中,在積累到一定程度,再寫(xiě)回Flash:  

為什么固態(tài)會(huì)掉盤(pán)?著名的30分鐘大法修復(fù)是什么原理?

什么時(shí)間寫(xiě)回,這是SSD固件的核心機(jī)密之一。另一方面,隨著SSD容量的提高,F(xiàn)TL表的容量也快速上漲。我們以8GB的為例,F(xiàn)TL表不加處理可以達(dá)到8MB;以此類(lèi)推,800G的SSD,F(xiàn)TL表可以有800MB!有些省空間的方案可以大大減小FTL表的大小,但也高達(dá)數(shù)十MB。這么大,F(xiàn)TL表也就有了部分被換入換出的過(guò)程。如何設(shè)計(jì),也是很講究技巧的。

FTL表如此重要,沒(méi)了它,整個(gè)SSD/SD卡就沒(méi)法工作了。如果在FTL寫(xiě)回Flash之前,還在內(nèi)存的時(shí)候,忽然沒(méi)電了,內(nèi)存數(shù)據(jù)丟失,F(xiàn)TL表也就丟失了。有鑒于此,高端SSD和服務(wù)器SSD都加上了電容,來(lái)作為應(yīng)急供電方案,讓SSD控制器有時(shí)間把內(nèi)存中的FTL表和一些緩存內(nèi)容存到Flash上去:  

為什么固態(tài)會(huì)掉盤(pán)?著名的30分鐘大法修復(fù)是什么原理?

現(xiàn)實(shí)中的例子,我們?cè)贛.2的SSD上面有很多很小的電容:  

為什么固態(tài)會(huì)掉盤(pán)?著名的30分鐘大法修復(fù)是什么原理?

在Vcc沒(méi)電的時(shí)候,這些電容的gate就會(huì)打開(kāi),會(huì)為主控爭(zhēng)取1ms左右的時(shí)間。主控會(huì)立刻放棄現(xiàn)在所有沒(méi)有存儲(chǔ)的數(shù)據(jù),而立刻開(kāi)始存儲(chǔ)FTL表,保證不會(huì)出大問(wèn)題。

在企業(yè)級(jí)的SSD中,有的DRAM大小將近1GB,而企業(yè)SSD的數(shù)據(jù)完整性要求極高,不容有失,不但FTL表要存好,DRAM中沒(méi)有存儲(chǔ)過(guò)的,也必須全部存下來(lái)。這就需要很大的電容,來(lái)爭(zhēng)取更多的時(shí)間,如果我們拆開(kāi)企業(yè)SSD,就會(huì)發(fā)現(xiàn)很多大黃快:  

為什么固態(tài)會(huì)掉盤(pán)?著名的30分鐘大法修復(fù)是什么原理?

它們也是為了這個(gè)目的。

但是,一些低端消費(fèi)級(jí)的SSD,沒(méi)有這種措施,忽然掉電,會(huì)造成FTL丟失。那么發(fā)生這種情況是不是SSD就報(bào)廢了呢?也不是。

FTL表的重建

在內(nèi)存中FTL丟失之前,F(xiàn)lash上還有上次的FTL內(nèi)容,雖然已經(jīng)過(guò)時(shí)了,但總比沒(méi)有好吧!于是可以搜索SSD中的Flash,找到上次的FTL,這樣盡管會(huì)丟失一些信息,但大部分?jǐn)?shù)據(jù)可以保持。于此同時(shí),有些實(shí)際塊已經(jīng)被分配使用過(guò)了,再次用會(huì)發(fā)生錯(cuò)誤,就需要修正最后的FTL。那么怎么修正呢?

每個(gè)Flash的page都有一些額外的空間,這些空間大部分做ECC校驗(yàn)用,但還有些富余,我們拿來(lái)做Mapping Flag(MF): 

為什么固態(tài)會(huì)掉盤(pán)?著名的30分鐘大法修復(fù)是什么原理?

有了這個(gè)提示,我們可以逐Page掃描整個(gè)Flash,來(lái)修正FTL。

看到逐Page,就知道這是個(gè)很耗時(shí)的工作?,F(xiàn)在SSD那么大,需要不少時(shí)間,可以高達(dá)數(shù)分鐘乃至數(shù)十分鐘!

那么什么時(shí)間做FTL的重建呢?不少主控都在發(fā)現(xiàn)錯(cuò)誤后會(huì)開(kāi)始重建,直到成功重建,主控才會(huì)響應(yīng)ATA等命令。這就是為什么忽然斷點(diǎn)后,有些SSD會(huì)很長(zhǎng)時(shí)間沒(méi)有響應(yīng),想掉盤(pán)一樣了!那么為什么有時(shí)候斷電后又沒(méi)問(wèn)題呢?如果當(dāng)時(shí)新的FTL已經(jīng)被寫(xiě)回Flash中去,沒(méi)有錯(cuò)誤,當(dāng)然也就不會(huì)出問(wèn)題了。

30分鐘大法是怎么回事?

掉電后各個(gè)主控的表現(xiàn)不一,這和它們的FTL存儲(chǔ)算法有關(guān)。某些主控可以迅速恢復(fù),有些則可能耗時(shí)很久,為了給某些主控充足的時(shí)間重建FTL表,掉盤(pán)后可以這樣做:

1.掉電開(kāi)機(jī)后,發(fā)現(xiàn)掉盤(pán)。如果是系統(tǒng)盤(pán),則啟動(dòng)失敗,如果是數(shù)據(jù)盤(pán),則在操作系統(tǒng)里面發(fā)現(xiàn)該盤(pán)沒(méi)有了。

2.不要立即重啟,啥也不干,等待30分鐘,讓SSD主控充分的時(shí)間自行修復(fù)FTL。

3. 30分鐘后,關(guān)機(jī)。再開(kāi)機(jī),看能不能找到該SSD。

有些同學(xué)還有些額外的步驟,即不插數(shù)據(jù)線,光插電源線開(kāi)機(jī)30分鐘。盡管我現(xiàn)在已經(jīng)不做Flash相關(guān)工作,但我從經(jīng)驗(yàn)和原理上認(rèn)為這個(gè)步驟不是必須的。另外M.2的SSD也可照此辦理。

需要特別提醒的是,比較忌諱在此過(guò)程中十分煩躁,不停關(guān)機(jī)開(kāi)機(jī)和重啟,打斷主控重建FTL的過(guò)程,有可能加劇錯(cuò)誤造成徹底不可以用了。

結(jié)論

斷電會(huì)造成FTL表?yè)p壞,進(jìn)而可能出現(xiàn)掉盤(pán)的現(xiàn)象。正確利用30分鐘大法,可以修正部分問(wèn)題,關(guān)鍵是給主控充分的時(shí)間進(jìn)行FTL表的重建。其實(shí)不光斷電,高溫也有可能造成掉盤(pán)。我在我的筆記本M.2上插了塊500GB某廠SSD,在大量拷貝電影時(shí),過(guò)熱會(huì)讓該SSD主控忽然停止工作。我的筆記本這時(shí)就會(huì)沒(méi)有響應(yīng),在過(guò)了一會(huì)后,要不藍(lán)屏,要不就是發(fā)現(xiàn)該盤(pán)符沒(méi)有了。這是我如果直接重啟,就會(huì)發(fā)現(xiàn)在BIOS里面和Windows中,該硬盤(pán)都沒(méi)有了。我這時(shí)就會(huì)讓筆記本涼一會(huì),再重啟,硬盤(pán)就又出現(xiàn)了。這也是30分鐘大法的一個(gè)變種。

如果還不能修復(fù),其實(shí)還可以進(jìn)入工程模式進(jìn)行恢復(fù)。但是該過(guò)程比較復(fù)雜,軟件昂貴,還是留給專(zhuān)業(yè)人士吧!

 

責(zé)任編輯:武曉燕 來(lái)源: 今日頭條
相關(guān)推薦

2022-03-04 14:54:26

固態(tài)硬盤(pán)性能數(shù)據(jù)

2017-07-18 11:10:45

2017-01-10 09:07:53

tcpdumpGET請(qǐng)求

2017-06-07 18:40:33

PromiseJavascript前端

2013-05-03 10:57:09

泛型泛型教程

2024-12-13 15:29:57

SpringSpringBeanJava

2024-07-10 18:55:09

Python定時(shí)

2018-11-26 14:55:33

固態(tài)硬盤(pán)SSD選購(gòu)

2020-05-22 10:20:27

Shiro架構(gòu)字符串

2021-12-01 15:18:45

MySQL復(fù)制數(shù)據(jù)庫(kù)

2022-01-13 15:36:14

固態(tài)硬盤(pán)SLCSSD

2021-01-07 16:50:36

SQL數(shù)據(jù)庫(kù)函數(shù)

2021-01-06 10:33:15

SQL數(shù)據(jù)庫(kù)函數(shù)

2023-12-05 15:24:46

2025-01-07 12:00:00

RedisPipelineJava

2018-02-02 10:24:37

Nginx入門(mén)指南

2024-01-11 08:53:58

2021-12-01 06:50:50

Docker底層原理

2024-07-02 11:22:35

2013-12-11 10:00:14

C++新特性C
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)