RAID技術總結

概述
RAID是“Redundant Array of Independent Disk”的縮寫,中文意思是獨立冗餘磁盤陣列。冗餘磁盤陣列技術誕生於1987年,由美國加州大學伯克利分校提出。

RAID磁盤陣列(Redundant Array of Independent Disks)

簡單地解釋,就是將N臺硬盤透過RAID Controller(分Hardware,Software)結合成虛擬單臺大容量的硬盤使用,其特色是N臺硬盤同時讀取速度加快及提供容錯性Fault Tolerant,所以RAID是當成平時主要訪問Data的Storage不是Backup Solution。
在RAID有一基本概念稱爲EDAP(Extended Data Availability and Protection),其強調擴充性及容錯機制, 也是各家廠商如:Mylex,IBM,HP,Compaq,Adaptec,Infortrend等訴求的重點,包括在不須停機情況下可處理以下動作:
RAID 磁盤陣列支援自動檢測故障硬盤;
RAID 磁盤陣列支援重建硬盤壞軌的資料;
RAID 磁盤陣列支援支持不須停機的硬盤備援 Hot Spare;
RAID 磁盤陣列支援支持不須停機的硬盤替換 Hot Swap;
RAID 磁盤陣列支援擴充硬盤容量等。
一旦RAID陣列出現故障,硬件服務商只能給客戶重新初始化或者REBUILD,這樣客戶數據就會無法挽回。因此對RAID0、RAID1、RAID5以及組合型的RAID系列磁盤陣列數據恢復,出現故障以後只要不對陣列作初始化操作,就有機會恢復出故障RAID磁盤陣列的數據。

技術規範
(1)RAID技術規範簡介

冗餘磁盤陣列技術最初的研製目的是爲了組合小的廉價磁盤來代替大的昂貴磁盤,以降低大批量數據存儲的費用,同時也希望採用冗餘信息的方式,使得磁盤失效時不會使對數據的訪問受損失,從而開發出一定水平的數據保護技術,並且能適當的提升數據傳輸速度。

過去RAID一直是高檔服務器纔有緣享用,一直作爲高檔SCSI硬盤配套技術作應用。近來隨着技術的發展和產品成本的不斷下降,IDE硬盤性能有了很大提升,加之RAID芯片的普及,使得RAID也逐漸在個人電腦上得到應用。

那麼爲何叫做冗餘磁盤陣列呢?冗餘的漢語意思即多餘,重複。而磁盤陣列說明不僅僅是一個磁盤,而是一組磁盤。這時你應該明白了,它是利用重複的磁盤來處理數據,使得數據的穩定性得到提高。
(2)RAID的工作原理
RAID如何實現數據存儲的高穩定性呢?我們不妨來看一下它的工作原理。RAID按照實現原理的不同分爲不同的級別,不同的級別之間工作模式是有區別的。整個的RAID結構是一些磁盤結構,通過對磁盤進行組合達到提高效率,減少錯誤的目的,不要因爲這麼多名詞而被嚇壞了,它們的原理實際上十分簡單。問了便於說明,下面示意圖中的每個方塊代表一個磁盤,豎的叫塊或磁盤陣列,橫稱之爲帶區。
(3)RAID規範

主要包含RAID 0~RAID 7等數個規範,它們的側重點各不相同,常見的規範有如下幾種:

RAID 0:無差錯控制的帶區組

要實現RAID0必須要有兩個以上硬盤驅動器,RAID0實現了帶區組,數據並不是保存在一個硬盤上,而是分成數據塊保存在不同驅動器上。因爲將數據分佈在不同驅動器上,所以數據吞吐率大大提高,驅動器的負載也比較平衡。如果剛好所需要的數據在不同的驅動器上效率最好。它不需要計算校驗碼,實現容易。它的缺點是它沒有數據差錯控制,如果一個驅動器中的數據發生錯誤,即使其它盤上的數據正確也無濟於事了。不應該將它用於對數據穩定性要求高的場合。如果用戶進行圖象(包括動畫)編輯和其它要求傳輸比較大的場合使用RAID0比較合適。同時,RAID可以提高數據傳輸速率,比如所需讀取的文件分佈在兩個硬盤上,這兩個硬盤可以同時讀取。那麼原來讀取同樣文件的時間被縮短爲1/2。在所有的級別中,RAID 0的速度是最快的。但是RAID 0沒有冗餘功能的,如果一個磁盤(物理)損壞,則所有的數據都無法使用

