過去幾年來,RAID 6不斷推廣,已成為購買RAID控制器時必須考慮的一項特性。本文將探討人們對該技術興趣不斷提高背后的一些原因,說明有的原因是合理的,而有的則是盲信,并將給出具體模型與實施實例,分別說明其優缺點,為分析問題、明確解決方案奠定堅實的基礎。
從***基本的角度來說,RAID就是指一組磁盤關聯和相對應的數據布局,在某些組件發生讀取錯誤的情況下仍能確保從系統檢索到數據。RAID 0是基礎條帶化模型,不支持任何冗余,因此可***優化系統性能,但在數據故障情況下不能恢復數據。RAID 5 設計旨在從單次數據故障中恢復數據,通過添加一個冗余校驗盤(“P”盤即奇偶校驗盤),作為對等數據 XOR 計算,從而實現數據恢復功能。從數學角度來說,我們把數據恢復可看作只有一個未知變量(也就是因讀取故障丟失的數據)的線性方程式,并能通過基礎代數方法輕松解出任何線性方程。
RAID 6擴展了RAID 5的功能,可在同一數據集上恢復兩個數據錯誤。從數學角度來說,RAID 5使用一個方程式解出一個未知變量,而RAID 6則能通過兩個獨立的線性方程構成方程組,從而恢復兩個未知數據。******個方程與 RAID 5機制一樣,也是通過添加P盤實現的,而第二個方程則有所不同,將創建一個 盤,因此 RAID 6又稱作“P+Q”盤機制。
從理論上說,這種回歸計算可以無限延伸,可創建任意類型的M+N冗余,但實際應用通常僅限于N=2,也就是說數據條帶上同時發生兩個不同的故障,這也就是RAID 6所要解決的主要問題。
為什么需要RAID 6?
RAID 5可獨立解決磁盤不能檢索數據的兩種情況:
一個磁盤損壞,也就是說不能對任何讀寫命令做出響應,需要更換。RAID 5能從保存的對等數據中恢復所有數據,重建缺陷磁盤。
磁盤組本身沒問題,但其中一個磁盤上出現了壞塊(即不能讀取的塊),造成某些數據不能恢復。
請注意,從數學角度說,每個磁盤的平均無故障時間 (MTBF) 大約為 50 萬至 150 萬小時(也就是每 50~150 年發生一次硬盤損壞)。實際往往不能達到這種理想的情況,在大多數散熱和機械條件下,都會造成硬盤正常工作的時間大幅減少。考慮到每個磁盤的壽命不同,陣列中的任何磁盤都可能出現問題,從統計學角度說,陣列中 N 個磁盤發生故障的機率比單個磁盤發生故障的機率要大 N 倍。結合上述因素,如果陣列中的磁盤數量合理,且這些磁盤的平均無故障時間 (MTBF) 較短,那么在磁盤陣列的預期使用壽命過程中,就很有可能發生磁盤故障(比方說每幾個月或每隔幾年就會發生一次故障)。
兩塊磁盤同時損壞的幾率有多大呢(“同時”就是指一塊磁盤尚未完全修復時另一塊磁盤也壞掉了)?如果說 RAID 5 陣列的MTBF相當于MTBF^2,那么這種幾率為每隔1015個小時發生一次(也就是1萬多年才出現一次),因此不管工作條件如何,發生這種情況的概率是極低的。從數學理論角度來說,是有這種概率,但在現實情況中我們并不用考慮這一問題。不過有時卻是會發生兩塊磁盤同時損壞的情況,我們不能完全忽略這種可能性,實際兩塊磁盤同時損壞的原因與MTBF基本沒有任何關系。
讀取錯誤(不能恢復的ECC讀取錯誤)從統計角度來說也比較少見,一般來說是指讀取多少位后會出現一次讀取錯誤。就 SCSI/ FC/ SAS 磁盤(SAS 是本文的重點,但同樣的量化說明適用于所有這三種技術)來說,發生讀取錯誤的幾率為每讀取10^15位(也就是約100TB)到10^16位(約 1000TB 或 1PB),會出現一次錯誤。我們把這一幾率稱作誤碼率 (BER)。
不過,SATA磁盤的錯誤率要大一些,其BER比其它類型的磁盤要高出一兩個數量級(即其BER為每讀取10^14到10^15位出現一次錯誤,或者說每讀取10/100TB 出現一次錯誤,具體取決于磁盤設計)。如果 SATA 磁盤容量為1TB,完整讀取磁盤十次,就會發現新的故障塊(假定這里的 BER 為每讀取10^14位出錯一次)。存儲相同數據的相應兩個塊同時出現問題幾乎是不可能的,幾率為每讀取 10^30 位發生一次。
然而,如果一個問題由于MTBF引起,另一個問題由于讀取錯誤引起,這樣兩個錯誤同時發生的幾率有多大?假設我們有 10 個 SAS 磁盤組成的陣列,每個磁盤容量為 300GB,BER為每讀取10^-15 位出錯一次,那么我們在重建磁盤時發生讀取錯誤的可能性有多大?
計算方法如下: 10^15(位)X 1/8 (字節/位)X 1/10 (磁盤)X 1/300GB,從而得到每 50 次重建就會出現一次。這種幾率還是比較大的,但并不足以讓人震驚,要是磁盤陣列在使用壽命中要發生50次故障的話,那才真成了問題!不過,上述幾率在統計學上還是有意義的,我們可以換一種方式來理解,也就是說,如果我們出售50款與上述配置一樣的陣列,那么至少其中一個會出現上述嚴重問題。這種幾率也不算高,但要是客戶安裝上百個陣列的話,問題就比較嚴重了。不過,有的SAS磁盤的BER比我們這里假定的情況要好上10倍,因此問題可以大大化解。
如果使用SATA會有什么情況呢?磁盤容量越大,問題就越嚴重!
磁盤的BER會較差,造成問題的嚴重性。假定同樣有上述10個磁盤組成陣列,但每個磁盤容量為500GB,BER為讀取10^-14位出錯一次,那么計算如下:10^14 X 1/8 X 1/10 X 1/500GB,得出每 2.5 次重建就會出一次嚴重問題,這就要引起我們的高度重視了。我們這里所談的是5TB容量的陣列,盡管這種陣列還不太常見,但完全是當前技術可以達到的水平。這就是說,這種容量大小的陣列每 2.5 個中,就有一個陣列會出現每次重建就發生塊損壞的問題,用戶會看到“Read Error at LBA = 0xF43E1AC9”這類報錯信息,著實讓人******。用戶怎么會明白0xF43E1AC9 到底指什么?是說空間為空?還是說內核數據下次重啟會發生藍屏錯誤?是僅涉及沒人會用得到的數據庫?還是包含著銀行帳戶信息?實際上看到這種錯誤信息我們根本無所做出判斷,******的辦法就是從備份中恢復數據,這會花大量時間,而且還要考慮到從 5TB 容量的磁帶中恢復數據會面臨多大的讀取錯誤幾率。這種讀取錯誤的幾率要大大高于磁盤,因此用戶會遇到無窮盡的問題。
內容提要:RAID 6之所以重要,不是因為它能恢復兩個同時發生的磁盤故障,而是能用完好的對等磁盤恢復一個磁盤故障和一個讀取錯誤。隨著磁盤容量的上升,上述這種錯誤的發生幾率也在增加。更為重要的是,低質量SATA磁盤使用比較多,造成這種幾率又要提高10倍乃至百倍。
說到底,我們要在價格與風險之間進行權衡,SAS和高端驅動器的平均無故障時間 (MTBF) 更長/BER性能更高,因而出問題的可能性也就少得多(盡管不是不可能出問題),而低端SATA 有助于大幅節約購買設備的資本投入,卻會面臨較高的雙重故障幾率。在此情況下,RAID6 市場便應運而生。
需要指出的是,上述涉及的某些風險可通過其它技術加以規避減輕,如定期掃描磁盤以避免壞塊的巡讀 (Patrol Read),確保不會因為另一塊磁盤的故障造成同一條帶上的數據發生雙重故障。就目前而言,RAID 6 似乎是針對 SATA 驅動器的更合適的解決方案,也是我們更加需要的解決方案。不過隨著市場預期的發展,磁盤容量和陣列規模不斷上升,這種技術在 SAS 磁盤領域的應用也可能頗有商機。