RAID
RAID ( Redundant Array of Independent Disks )即獨立磁盤冗余陣列,通常簡稱為磁盤陣列。簡單地說, RAID 是由多個獨立的高性能磁盤驅動器組成的磁盤子系統,從而提供比單個磁盤更高的存儲性能和數據冗余的技術。 RAID 是一類多磁盤管理技術,其向主機環(huán)境提供了成本適中、數據可靠性高的高性能存儲。 SNIA 對 RAID 的定義是 [2] :一種磁盤陣列,部分物理存儲空間用來記錄保存在剩余空間上的用戶數據的冗余信息。當其中某一個磁盤或訪問路徑發(fā)生故障時,冗余信息可用來重建用戶數據。磁盤條帶化雖然與 RAID 定義不符,通常還是稱為 RAID (即 RAID0 )。
RAID 的初衷是為大型服務器提供高端的存儲功能和冗余的數據安全。在整個系統中, RAID 被看作是由兩個或更多磁盤組成的存儲空間,通過并發(fā)地在多個磁盤上讀寫數據來提高存儲系統的 I/O 性能。大多數 RAID 等級具有完備的數據校驗、糾正措施,從而提高系統的容錯性,甚至鏡像方式,大大增強系統的可靠性, Redundant 也由此而來。
這里要提一下 JBOD ( Just a Bunch of Disks )。最初 JBOD 用來表示一個沒有控制軟件提供協調控制的磁盤集合,這是 RAID 區(qū)別與 JBOD 的主要因素。目前 JBOD 常指磁盤柜,而不論其是否提供 RAID 功能。
RAID 的兩個關鍵目標是提高數據可靠性和 I/O 性能。磁盤陣列中,數據分散在多個磁盤中,然而對于計算機系統來說,就像一個單獨的磁盤。通過把相同數據同時寫入到多塊磁盤(典型地如鏡像),或者將計算的校驗數據寫入陣列中來獲得冗余能力,當單塊磁盤出現故障時可以保證不會導致數據丟失。有些 RAID 等級允許更多地 磁盤同時發(fā)生故障,比如 RAID6 ,可以是兩塊磁盤同時損壞。在這樣的冗余機制下,可以用新磁盤替換故障磁盤, RAID 會自動根據剩余磁盤中的數據和校驗數據重建丟失的數據,保證數據一致性和完整性。數據分散保存在 RAID 中的多個不同磁盤上,并發(fā)數據讀寫要大大優(yōu)于單個磁盤,因此可以獲得更高的聚合 I/O 帶寬。當然,磁盤陣列會減少全體磁盤的總可用存儲空間,犧牲空間換取更高的可靠性和性能。比如, RAID1 存儲空間利用率僅有 50% , RAID5 會損失其中一個磁盤的存儲容量,空間利用率為 (n-1)/n 。
磁盤陣列可以在部分磁盤(單塊或多塊,根據實現而論)損壞的情況下,仍能保證系統不中斷地連續(xù)運行。在重建故障磁盤數據至新磁盤的過程中,系統可以繼續(xù)正常運行,但是性能方面會有一定程度上的降低。一些磁盤陣列在添加或刪除磁盤時必須停機,而有些則支持熱交換 ( Hot Swapping ),允許不停機下替換磁盤驅動器。這種高端磁盤陣列主要用于要求高可能性的應用系統,系統不能停機或盡可能少的停機時間。一般來說, RAID 不可作為數據備份的替代方案,它對非磁盤故障等造成的數據丟失無能為力,比如病毒、人為破壞、意外刪除等情形。此時的數據丟失是相對操作系統、文件系統、卷管理器或者應用系統來說的,對于 RAID 系統來身,數據都是完好的,沒有發(fā)生丟失。所以,數據備份、災 備等數據保護措施是非常必要的,與 RAID 相輔相成,保護數據在不同層次的安全性,防止發(fā)生數據丟失。
RAID 中主要有三個關鍵概念和技術:鏡像( Mirroring )、數據條帶( Data Stripping )和數據校驗( Data parity ) [3][4][5] 。鏡像,將數據復制到多個磁盤,一方面可以提高可靠性,另一方面可并發(fā)從兩個或多個副本讀取數據來提高讀性能。顯而易見,鏡像的寫性能要稍低, 確保數據正確地寫到多個磁盤需要更多的時間消耗。數據條帶,將數據分片保存在多個不同的磁盤,多個數據分片共同組成一個完整數據副本,這與鏡像的多個副本是不同的,它通常用于性能考慮。數據條帶具有更高的并發(fā)粒度,當訪問數據時,可以同時對位于不同磁盤上數據進行讀寫操作, 從而獲得非常可觀的 I/O 性能提升 。數據校驗,利用冗余數據進行數據錯誤檢測和修復,冗余數據通常采用海明碼、異或操作等算法來計算獲得。利用校驗功能,可以很大程度上提高磁盤陣列的可靠性、魯棒性和容錯能力。不過,數據校驗需要從多處讀取數據并進行計算和對比,會影響系統性能。 不同等級的 RAID 采用一個或多個以上的三種技術,來獲得不同的數據可靠性、可用性和 I/O 性能。至于設計何種 RAID (甚至新的等級或類型)或采用何種模式的 RAID ,需要在深入理解系統需求的前提下進行合理選擇,綜合評估可靠性、性能和成本來進行折中的選擇。