磁碟驅動器繼續變得更小更便宜,如今在一台計算機系統上連線許多磁碟從經濟上來說已經可行了。一個系統擁有大量磁碟,就有機會改善資料的讀寫速率,因為磁碟操作可以並行進行。此外,這種設定提供能力,以提高資料儲存的可靠性,因為冗佘資訊可以儲存在多 個磁碟上。因此,單個磁碟的故障不會導致資料丟失。
多種磁碟組織技術統稱為
磁碟冗餘陣列(RAID)技術,通常用於處理效能與可靠性問題。過去,RAID 是由小且便宜的磁碟組成,可作為大且昂貴的磁碟的有效替代品。現在,RAID 的使用主要是因為高可靠性和高資料傳輸率,而不是經濟原因。因此,RAID 中的 I 表示“獨立”(independent)而不是“廉價”(inexpensive)。
通過冗餘提高可靠性
首先分析 RAID 的可靠性。N 個磁碟內的某個磁碟故障的機會遠遠高於單個特定磁碟故障的機會。假設單個磁碟的平均故障時間為 100 000 小時,那麼 100 個磁碟中的某個磁碟的平均故障時間為
100 000/100 = 1000
小時或 41.66 天,這並不長!如果只儲存資料的一個副本,則每個磁碟故障會導致丟失大量資料,這樣高的資料丟失率是不可接受的。
可靠性問題的解決是引入冗餘。儲存額外資訊,這是平常不需要的,但是在磁碟故障時可以用於重建丟失的資訊。因此,即使磁碟故障,資料也不會丟失。
最為簡單(但最昂貴)的引入冗餘的方法是,重複每個磁碟。這種技術稱為
映象。由於映象,每個邏輯磁碟由兩個物理磁碟組成,並且每次寫入都在兩個磁碟上進行。這稱為
映象捲。如果捲中的某個磁碟故障,則可以從另一卷中讀取。只有在第一個損壞磁碟沒有替換之前第二個磁碟又出錯,才會丟失資料。
映象捲的平均故障時間(這裡的故障是資料丟失)取決於兩個因素。一個是,單個磁碟的平均故障時間。另一個是平均維修時間,這是用於替換損壞磁碟並恢復其上資料的平均時間。假設兩個磁碟的故障是獨立的;即一個磁碟故障與另一個磁碟故障沒有關聯。那麼,如果單個磁碟的平均故障時間為 100 000 小時,並且平均修補時間為 10 小時,則映象磁碟系統的平均資料丟失時間為
100 0 002/(2X10)= 500X106
小時或 57 000 年。
需要注意,磁碟故障的獨立性假設並不真正成立。電源故障和自然災害,如地震、火災、水災,可能導致同時損壞兩個磁碟。另外,成批生產磁碟的製造缺陷可以導致相關故障。隨著磁碟老化,故障概率增加,從而增加了在替代第一磁碟時第二個磁碟故障的概率。然而,儘管所有這些考慮,映象磁碟系統仍比單個磁碟系統提供更高的可靠性。
電源故障是一個特別的關注點,因為它們比自然災害更為常見。即使使用磁碟映象,如果對兩個磁碟寫入同樣的塊,而在兩塊完全寫入之前電源故障,則這兩塊可能處於不一致的狀態。
這個問題的一種解決方法是,先寫一個副本,再寫下一個。另一個是,為 RAID 陣列新增固態非易失性 RAM 的快取。這種寫回快取記憶體在電源故障時會得到保護。這樣,假設 NVRAM 有某種錯誤避免和糾錯功能,如 ECC 和映象,寫入可以認為在這一階段已完成。
通過併行處理提高效能
現在分析多個磁碟的並行存取如何改善效能。通過磁碟映象,讀請求的處理速度可以加倍,因為讀請求可以送到任一磁碟(只要成對的兩個磁碟都能工作,情況幾乎總是這樣的)。例如,每次讀取的傳輸速率是與單個磁碟系統相同,但是每單位時間的讀取次數翻了一番。
採用多個磁碟,通過將資料分散在多個磁碟上,也可以改善傳輸率。最簡單形式是,資料分條包括將每個位元組分散在多個磁碟上,這種分條稱為
位級分條。
例如,如果有 8 個磁碟,則可以將每個位元組的位i寫到磁碟 i 上。這 8 個磁碟可作為單個磁碟使用,其磁區為正常磁區的 8 倍,更為重要的是它具有 8 倍的存取率。每個磁碟參與每個存取(讀或寫);這樣每秒所能處理的存取數量與單個磁碟的一樣,但是每次存取的資料在同樣時間內為單個磁碟系統的8倍。
位級分條可以推廣到其他磁碟數量,它或者是 8 的倍數或者除以 8。例如,如果採用 4 個磁碟陣列,則每個位元組的位 i 和位 4+i 可存在磁碟 i 上。此外,分條不必按位元級來進行。
例如,對於塊級分條,檔案的塊可以分散在多個磁碟上;對於 n 個磁碟,檔案的塊 i 可存在磁碟
(i mod n)+ 1
上。其他分條級別,如單個磁區或單塊磁區的位元組,也是可能的。塊級分條是最常見的。
磁碟系統的並行化,通過分條實現,有兩個主要目標:
-
通過負載平衡,增加了多個小存取(即頁面存取)的吞吐量。
-
降低大存取的響應時間。
RAID 級別
映象提供高可靠性,但是昂貴。分條提供高資料傳輸率,但並未改善可靠性。通過磁碟分條和“奇偶”位(下面將要討論),在低代價下提供冗餘可以有多種方案。這些方案有不同的性價折中,並分成不同的級別,稱為
RAID級別。這裡討論各種級別,圖 1 顯示了它們(圖中,P 表示糾錯位,而 C 表示資料的第二副本)。
圖 1 RAID的級別