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