《前言》

  前陣子,米克的好朋友在找RAID的資料,既然他有這種需求,我想可能很多人也會有類似的需求吧。 不過,米克不是想賣RAID卡,也不是要提出新的RAID方法,正所謂「一理通,百理明」, 在這篇文章中,米克要來談談RAID的觀念,有了正確的觀念之後,就不會被廣告騙的團團轉啦。
  雖然在「硬碟選購」中,米克有提過RAID,但是在這裡,米克將更詳盡地記錄米克對RAID的認知。

  什麼是RAID? RAID的說法有蠻多的,剛開始時,RAID是Redundent Array of Inexpensive Disks,翻成 中文就是「便宜磁碟的冗餘陣列」。但是到了今日,我們把RAID定義為Redundent Array of Independent Disks ,翻成中文叫做「獨立磁碟冗餘陣列」。 為什麼呢?這是因為在多年前,在磁碟貴的要命的時代,磁碟的容量的價格並不是線性的,大容量磁碟的售價 可能是小容量磁碟的好幾倍!所以,RAID在當時是相對於SLED(Single Large Expensive Disk, 單一大型昂貴磁碟)[請參照高立圖書有限公司出版的「計算機組織與結構」一書第168頁, 作者是William Stallings,譯者是林獻堂]。可是時至今日,已經沒什麼大型昂貴磁碟了,在許多伺服器系統 中,也是使用RAID來增加效益。因此,米克認為,把RAID定義為Redendent Array of Independent Disks是個 不錯的決定。

  RAID的模式(Level)有很多種,在許多研究論文中都可以看到有人對RAID提出新的看法與新的演算法,不過最常見 的有7種[參照同一本書],而這7種模式中,我們平常有接觸到的模式是RAID 0、RAID 1、RAID 3、RAID 5。 在以前,RAID通常是應用在SCSI硬碟的場合,但是現在,為了IDE硬碟所推出的RAID在市面上愈來愈多。但是, 企業界所重視的是RAID所提供的「安全」,個人使用者重視的卻是「速度」。

RAID 0

  RAID 0 又稱為Striping,要翻成中文則是「帶狀」或「條紋」。在許多文章中,RAID 0都被視為「 不是RAID的RAID」,因為它完全不具有安全性的提昇功能,也不具有Redundent的功能。

  簡單的說,RAID 0是將所有的磁碟機當成一台磁碟機來使用,資料則是呈「帶狀」的存在各個磁碟機中。 例如四台40GB的硬碟機,經由RAID之後,會被當成是一部160GB的硬碟來使用。 想像一下資料被分散地存放在許多磁碟的情形,當我們要讀取資料時,如果剛好資料在兩台不同的磁碟 中,那麼這兩台磁碟就會同時傳輸資料,若資料分佈在四台磁碟中,那麼這四台磁碟就會同時傳輸,或 者說,四台磁碟機採平行方式處理資料。

  可以想見,速度可以有效的提昇。但是,並不是說裝二台磁碟就可以有二倍的傳輸速度、裝三台有三倍或裝 四台有四倍,我們只能說,多磁碟的表現能比少磁碟要來的好一點,尤其是對於連續性資料的處理上。

  那麼,既然RAID 0這麼好,那麼缺點呢?就如同前面說過的,「將所有的磁碟機當成一台磁碟機來使用」, 所以,你能想像若其中一台磁碟機故障的情形嗎?沒錯,整個RAID系統都要重做,因為存放在那台升天的磁碟 的資料不見了,其它磁碟的資料也跟著變成垃圾,所以必須重做整個系統,也就是重灌啦。舉個例子,原來的 資料叫做「mick」,分別存在四台磁碟中,若第三台磁碟故障了,那麼資料只剩下「mik」,完全不能用!

  在使用RAID 0時,最好所有的磁碟機都是一樣的,不然,可能在讀取與寫入時,有的磁碟跑的快、有的 磁碟跑的慢而造成錯誤或不穩定。

