很多朋友都遇到過(guò)快遞出庫(kù)一體機(jī)強(qiáng)制關(guān)機(jī)之后再次啟動(dòng)時(shí)不能上網(wǎng)的情況,這是由于異常斷電導(dǎo)致了網(wǎng)卡驅(qū)動(dòng)程序的破壞或遺失。對(duì)于固態(tài)硬盤(pán)來(lái)說(shuō),異常斷電除了丟文件還有更可怕的后果:硬盤(pán)像手機(jī)刷機(jī)失敗一樣直接變磚。
為了增強(qiáng)寫(xiě)入性能,快遞出庫(kù)一體機(jī)硬盤(pán)默認(rèn)都開(kāi)啟了寫(xiě)入緩存,允許程序在寫(xiě)入數(shù)據(jù)時(shí)由操作系統(tǒng)先放入內(nèi)存緩沖,程序可以繼續(xù)執(zhí)行后邊的任務(wù),緩沖區(qū)內(nèi)數(shù)據(jù)可以慢慢寫(xiě)入到硬盤(pán)里。但這一過(guò)程中如果發(fā)生停電或強(qiáng)制關(guān)機(jī),就有可能會(huì)丟文件了。
除了啟用寫(xiě)入緩存之外,下方還有一個(gè)“關(guān)閉設(shè)備上寫(xiě)入緩沖區(qū)刷新”的選項(xiàng),NVMe固態(tài)硬盤(pán)必須要勾上這個(gè)選項(xiàng)才能全速運(yùn)行,但顯然這樣做會(huì)增加更多的數(shù)據(jù)遺失風(fēng)險(xiǎn)。這也是現(xiàn)在NVMe不如普通SATA固態(tài)硬盤(pán)成熟的一個(gè)表現(xiàn)。
我們先來(lái)看機(jī)械硬盤(pán)是如何預(yù)防斷電數(shù)據(jù)遺失的:Toshiba在最新的10TB企業(yè)級(jí)機(jī)械硬盤(pán)上增加了一顆原本固態(tài)硬盤(pán)上才會(huì)運(yùn)用的閃存芯片。在斷電時(shí)借助盤(pán)片旋轉(zhuǎn)的慣性發(fā)電,供主控將DRAM緩存內(nèi)數(shù)據(jù)轉(zhuǎn)移到閃存中安全保存,完美實(shí)現(xiàn)了斷電數(shù)據(jù)不遺失,規(guī)劃非常巧妙。
企業(yè)級(jí)固態(tài)硬盤(pán)通常運(yùn)用斷電保護(hù)電容供電來(lái)實(shí)現(xiàn)緩存內(nèi)數(shù)據(jù)的緊急寫(xiě)入。不過(guò)電容壽命限制較多,很可能會(huì)在閃存之前破壞并導(dǎo)致嚴(yán)重的問(wèn)題,所以家用固態(tài)硬盤(pán)中并沒(méi)有這個(gè)功能。另外固態(tài)硬盤(pán)的DRAM緩存內(nèi)主要存放FTL閃存映射表,只有至多16MB容量用來(lái)短時(shí)緩存用戶讀寫(xiě)的數(shù)據(jù),隨著Flush指令的下達(dá),這部分?jǐn)?shù)據(jù)就會(huì)寫(xiě)入到NAND閃存中永久保存下來(lái)。
Flush指令是由Win系統(tǒng)自動(dòng)定時(shí)發(fā)送的,會(huì)強(qiáng)制固態(tài)硬盤(pán)緩存區(qū)內(nèi)數(shù)據(jù)實(shí)際寫(xiě)入到閃存永久保存。下面以ToshibaQ200240G固態(tài)硬盤(pán)來(lái)進(jìn)行測(cè)驗(yàn)。Q200是Toshiba原廠8通道MLC閃存SSD,當(dāng)前性價(jià)比最高的原廠固態(tài)硬盤(pán)之一。
運(yùn)用名為sync的手動(dòng)Flush軟件來(lái)檢驗(yàn)一下Flush指令的作用:
文件復(fù)制完成后立刻斷電,重新開(kāi)機(jī)后文件MD5會(huì)出錯(cuò),因?yàn)檫€有部分?jǐn)?shù)據(jù)留在緩存中沒(méi)有實(shí)際寫(xiě)入閃存:
如果文件復(fù)制后執(zhí)行Flush命令,然后立刻斷電,再次校驗(yàn)MD5是正確的,說(shuō)明文件被完整寫(xiě)入到了固態(tài)硬盤(pán)內(nèi)。
Win系統(tǒng)自動(dòng)向固態(tài)硬盤(pán)發(fā)送Flush指令的頻率是很快的,所以偶爾強(qiáng)制關(guān)機(jī)并不一定出現(xiàn)問(wèn)題。此外家用快遞出庫(kù)一體機(jī)的斷電保護(hù)和有無(wú)DRAM緩存關(guān)系不大:即便你能保護(hù)住硬盤(pán)緩存數(shù)據(jù),主機(jī)沒(méi)有UPS不間斷供電的話,主內(nèi)存數(shù)據(jù)依然會(huì)丟,斷電瞬間發(fā)送到SATA接口上的指令也有可能是錯(cuò)誤的。
家用固態(tài)硬盤(pán)斷電防護(hù)的主要目標(biāo)是避免閃存寫(xiě)飛,破壞到同單元的原有數(shù)據(jù)位內(nèi)容。ToshibaQ200主要使用了CopyonWrite的方式來(lái)實(shí)現(xiàn)保護(hù):如下圖所示,當(dāng)固態(tài)硬盤(pán)要修改Page3時(shí),會(huì)先將Page3原有內(nèi)容拷貝一份到保留區(qū)域,然后再寫(xiě)入Page3的數(shù)據(jù)。如果寫(xiě)入被停電打斷而出錯(cuò),固態(tài)硬盤(pán)還能通過(guò)提前拷貝出來(lái)的數(shù)據(jù)進(jìn)行恢復(fù)。
總的來(lái)說(shuō),家用固態(tài)硬盤(pán)防斷電主要靠聰明的主控與固件搭配,當(dāng)然如果大家能養(yǎng)成良好習(xí)慣,最大限度減少?gòu)?qiáng)制關(guān)機(jī)的發(fā)生才是對(duì)固態(tài)硬盤(pán)最好的保護(hù)。