RAID 1:鏡象結構

對於使用這種RAID1結構的設備來說,RAID控制器必須能夠同時對兩個盤進行讀操作和對兩個鏡象盤進行寫操作。通過下面的結構圖您也可以看到必須有兩個驅動器。因爲是鏡象結構在一組盤出現問題時,可以使用鏡象,提高系統的容錯能力。它比較容易設計和實現。每讀一次盤只能讀出一塊數據,也就是說數據塊傳送速率與單獨的盤的讀取速率相同。因爲RAID1的校驗十分完備,因此對系統的處理能力有很大的影響,通常的RAID功能由軟件實現,而這樣的實現方法在服務器負載比較重的時候會大大影響服務器效率。當您的系統需要極高的可靠性時,如進行數據統計,那麼使用RAID1比較合適。而且RAID1技術支持“熱替換”,即不斷電的情況下對故障磁盤進行更換,更換完畢只要從鏡像盤上恢復數據即可。當主硬盤損壞時,鏡像硬盤就可以代替主硬盤工作。鏡像硬盤相當於一個備份盤,可想而知,這種硬盤模式的安全性是非常高的,RAID 1的數據安全性在所有的RAID級別上來說是最好的。但是其磁盤的利用率卻只有50%,是所有RAID級別中最低的。

RAID2:帶海明碼校驗

從概念上講,RAID 2 同RAID 3類似, 兩者都是將數據條塊化分佈於不同的硬盤上, 條塊單位爲位或字節。然而RAID 2 使用一定的編碼技術來提供錯誤檢查及恢復。這種編碼技術需要多個磁盤存放檢查及恢復信息,使得RAID 2技術實施更復雜。因此,在商業環境中很少使用。下圖左邊的各個磁盤上是數據的各個位,由一個數據不同的位運算得到的海明校驗碼可以保存另一組磁盤上,具體情況請見下圖。由於海明碼的特點,它可以在數據發生錯誤的情況下將錯誤校正,以保證輸出的正確。它的數據傳送速率相當高,如果希望達到比較理想的速度,那最好提高保存校驗碼ECC碼的硬盤,對於控制器的設計來說,它又比RAID3,4或5要簡單。沒有免費的午餐,這裏也一樣,要利用海明碼,必須要付出數據冗餘的代價。輸出數據的速率與驅動器組中速度最慢的相等。

RAID3:帶奇偶校驗碼的並行傳送

這種校驗碼與RAID2不同,只能查錯不能糾錯。它訪問數據時一次處理一個帶區,這樣可以提高讀取和寫入速度,它象RAID 0一樣以並行的方式來存放數,但速度沒有RAID 0快。校驗碼在寫入數據時產生並保存在另一個磁盤上。需要實現時用戶必須要有三個以上的驅動器,寫入速率與讀出速率都很高,因爲校驗位比較少,因此計算時間相對而言比較少。用軟件實現RAID控制將是十分困難的,控制器的實現也不是很容易。它主要用於圖形(包括動畫)等要求吞吐率比較高的場合。不同於RAID 2,RAID 3使用單塊磁盤存放奇偶校驗信息。如果一塊磁盤失效,奇偶盤及其他數據盤可以重新產生數據。 如果奇偶盤失效,則不影響數據使用。RAID 3對於大量的連續數據可提供很好的傳輸率,但對於隨機數據,奇偶盤會成爲寫操作的瓶頸。 利用單獨的校驗盤來保護數據雖然沒有鏡像的安全性高,但是硬盤利用率得到了很大的提高,爲n-1。

RAID4:帶奇偶校驗碼的獨立磁盤結構