RAID 1

  相較於RAID 0的高效能表現,RAID 1就差多了。但是相較於RAID 1的安全性,RAID 0是遠遠不及。

  RAID 1又叫做Mirroring,也就是「鏡射」。和RAID 0一樣,RAID 1讓多台磁碟變成一顆, 但是容量只有一台的大小。另外一個最重要的,RAID 1只能使用在「偶數」個磁碟上。為什麼呢? 因為RAID 1的原理就是,將資料完整地複製在兩部磁碟中。所以若你使用二部磁碟,你只能用一部磁碟的 容量,這是很笨的事情,但是卻也是最安全的方式!因為若你的硬碟掛點了,資料可以從另一部硬碟還原 回來,於是你的資料不會不見,而且復原的時間很快。而這種使用時「多出來的用不到的磁碟空間」, 就是所謂的Redendent,也就是冗餘的、多餘的,因為多餘,所以需要的時候才不會沒有。

  在使用二部磁碟機架設RAID 1時,在你的感受裡,你只有裝一部磁碟,那麼,這兩部磁碟是以那一部為主 呢?答案是:慢的那一顆。為什麼?因為如果主要的磁碟是跑的比較快的那一部,那麼資料在存取時,跑 不快的磁碟根本追不上跑的快的磁碟,又怎麼能確保二部磁碟可以同時擁有同樣的資料?所以,用慢的磁碟是 有其考量的。

RAID 0+1

  為了兼顧安全性與效率,RAID 0與RAID 1的結合是個不錯的選擇,這種方法被稱為RAID 10或RAID 01或RAID 0+1或是 RAID 1+0,反正就是1和0在變來變去而已,然而,這種RAID方法需要至少四部磁碟機才辦的到, 假設這四部磁碟叫「武林至尊」、「寶刀屠龍」、「倚天不出」與「誰與爭鋒」,其中兩部磁碟( 「武林至尊」及「寶刀屠龍」)做RAID 0,於是合成一部磁碟機叫做「武林至尊,寶刀屠龍」, 而另外兩部磁碟機(「倚天不出」與「誰與爭鋒」)則用來當做「武林至尊,寶刀屠龍」的備份, 叫做「倚天不出,誰與爭鋒」,這四部磁碟使用起來就是一部磁碟機,叫 「武林至尊,寶刀屠龍,倚天不出,誰與爭鋒」!

  缺點呢?這種方法的缺點就是會被人當成凱子,因為你一次買了四顆硬碟。

RAID 2

  RAID 2與RAID 3可以視為一組,因為他們的原理很類似,都是以「平行處理」為原則。

  RAID 2是可以提供安全性的。不像RAID 1一樣,使用那麼多的空間來提供安全性,RAID 2使用漢明碼來做為 資料復原與偵錯的工具,所有的磁碟機中,拿個幾部出來存漢明碼,其它的磁碟才是我們能使用到的磁碟空間。 如果資料發生錯誤,漢明碼可以偵測出來,如果發生錯誤的位元只有一個,漢明碼甚至可以進行修正。

  漢明碼如何與資料進行對應?這就得靠一點技巧了。還記得前面提過的「帶狀」嗎?在RAID 2與RAID 3裡, 他們把這些「帶」設的非常小,有多小?就只一個位元而已!所以資料的偵錯碼是一個位元一個位元在存的, 出問題的時候,當然就可以一個位元一個位元的救回來。

  RAID 2很少見,這是因為他所使用的冗餘方式需要比較多的磁碟。在William Stallings的書中提到,假設 我們現在有七顆磁碟,使用RAID 2時,我們只能用到其中四部磁碟的容量,在Kintronics 的 Whitepaper on RAID網頁中則是 說,若我們使用39部磁碟機,則我們只能使用到32部磁碟機的容量,而另外的7部磁碟則是用來存漢明碼。可是! 可是可是!在同一個網頁中,卻也說在使用N部磁碟機的場合,RAID 2可以使用N-1部磁碟機的容量!

  我也被搞混了。不過呢,在許多其它的文獻中都提到一件事,RAID 2是個幾乎沒有人在使用的系統,有的地方 甚至直接省略RAID 2不提,所以,我們暫且不求甚解吧。

RAID 3

  RAID 3使用的偵錯方式是同位元檢查(Parity Check),這種方法不會比漢明碼要來的好,他只能偵錯,不能 更正錯誤,但是他比較簡單(比較沒那麼複雜),而且,如果一部磁碟動不動就出現二個位元的錯誤,那麼這 部磁碟也太扯了,所以RAID 2雖然強,卻無用武之地。

  RAID 3將同位元碼存在同一部磁碟機中,當RAID系統中有某一部磁碟掛點了,那麼經由簡單的計算,RAID 3 可以把資料「算」回來。不過,為了讓資料能「算」,在磁碟存取資料時,當然得經過驗証的程序,效能一定 會有稍許的下降,但是並不會有太大的感覺。

  如果現在我們安裝了四部磁碟,那麼我們可以用的磁碟空間就是三部磁碟的空間。同位元碼儲存的位置我倒 是沒有資料,不過在William Stalling的書中稱其為「位元交錯式同位元」,我的想法是,同位元是交錯式地儲 存在專門儲存同位元碼的磁碟中。

  現在米克來談談「同位元碼」是怎麼算的。同位元碼使用的是一種叫「互斥或(exclusive OR,簡寫成XOR)」 的技巧,在輸入的位元「只有一個是1」的時候,XOR的運算結果才會是1,我們看下面的表:

