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