RAID4和RAID3很象,不同的是,它對數據的訪問是按數據塊進行的,也就是按磁盤進行的,每次是一個盤。在圖上可以這麼看,RAID3是一次一橫條,而RAID4一次一豎條。它的特點的RAID3也挺象,不過在失敗恢復時,它的難度可要比RAID3大得多了,控制器的設計難度也要大許多,而且訪問數據的效率不怎麼好。

RAID5:分佈式奇偶校驗的獨立磁盤結構

從它的示意圖上可以看到,它的奇偶校驗碼存在於所有磁盤上,其中的p0代表第0帶區的奇偶校驗值,其它的意思也相同。RAID5的讀出效率很高,寫入效率一般,塊式的集體訪問效率不錯。因爲奇偶校驗碼在不同的磁盤上,所以提高了可靠性,允許單個磁盤出錯。RAID 5也是以數據的校驗位來保證數據的安全,但它不是以單獨硬盤來存放數據的校驗位,而是將數據段的校驗位交互存放於各個硬盤上。這樣,任何一個硬盤損壞,都可以根據其它硬盤上的校驗位來重建損壞的數據。硬盤的利用率爲n-1。 但是它對數據傳輸的並行性解決不好,而且控制器的設計也相當困難。RAID 3 與RAID 5相比,重要的區別在於RAID 3每進行一次數據傳輸,需涉及到所有的陣列盤。而對於RAID 5來說,大部分數據傳輸只對一塊磁盤操作,可進行並行操作。在RAID 5中有“寫損失”,即每一次寫操作,將產生四個實際的讀/寫操作,其中兩次讀舊的數據及奇偶信息,兩次寫新的數據及奇偶信息。

RAID6:帶有兩種分佈存儲的奇偶校驗碼的獨立磁盤結構

名字很長,但是如果看到圖,大家立刻會明白是爲什麼,請注意p0代表第0帶區的奇偶校驗值,而pA代表數據塊A的奇偶校驗值。它是對RAID5的擴展,主要是用於要求數據絕對不能出錯的場合。當然了,由於引入了第二種奇偶校驗值,所以需要N+2個磁盤,同時對控制器的設計變得十分複雜,寫入速度也不好,用於計算奇偶校驗值和驗證數據正確性所花費的時間比較多,造成了不必須的負載。我想除了軍隊沒有人用得起這種東西。

RAID7:優化的高速數據傳送磁盤結構

RAID7所有的I/O傳送均是同步進行的,可以分別控制,這樣提高了系統的並行性,提高系統訪問數據的速度;每個磁盤都帶有高速緩衝存儲器,實時操作系統可以使用任何實時操作芯片,達到不同實時系統的需要。允許使用SNMP協議進行管理和監視,可以對校驗區指定獨立的傳送信道以提高效率。可以連接多臺主機,因爲加入高速緩衝存儲器,當多用戶訪問系統時,訪問時間幾乎接近於0。由於採用並行結構,因此數據訪問效率大大提高。需要注意的是它引入了一個高速緩衝存儲器,這有利有弊,因爲一旦系統斷電,在高速緩衝存儲器內的數據就會全部丟失,因此需要和UPS一起工作。當然了,這麼快的東西,價格也非常昂貴。

RAID10:高可靠性與高效磁盤結構

這種結構無非是一個帶區結構加一個鏡象結構,因爲兩種結構各有優缺點,因此可以相互補充,達到既高效又高速還可以的目的。大家可以結合兩種結構的優點和缺點來理解這種新結構。這種新結構的價格高,可擴充性不好。主要用於容量不大,但要求速度和差錯控制的數據庫中。

RAID53:高效數據傳送磁盤結構

越到後面的結構就是對前面結構的一種重複和再利用,這種結構就是RAID3和帶區結構的統一,因此它速度比較快,也有容錯功能。但價格十分高,不易於實現。這是因爲所有的數據必須經過帶區和按位存儲兩種方法,在考慮到效率的情況下,要求這些磁盤同步真是不容易。

RAID0+1