Input 1Input 2"XOR" Output
000
101
011
110
  XOR的特性是,A(XOR)B(XOR)B=A,不相信嗎?可以自己算算看,不過用看的就可以看出個大概了,有沒有發現, 上面的表格中,每個橫列都是兩個1一個0?所以若我們已經有A(XOR)B的結果,而且存了起來,如果現在A不見了, 也能將A給「算」回來。現在呢,我們舉個實際的例子,假設二筆資料是1100與0101,那麼他們的同位元碼就 是1001:
1100
0101

1001
  假設資料0101不見了,那麼我們就可以進行運算:
1100
1001

0101
  這樣就把不見的資料「算」回來啦!

RAID 4

  很多地方都把RAID 4表示成和RAID 3相似的模式,但是他們還是有差異存在。前面提過的RAID 0、RAID 2與 RAID 3都是把資料以「帶狀」儲存,但是在RAID 4、RAID 5與RAID 6上,資料是以「塊狀(Block)」來存的。

  塊狀有什麼好處?「塊狀」其實就是比較大條的「帶狀」嘛,但是在儲存同位元資料的磁碟上, 既然同位元碼是從其它磁碟上的資料算出來的,那麼,資料放在其它磁碟的那裡,同位元碼就存 在專門儲存同位元碼的磁碟的相同位置啦,舉例來說,假設我們有四部磁碟,第一部磁碟的第一個「塊」是在第 一個儲放位址,第二部磁碟的第一個「塊」是在第二部磁碟的第一個儲放位址,第三部磁碟的第一個「塊」存放 的地方當然也在第三部磁碟的第一個儲放位址,這三部磁碟的三個「塊」所算出來的同位元碼,當然也自成一 「塊」,然後存在第四部磁碟的第一個儲放位址囉。

  RAID 4、RAID 5與RAID 6可以視為一組,特點除了塊狀的儲存外,還有一點就是他們都被稱為「獨立存取」 。什麼意思呢?就是指這種RAID的模式可以讓所有的磁碟機獨立運作,磁碟被分割成「塊狀」之後,在處理要求 時,速度會比較快,但是傳輸速率反而降低;舉例來說,郵差要送掛號信給四戶人家,這四戶家庭各有十個人, 那麼,郵差叫一聲「林米克掛號!劉米克掛號!鄒米克掛號!許米克掛號」之後,這四戶家庭會自已去把人叫出 來,然後郵差要找的四個人就同時跑出來了。

  和RAID 3一樣,RAID 4因為在存取時都要去動到同位元磁碟,所以效率上會有影響。而RAID 4也蠻不常見的。

RAID 5

  RAID 5則是動到同位元磁碟的腦筋去了。既然要去動到同位磁碟會影速度,那麼,乾脆就把所有的同位元碼 拆開放在各個磁碟吧。這樣子一來,在動到同位元碼時,並不是由同一部磁碟負責,可以增加效率。

RAID 6

  RAID 6則是把RAID 5增強安全性的功能,它除了RAID 5原有的同位元檢查碼之外,再新增一個檢查碼。不過 ,安全歸安全,這種模式會在寫入資料時同時動到兩個地方:同位元檢查碼與新的檢查碼,所以效率上的影響又 比其它的RAID模式再大上一些。


  好啦,米克就談到這邊,相信大家對RAID已經有基礎的觀念了。RAID的主要目的會因為你所應用的場合而異 ,在講求速度的場合與講究安全性的場合,有相對應的RAID模式可以選擇,如何選擇,就得靠你自己的判斷。不 過,米克在這裡要提醒你,RAID 3與RAID 5雖然常見,但是因為要增加同位元運算等等演算法,所以有提供這種 模式的RAID卡都比較貴,而RAID 0與RAID 1則是因為實作上相對的比較簡單,所以比較便宜,甚至可以用軟體來 做,Windows 2000與LINUX都可以用軟體做RAID,不過米克沒有親自試過,不能保證效能好不好。
  有什麼建議或是覺得米克的觀念有誤,請寫信告訴我。

9/15/2002
回上一頁