在講解固態硬盤(SSD)前,我們先講幾個術語(名詞)。就像我們如果講解機械硬盤,我們要明白磁盤和磁頭,讀寫部分的機械結構等。
反正吧,磨刀不誤砍柴工。
為了更好地展開說明,列舉一些容易混淆的概念并加以說明。
- 固態存儲(Solid State Storage) :使用硅晶半導體技術,而不是借助于機械旋轉對磁碟、光碟或者磁帶進行操作,從而實現數據存取的存儲方式 。 內存(RAM)、閃存(Flash)、相變存儲(Phase Change Memory, 簡稱為 PCM)等都被稱為固態存儲 。當前,因為閃存在價格、容量、可靠性等多方面達到了相對領先的平衡,因此被 廣泛應用于固態存儲領域。
- 閃存: 一種非易失性的半導體存儲器件。所謂“非易失性”,是指在斷電情況下仍能保持所存儲的數據信息,分NOR閃存和NAND閃存。NOR閃存常用于存放系統啟動程序,在嵌入式設備中較為常見;NAND閃存主要用于數據存儲,固態硬盤中使用的就是NAND閃存。
- 固態硬盤(SSD):由控制器、內存、閃存顆粒(前面提到,因其多方面達到了領先的平衡,被廣泛用于固態存儲)等單元組成。控制器提供了外部主機接口、內部閃存管理接口,并通過內嵌的 CPU 來運行SSD固件,它管理著主機可見的存儲地址空間、閃存物理空間、垃圾回收、磨損均衡等。內存用于運行SSD固件,并保存在地址空間虛擬化所需要的各種表項。閃存只是最終的存儲信息的實體,多顆閃存顆粒分布在SSD的電路板上,共同為SSD提供存儲空間 。
閃存介紹
上面提到閃存在固態硬盤的廣泛應用,所以在講解固態硬盤的各種算法前需要重點介紹一下閃存的特性。
- 概念與原理
閃存使用三端器件作為存儲單元,分別為源極、漏極和柵極,主要利用電場的效應來控制源極與漏極之間的通斷;在柵極 與硅襯底之間增加了一個浮置柵極,浮置柵極可以存儲電荷,利用電荷存儲來存 儲記憶。
擦除:釋放浮置柵極的電荷,從而使之變成‘1’,這個動作被稱為“擦除”。
編程:向浮置柵極注入電荷,從而使之變成‘0’,這個動作被稱為“編程”。
2. 內部組織結構
閃存顆粒內部一般由成千上萬個大小相同的塊(Block) 所組成,塊大小一般為數百 KB 倒數 MB。每一個塊的內部又分為若干個大小相同的頁(Page),頁的大小一般為 4KB 或者 8KB。
3. 數據寫入
- 向閃存中寫入數據時,只能以頁為粒度進行寫入,如果閃存中某個頁已經被寫入了數據,那么不能向這個頁中再次直接寫 入數據,只能在這個頁的數據被清空以后才能再次寫入。
- 閃存進行數據清空的力度是塊,即一次清空動作會將一個塊的數據全部抹除。清空動作對應著閃存的擦除動作,即擦除了一個塊的數據后,這 個塊中所有的 bit 位都變成了 1。
- 寫入動作對應著閃存的編程動作,將數據寫入頁時,將特定的 bit 位從 1 變成 0,就使得這個頁保存了相應的數據。
- 閃存就工作在這樣的“擦除”和“編程”循環中,一次這樣的循環,被 稱為一次擦寫(Program/Erase,簡稱為 P/E)。閃存中每個塊的 P/E 次數有限;當某個塊的 P/E 次數達到上限后,就無法保證能夠繼續有效地存取數據。
4. 數據讀出
- 閃存中保存的數據,經過一段時間后,可能存在若干 bit 位的錯誤。如果直接將頁中讀出的數據返回給上層業務,就可能造成業務失敗。
- 為了保證返回給上層業務的數據是正確有效的,閃存內部預留了部分空間用于保存業務數據的 ECC(Error Correcting Code,糾錯碼)。每當讀取數據時,控制器會使用相應的 ECC 對這些數據進行錯誤檢查和糾正。
- 受限于控制器的計算能力,ECC 的糾錯范圍有限,只能在頁面數據中出現bit 位錯誤的數量不超過一定的上限時才有效。當前主流的 ECC 糾錯能力一般是 24bit/1KB,即每 1KB 數據(包含業務數據和 ECC 校驗數據) 內出現了 bit 位錯誤不超過24個時,控制器可以通過計算的方式得出正確有效的業務數據。
- 當某個頁中的 bit 位錯誤數超過控制器的計算能力后,該頁的業務數據無法被正確讀出,此時便產生一個 UNC(Uncorrectable)錯誤,UNC 錯誤只能被更高層級的 RAID 機制所修復。
在通電 40°C 和斷電 30°C 溫度下,SSD 將將數據保留 52 周,即一年。如表所示,數據保留與活動溫度成正比,與斷電溫度成反比,這意味著較高的斷電溫度將導致保留率下降。該活動溫度僅為 25-30°C 且斷電為 55°C 的最壞情況下,數據保留時間可能短至一周,這是許多網站所炒作“數據在幾天內丟失”的言論。是的,它在技術上可能發生,但不是在典型的用戶環境中。
在現實中,55°C 的斷電溫度對于客戶端用戶來說根本不現實,因為SSD很可能在室溫下存儲在室內某處(壁櫥、地下室、車庫等),溫度往往低于 30°C。另一方面,活動的溫度通常至少為 40°C,因為電腦中的硬盤和其他元件會產生熱量,使之超過室溫
Control Gate: 控制柵
ONO: 氧化層
Floating Gate: 浮動柵
Tunnel Oxide: 隧道氧化層
Silicon: 硅
與一般原理一樣,數據保留的時長是有技術解釋的。半導體的導電率隨溫度而變化,這對NAND來說是個壞消息,因為當它不通電時,電子不應該移動,因為這會改變單元(cell)的電荷。換句話說,隨著溫度的升高,電子更快地從浮動柵中逸出,最終改變單元的電壓狀態,使數據不可讀(即SSD不再保留數據)。
對于正常通電使用時,溫度具有相反的效果。由于較高的溫度使硅導電性更高,因此在編程/擦除操作過程中電流較高,對隧道氧化層的壓力較小,從而提高了單元(cell)的耐久性,因為隧道氧化層保持電子在浮動柵內的能力實際上決定了SSD的耐久性[壽命]。
總之,在典型的客戶環境中,絕對沒有理由擔心 SSD 數據保留時長。請記住,此處提供的數字適用于已通過其耐久性考核的SSD(寫入量達到標稱值)[潛臺詞就是隧道氧化層將電子控制在浮動柵的能力已經變得較差了]。因此對于新SSD,數據保留時長要久得多,通常對于基于全新的MLC NAND的SSD來說,數據保留時長通常會超過十年。如果你今天買了一個SSD,并存儲數據,SSD本身將變得完全過時比它將失去它的數據更快。此外,考慮到 SSD 的成本,將它們用于冷存儲無論如何都不經濟高效,因此,如果您希望存檔的數據,我建議僅出于成本原因使用機械硬盤。