把RAID0和RAID1技術結合起來,即RAID0+1。數據除分佈在多個盤上外,每個盤都有其物理鏡像盤,提供全冗餘能力,允許一個以下磁盤故障,而不影響數據可用性,並具有快速讀/寫能力。要求至少4個硬盤才能作成RAID0+1。

(3)JBOD模式

JBOD通常又稱爲Span。它是在邏輯上將幾個物理磁盤一個接一個連起來, 組成一個大的邏輯磁盤。JBOD不提供容錯,該陣列的容量等於組成Span的所有磁盤的容量的總和。JBOD嚴格意義上說,不屬於RAID的範圍。不過現在很多IDE RAID控制芯片都帶着種模式,JBOD就是簡單的硬盤容量疊加,但系統處理時並沒有採用並行的方式,寫入數據的時候就是先寫的一塊硬盤,寫滿了再寫第二塊硬盤……

實際應用中最常見的是RAID0 RAID1 RAID5 和RAID10 由於在大多數場合,RAID5包含了RAID2-4的優點,所以RAID2-4基本退出市場
現在,一般認爲RAID2-4只用於RAID開發研究

(4)我們能夠用得上的IDE RAID

上面是對RAID原理的敘述,而我們Pcfans最關心的是RAID的應用。我們日常使用IDE硬盤,而且很容易買到IDE RAID卡和集成RAID芯片的主板。所以跟我們最貼近的是IDE RAID。限於應用級別很低,IDE RAID多數只支持RAID 0,RAID 1,RAID 0+1,JBOD模式。

RAID的應用

開始時RAID 方案主要針對SCSI硬盤系統,系統成本比較昂貴。1993年,HighPoint公司推出了第一款IDE-RAID控制芯片,能夠利用相對廉價的IDE 硬盤來組建RAID系統,從而大大降低了RAID的“門檻”。從此,個人用戶也開始關注這項技術,因爲硬盤是現代個人計算機中發展最爲“緩慢”和最缺少安全性的設備,而用戶存儲在其中的數據卻常常遠超計算機的本身價格。在花費相對較少的情況下,RAID技術可以使個人用戶也享受到成倍的磁盤速度提升和更高的數據安全性,現在個人電腦市場上的IDE-RAID控制芯片主要出自HighPoint和Promise公司,此外還有一部分來自AMI公司(如表 2)。

面向個人用戶的IDE-RAID芯片一般只提供了RAID 0、RAID 1和RAID 0+1(RAID 10)等RAID規範的支持,雖然它們在技術上無法與商用系統相提並論,但是對普通用戶來說其提供的速度提升和安全保證已經足夠了。隨着硬盤接口傳輸率的不斷提高,IDE-RAID芯片也不斷地更新換代,芯片市場上的主流芯片已經全部支持ATA 100標準,而HighPoint公司新推出的HPT 372芯片和Promise最新的PDC20276芯片,甚至已經可以支持ATA 133標準的IDE硬盤。在主板廠商競爭加劇、個人電腦用戶要求逐漸提高的今天,在主板上板載RAID芯片的廠商已經不在少數,用戶完全可以不用購置 RAID卡,直接組建自己的磁盤陣列,感受磁盤狂飆的速度。

====================================================================================

RAID代表Redundant Array of Inexpensive (or Independent) Drive。RAID的優點在於三個方面即可用性(Availability)、容量(Capacity)及性能(Performance)。利用RAID技術於存儲系統的好處主要有以下三種

1、通過把多個磁盤組織在一起作爲一個邏輯卷提供磁盤跨越功能
2、通過把數據分成多個數據塊(Block)並行寫入/讀出多個磁盤以提高訪問磁盤的速度
3、通過鏡像或校驗操作提供容錯能力

根據實際情況選擇適當的RAID級別可以滿足用戶對存儲系統可用性、性能和容量的要求。常用的RAID級別有以下幾種:NRAID,JBOD,RAID0,RAID1,RAID0+1,RAID3,RAID5等。爲提高可靠性和性能,常使用RAID5和RAID(0+1)。下面分別簡要介紹各自的原理及特點:

NRAID即Non-RAID,所有磁盤的容量組合成一個邏輯盤,沒有數據塊分條(no block stripping)。NRAID不提供數據冗餘。要求至少一個磁盤。

JBOD代表Just a Bunch of Drives,磁盤控制器把每個物理磁盤看作獨立的磁盤,因此每個磁盤都是獨立的邏輯盤。JBOD也不提供數據冗餘。要求至少一個磁盤。

RAID0即Data Stripping數據分條技術。整個邏輯盤的數據是被分條(stripped)分佈在多個物理磁盤上,可以並行讀/寫,提供最快的速度,但沒有冗餘能力。要求至少兩個磁盤。我們通過RAID 0可以獲得更大的單個磁盤的容量,且通過對多個磁盤的同時讀取獲得更高的存取速度。RAID 0首先考慮的是磁盤的速度和容量,忽略了安全,只要其中一個磁盤住了問題,那麼整個陣列的數據都會不保了。

RAID 1,又稱鏡像方式,也就是數據的冗餘。在整個鏡像過程中,只有一半的磁盤容量是有效的(另一半磁盤容量用來存放同這一半完全一樣的數據)。同RAID 0相比,RAID 1首
先考慮的是安全性,容量減半、速度不變。爲了達到既高速又安全,出現了RAID 10(或者叫RAID 0+1),可以把RAID 10簡單地理解成由多個磁盤組成的RAID 0陣列再進行鏡像。

RAID 3和RAID 5都是校驗方式。RAID 3的工作方式是用一塊磁盤存放校驗數據。由於任何數據的改變都要修改相應的數據校驗信息,存放數據的磁盤有好幾個且並行工作,而存放校驗數據的磁盤只有一個,這就帶來了校驗數據存放時的瓶頸。RAID 5的工作方式是將各個磁盤生成的數據校驗切成塊,分別存放到組成陣列的各個磁盤中去,這樣就緩解了校驗數據存放時所產生的瓶頸問題,但是分割數據及控制存放都要付出速度上的代價。RAID 30、RAID 50相對應的工作方式可以像RAID 10那樣去理解。

由此可見,使用RAID功能組成陣列,總能做到單個磁盤無法做到的功能,所以說RAID卡+多磁盤對我們來說是充滿誘惑的。

================================================================================

RAID 0

  我們在前文中已經提到RAID分爲幾種不同的等級,其中,RAID 0是最簡單的一種形式。RAID 0可以把多塊硬盤連接在一起形成一個容量更大的存儲設備。最簡單的RAID 0技術只是提供更多的磁盤空間,不過我們也可以通過設置,使用RAID 0來提高磁盤的性能和吞吐量。RAID 0沒有冗餘或錯誤修復能力,但是實現成本是最低的。

  RAID 0最簡單的實現方式就是把幾塊硬盤串聯在一起創建一個大的卷集。磁盤之間的連接既可以使用硬件的形式通過智能磁盤控制器實現,也可以使用操作系統中的磁盤驅動程序以軟件的方式實現。圖示如下:



  在上述配置中,我們把4塊磁盤組合在一起形成一個獨立的邏輯驅動器,容量相當於任何任何一塊單獨硬盤的4倍。如圖中彩色區域所示,數據被依次寫入到各磁盤中。當一塊磁盤的空間用盡時,數據就會被自動寫入到下一塊磁盤中。

  這種設置方式只有一個好處,那就是可以增加磁盤的容量。至於速度,則與其中任何一塊磁盤的速度相同,這是因爲同一時間內只能對一塊磁盤進行I/O操作。如果其中的任何一塊磁盤出現故障,整個系統將會受到破壞,無法繼續使用。從這種意義上說,使用純RAID 0方式的可靠性僅相當於單獨使用一塊硬盤的1/4(因爲本例中RAID 0使用了4塊硬盤)。

  雖然我們無法改變RAID 0的可靠性問題,但是我們可以通過改變配置方式,提供系統的性能。與前文所述的順序寫入數據不同,我們可以通過創建帶區集,在同一時間內向多塊磁盤寫入數據。具體如圖所示:



  上圖中,系統向邏輯設備發出的I/O指令被轉化爲4項操作,其中的每一項操作都對應於一塊硬盤。我們從圖中可以清楚的看到通過建立帶區集,原先順序寫入的數據被分散到所有的四塊硬盤中同時進行讀寫。四塊硬盤的並行操作使同一時間內磁盤讀寫的速度提升了4倍。

  在創建帶區集時,合理的選擇帶區的大小非常重要。如果帶區過大,可能一塊磁盤上的帶區空間就可以滿足大部分的I/O操作,使數據的讀寫仍然只侷限在少數的一、兩塊硬盤上,不能充分的發揮出並行操作的優勢。另一方面,如果帶區過小,任何I/O指令都可能引發大量的讀寫操作,佔用過多的控制器總線帶寬。因此,在創建帶區集時,我們應當根據實際應用的需要,慎重的選擇帶區的大小。

  我們已經知道,帶區集可以把數據均勻的分配到所有的磁盤上進行讀寫。如果我們把所有的硬盤都連接到一個控制器上的話,可能會帶來潛在的危害。這是因爲當我們頻繁進行讀寫操作時,很容易使控制器或總線的負荷超載。爲了避免出現上述問題,建議用戶可以使用多個磁盤控制器。示意圖如下:



  這樣,我們就可以把原先控制器總線上的數據流量降低一半。當然,最好解決方法還是爲每一塊硬盤都配備一個專門的磁盤控制器。

RAID 1

  雖然RAID 0可以提供更多的空間和更好的性能,但是整個系統是非常不可靠的,如果出現故障,無法進行任何補救。所以,RAID 0一般只是在那些對數據安全性要求不高的情況下才被人們使用。

  RAID 1和RAID 0截然不同,其技術重點全部放在如何能夠在不影響性能的情況下最大限度的保證系統的可靠性和可修復性上。RAID 1是所有RAID等級中實現成本最高的一種,儘管如此,人們還是選擇RAID 1來保存那些關鍵性的重要數據。

  RAID 1又被稱爲磁盤鏡像,每一個磁盤都具有一個對應的鏡像盤。對任何一個磁盤的數據寫入都會被複制鏡像盤中;系統可以從一組鏡像盤中的任何一個磁盤讀取數據。顯然,磁盤鏡像肯定會提高系統成本。因爲我們所能使用的空間只是所有磁盤容量總和的一半。下圖顯示的是由4塊硬盤組成的磁盤鏡像,其中可以作爲存儲空間使用的僅爲兩塊硬盤(畫斜線的爲鏡像部分)。



  RAID 1下,任何一塊硬盤的故障都不會影響到系統的正常運行,而且只要能夠保證任何一對鏡像盤中至少有一塊磁盤可以使用,RAID 1甚至可以在一半數量的硬盤出現問題時不間斷的工作。當一塊硬盤失效時,系統會忽略該硬盤,轉而使用剩餘的鏡像盤讀寫數據。

  通常,我們把出現硬盤故障的RAID系統稱爲在降級模式下運行。雖然這時保存的數據仍然可以繼續使用,但是RAID系統將不再可靠。如果剩餘的鏡像盤也出現問題,那麼整個系統就會崩潰。因此,我們應當及時的更換損壞的硬盤,避免出現新的問題。

  更換新盤之後,原有好盤中的數據必須被複制到新盤中。這一操作被稱爲同步鏡像。同步鏡像一般都需要很長時間,尤其是當損害的硬盤的容量很大時更是如此。在同步鏡像的進行過程中,外界對數據的訪問不會受到影響,但是由於複製數據需要佔用一部分的帶寬,所以可能會使整個系統的性能有所下降。

  因爲RAID 1主要是通過二次讀寫實現磁盤鏡像,所以磁盤控制器的負載也相當大,尤其是在需要頻繁寫入數據的環境中。爲了避免出現性能瓶頸,使用多個磁盤控制器就顯得很有必要。下圖示意了使用兩個控制器的磁盤鏡像。

  

  使用兩個磁盤控制器不僅可以改善性能,還可以進一步的提高數據的安全性和可用性。我們已經知道,RAID 1最多允許一半數量的硬盤出現故障,所以按照我們上圖中的設置方式(原盤和鏡像盤分別連接不同的磁盤控制),即使一個磁盤控制器出現問題,系統仍然可以使用另外一個磁盤控制器繼續工作。這樣,就可以把一些由於意外操作所帶來的損害降低到最低程度。

  RAID 0+1

  單獨使用RAID 1也會出現類似單獨使用RAID 0那樣的問題,即在同一時間內只能向一塊磁盤寫入數據,不能充分利用所有的資源。爲了解決這一問題,我們可以在磁盤鏡像中建立帶區集。因爲這種配置方式綜合了帶區集和鏡像的優勢,所以被稱爲RAID 0+1。

  熱插拔

  一些面向高端應用的磁盤鏡像系統都可以提供磁盤的熱插拔功能。所謂熱插拔功能,就是允許用戶在不關閉系統,不切斷電源的情況下取出和更換損害的硬盤。如果沒有熱插拔功能,即使磁盤損壞不會造成數據的丟失,用戶仍然需要暫時關閉系統,以便能夠對硬盤進行更換。現在,使用熱插拔技術只要簡單的打開連接開關或者轉動手柄就可以直接取出硬盤,而系統仍然可以不間斷的正常運行。

  校驗

  RAID 3和RAID 5都分別使用了校驗的概念提供容錯能力。簡單的說,我們可以把校驗想象爲一種二進制的校驗和,一個可以告訴你其它所有字位是否正確的特殊位。

  在數據通信領域,奇偶校驗被用來確定數據是否被正確傳送。例如,對於每一個字節,我們可以簡單計算數字位1的個數,並在字節內加入附加校驗位。在數據的接收方,如果數字位1的個數爲奇數,而我們使用的又是奇數校驗的話,則說明該字節是正確的。同樣對偶數校驗也是如此。然而,如果數字位1的個數和校驗位的奇偶性不一致的話,則說明數據在傳送過程中出現了錯誤。

  RAID系統也採用了相似的校驗方法,可以在磁盤系統中創建校驗塊,校驗塊中的每一位都用來對其它關聯塊中的所有對應位進行校驗。

  在數據通訊領域,雖然校驗位可以告訴我們某個字節是否正確,但是無法告訴我們到底是哪一位出現了問題。這就是說我們可以檢測錯誤,但是不能改正錯誤。對於RAID,這是遠遠不夠的。固然錯誤的檢測非常重要,但是如果不能對錯誤進行修復,我們就無法提高整個系統的可靠性。

  舉個例子來說,假設我們發現校驗塊中第10個字節的第5位不正確。如果這個校驗塊包含的是另外8個數據塊的校驗信息,那麼哪一個數據塊纔是問題的罪魁禍首呢?也許你可能會想爲每一個數據塊都建立一個校驗塊就可以解決問題。但是這種方法很難實現。事實上,RAID主要是藉助磁盤控制器的錯誤報告檢測錯誤位置,並進行修復。如果磁盤控制器在讀取數據時沒有發出任何“抱怨”,那麼系統將會視該數據爲正確數據,繼續使用。

RAID 3

  RAID 3採用的是一種較爲簡單的校驗實現方式,使用一個專門的磁盤存放所有的校驗數據,而在剩餘的磁盤中創建帶區集分散數據的讀寫操作。例如,在一個由4塊硬盤構成的RAID 3系統中,3塊硬盤將被用來保存數據,第四塊硬盤則專門用於校驗。這種配置方式可以用3+1的形式表示,具體如圖:

   

  在上圖中,我們用相同的顏色表示使用同一個校驗塊的所有數據塊,斜線標出的部分爲校驗塊。校驗塊和所有對應的數據塊一起構成一個帶區。

  第四塊硬盤中的每一個校驗塊所包含的都是其它3塊硬盤中對應數據塊的校驗信息。RAID 3的成功之處就在於不僅可以象RAID 1那樣提供容錯功能,而且整體開銷從RAID 1的50%下降爲25%(RAID 3+1)。隨着所使用磁盤數量的增多,成本開銷會越來越小。舉例來說,如果我們使用7塊硬盤,那麼總開銷就會將到12.5%(1/7)。

  在不同情況下,RAID 3讀寫操作的複雜程度不同。最簡單的情況就是從一個完好的RAID 3系統中讀取數據。這時,只需要在數據存儲盤中找到相應的數據塊進行讀取操作即可,不會增加任何額外的系統開銷。

  當向RAID 3寫入數據時,情況會變得複雜一些。即使我們只是向一個磁盤寫入一個數據塊,也必須計算與該數據塊同處一個帶區的所有數據塊的校驗值,並將新值重新寫入到校驗塊中。例如,當我們向上圖中的綠色數據塊寫入數據時,必須重新計算所有3個綠色數據塊的校驗值,然後重寫位於第四塊硬盤的綠色校驗塊。由此我們可以看出,一個寫入操作事實上包含了數據讀取(讀取帶區中的關聯數據塊),校驗值計算,數據塊寫入和校驗塊寫入四個過程。系統開銷大大增加。

  我們可以通過適當設置帶區的大小使RAID系統得到簡化。如果某個寫入操作的長度恰好等於一個完整帶區的大小(全帶區寫入),那麼我們就不必再讀取帶區中的關聯數據塊計算校驗值。我們只需要計算整個帶區的校驗值,然後直接把數據和校驗信息寫入數據盤和校驗盤即可。

  到目前爲止,我們所探討的都是正常運行狀況下的數據讀寫。下面,我們再來看一下當硬盤出現故障時,RAID系統在降級模式下的運行情況。

  RAID 3雖然具有容錯能力,但是系統會受到影響。當一塊磁盤失效時,該磁盤上的所有數據塊必須使用校驗信息重新建立。如果我們是從好盤中讀取數據塊,不會有任何變化。但是如果我們所要讀取的數據塊正好位於已經損壞的磁盤,則必須同時讀取同一帶區中的所有其它數據塊,並根據校驗值重建丟失的數據。

  當我們更換了損壞的磁盤之後,系統必須一個數據塊一個數據塊的重建壞盤中的數據。整個過程包括讀取帶區,計算丟失的數據塊和向新盤寫入新的數據塊,都是在後臺自動進行。重建活動最好是在RAID系統空閒的時候進行,否則整個系統的性能會受到嚴重的影響。

  RAID 3的性能問題

  除了我們在上文討論過的有關數據寫入和降級模式的問題之外,在使用RAID 3的過程中還有其他一些性能上的問題需要引起我們的注意。RAID 3所存在的最大一個不足同時也是導致RAID 3很少被人們採用的原因就是校驗盤很容易成爲整個系統的瓶頸。

  我們已經知道RAID 3會把數據的寫入操作分散到多個磁盤上進行,然而不管是向哪一個數據盤寫入數據,都需要同時重寫校驗盤中的相關信息。因此,對於那些經常需要執行大量寫入操作的應用來說,校驗盤的負載將會很大,無法滿足程序的運行速度,從而導致整個RAID系統性能的下降。鑑於這種原因,RAID 3更加適合應用於那些寫入操作較少,讀取操作較多的應用環境,例如數據庫和WEB服務器等。

  RAID 5

  RAID 3所存在的校驗盤的性能問題使幾乎所有的RAID系統都轉向了RAID 5。在運行機制上,RAID 5和RAID 3完全相同,也是由同一帶區內的幾個數據塊共享一個校驗塊。

  RAID 5和RAID 3的最大區別在於RAID 5不是把所有的校驗塊集中保存在一個專門的校驗盤中,而是分散到所有的數據盤中。RAID 5使用了一種特殊的算法,可以計算出任何一個帶區校驗塊的存放位置。具體如圖所示:

  

  注意圖中的校驗塊已經被分散保存在不同的磁盤中,這樣就可以確保任何對校驗塊進行的讀寫操作都會在所有的RAID磁盤中進行均衡,從而消除了產生瓶頸的可能。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章