Raid

**容錯式磁碟陣列**（**RAID**, **R**edundant **A**rray of **I**ndependent **D**isks），舊稱**容錯式廉價磁碟陣列**（**R**edundant **A**rray of **I**nexpensive **D**isks），簡稱**磁碟陣列**。利用虛擬化儲存技術把多個硬碟組合起來，成為一個或多個硬碟陣列組，目的為提升效能或資料冗餘，或是兩者同時提升。

在運作中，取決於 RAID 層級不同，資料會以多種模式分散於各個硬碟，RAID 層級的命名會以 RAID 開頭並帶數字，例如：RAID 0、RAID 1、RAID 5、RAID 6、RAID 7、RAID 01、RAID 10、RAID 50、RAID 60。每種等級都有其理論上的優缺點，不同的等級在兩個目標間取得平衡，分別是增加資料可靠性以及增加記憶體（群）讀寫效能。

簡單來說，RAID 把多個硬碟組合成為一個邏輯硬碟，因此，作業系統只會把它當作一個實體硬碟。RAID 常被用在伺服器電腦上，並且常使用完全相同的硬碟作為組合。由於硬碟價格的不斷下降與 RAID 功能更加有效地與主機板整合，它也成為普通使用者的一個選擇，特別是需要大容量儲存空間的工作，如：視訊與音訊製作。

## 磁碟陣列比較表

1. n 代表硬碟總數 
2. JBOD（Just a Bunch Of Disks）指將數個物理硬碟，在操作系統中合併成一個邏輯硬碟，以直接增加容量 
3. 依不同 RAID 廠商實作演算法對於效能表現會有不同，效能公式僅供參考 
4.RAID 10、50、60 依實作 Parity 不同公式也不同 

## 標準 RAID

### RAID 0

RAID 0 亦稱為帶區卷。它將兩個以上的磁碟並聯起來，成為一個大容量的磁碟。在存放資料時，分段後分散儲存在這些磁碟中，因為讀寫時都可以並列處理，所以在所有的級別中，RAID 0 的速度是最快的。但是 RAID 0 既沒有冗餘功能，也不具備容錯能力，如果一個磁碟（物理）損壞，所有資料都會遺失，危險程度與 JBOD 相當。

### RAID 1

兩組以上的 N 個磁碟相互作鏡像，在一些多執行緒作業系統中能有很好的讀取速度，理論上讀取速度等於硬碟數量的倍數，與 RAID 0 相同。另外寫入速度有微小的降低。只要一個磁碟正常即可維持運作，可靠性最高。其原理為在主硬碟上存放資料的同時也在鏡像硬碟上寫一樣的資料。當主硬碟（物理）損壞時，鏡像硬碟則代替主硬碟的工作。因為有鏡像硬碟做資料備份，所以 RAID 1 的資料安全性在所有的 RAID 級別上來說是最好的。但無論用多少磁碟做 RAID 1，僅算一個磁碟的容量，是所有 RAID 中磁碟利用率最低的一個級別。

如果用兩個不同大小的磁碟建 RAID 1，可用空間為較小的那個磁碟，較大的磁碟多出來的空間也可以分割成一個區來使用，不會造成浪費。

　
: ${\begin{aligned}Size&=\min \left(S_{1},S_{2},S_{3}\dots \right)\end{aligned}}$

RAID 1 沒有校驗機制。用兩個磁碟組成 RAID 1 陣列，如果兩個硬碟上的資料出現差異，RAID 1 會不知道該相信哪一個硬碟，這種情形稱作大腦分裂。事實上，RAID 1 的磁碟數量越多，越有可能其中某個磁碟的資料變得不一致（但仍然工作），RAID 1 隻會從第一個工作的硬碟里提供資料，沒有辦法檢測到底哪個硬碟的資料不對。

### RAID 2

這是 RAID 0 的改良版，以漢明碼（Hamming Code）的方式將資料進行編碼後分割為獨立的位元，並將資料分別寫入硬碟中。因為在資料中加入錯誤修正碼（ECC，Error Correction Code），所以資料整體的容量會比原始資料大一些。

RAID 2 最少要三台磁碟機方能運作。

### RAID 3

採用 Bit－interleaving（資料交錯儲存）技術，它需要通過編碼再將資料位元分割後分別存在硬碟中，而將相同位元檢查後單獨存在一個硬碟中，但由於資料內的位元分散在不同的硬碟上，因此就算要讀取一小段資料資料都可能需要所有的硬碟進行工作，所以這種規格比較適於讀取大量資料時使用。

### RAID 4

採用塊交織技術（Block interleaving）。它與 RAID 3 不同的是它在分割時是以區塊為單位分別存在硬碟中，但每次的資料存取都必須從同位元檢查的那個硬碟中取出對應的同位元資料進行核對，由於過於頻繁的使用，所以對硬碟的損耗可能會提高。

### RAID 5

RAID 5 是一種儲存效能、資料安全和儲存成本兼顧的儲存解決方案。它使用的是 Disk Striping（硬碟分割）技術。

RAID 5 使用「奇偶校驗位」。與 RAID-4 一樣，有效大小是 N-1 個磁碟的大小。
然而，由於奇偶校驗資訊也在 N 個驅動器之間均勻分布，因此避免了每次寫入都必須更新奇偶校驗磁碟的瓶頸。防止單個磁碟故障，而且存取速度快。

RAID 5 不是對儲存的資料進行備份，而是把資料和相對應的奇偶校驗資訊儲存到組成 RAID 5 的各個磁碟上，並且奇偶校驗資訊和相對應的資料分別儲存於不同的磁碟上。當 RAID 5 的一個磁碟資料發生損壞後，可以利用剩下的資料和相應的奇偶校驗資訊去恢復被損壞的資料。RAID 5 可以理解為是 RAID 0 和 RAID 1 的折衷方案。RAID 5 可以為系統提供資料安全保障，但保障程度要比鏡像低而磁碟空間利用率要比鏡像高。RAID 5 具有和 RAID 0 相近似的資料讀取速度，只是因為多了一個奇偶校驗資訊，

寫入資料的速度相對單獨寫入一塊硬碟的速度略慢，若使用「回寫快取」可以讓效能改善不少。同時由於多個資料對應一個奇偶校驗資訊，RAID 5 的磁碟空間利用率要比 RAID 1 高，儲存成本相對較便宜。

冗餘磁碟陣列在最可能發生的單個磁碟故障情況下提供保護，在這種情況下，單個磁碟只是停止工作。這消除了構建大型 EIDE（增強型 IDE） 磁碟陣列的主要障礙。

RAID-5 並不能完全防止其他類型的磁碟故障。 RAID-5 將在單個磁碟停止工作但導致整個 EIDE 匯流排發生故障（或整個 EIDE 控制器卡發生故障）但只是暫時停止執行的情況下提供有限的保護。這將暫時禁用整個 RAID-5 陣列。如果更換壞盤解決了問題，即故障沒有永久損壞其他磁碟上的資料，那麼 RAID-5 陣列將正常恢復。
相似的如果只是控制器卡損壞，則更換它將使 RAID-5 陣列正常恢復。
但是，如果不止一個磁碟損壞，尤其是檔案或目錄結構資訊損壞，整個 RAID-5 陣列就會損壞。
剩餘的故障模式是磁碟正在傳送損壞的資料。 RAID-5 沒有對此原生的保護；但是，可以在事件檔頭中內建對資料的縱向奇偶校驗，例如校驗和記錄計數 (CRC)，以標記問題。

　
: ${\begin{aligned}Size&=(N-1)\times \min \left(S_{1},S_{2},\dots ,S_{N}\right)\end{aligned}}$

### RAID 6

與 RAID 5 相比，RAID 6 增加第二個獨立的奇偶校驗資訊塊。兩個獨立的奇偶系統使用不同的演算法，資料的可靠性非常高，任意兩塊磁碟同時失效時不會影響資料完整性。RAID 6 需要分配給奇偶校驗資訊更大的磁碟空間和額外的校驗計算，相對於 RAID 5 有更大的 IO 操作量和計算量，其「寫效能」強烈取決於具體的實現方案，因此 RAID 6 通常不會通過軟體方式來實現，而更可能通過硬體方式實現。

同一陣列中最多容許兩個磁碟損壞。更換新磁碟後，資料將會重新算出並寫入新的磁碟中。

依照設計理論，RAID 6 必須具備四個以上的磁碟才能生效。可使用的容量為硬碟總數減去 2 的差，乘以最小容量，公式為：

　
: ${\begin{aligned}Size&=(N-2)\times \min \left(S_{1},S_{2},S_{3},\dots ,S_{N}\right)\end{aligned}}$

同理，資料保護區域容量則為最小容量乘以 2。

RAID 6 在硬體磁碟陣列卡的功能中，也是最常見的磁碟陣列等級。

#### 實現

Storage Networking Industry Association (SNIA) 對於 RAID 6 的定義是："在任意兩塊磁碟同時失效的情況下，仍然能夠對 RAID 中的所有虛擬磁碟執行讀寫操作的 RAID 實現。迄今已經有：(奇偶和里德 - 所羅門) 雙校驗、正交雙奇偶校驗和對角奇偶校驗等若干方法用於實現 RAID 6。"

為了達到容忍任意兩塊磁碟失效的目的，需要計算兩種不同的綜合解碼。其中之一是 P，可以象 RAID 5 那樣經過簡單的互斥或計算獲得，而另一個不同的綜合編碼則比較複雜，需要利用體論來解決。

要解決這個問題，需要引入一個 $m=2^{k}$ 的伽羅瓦體，對於一個合適的 k 次不可約多項式 $p(x)$ ， $GF(m)\cong F_{2}[x]/(p(x))$ 。一塊資料可以二進位形式記作 $d_{k-1}d_{k-2}...d_{0}$ ，其中 $d_{i}$ 是 0 或者 1，對應著伽羅瓦體中的元素 $d_{k-1}x^{k-1}+d_{k-2}x^{k-2}+...+d_{1}x+d_{0}$ 。令 $D_{0},...,D_{n-1}\in GF(m)$ 對應磁碟條帶中的資料，以這種方式編碼成體中的元素（實際上可能會切分成位元組大小的塊）。如果 $g$ 是體的某個生成元，且 $\oplus $ 表示體中的加法、並列表示體中的乘法的話，則 $\mathbf {P} $ 和 $\mathbf {Q} $ 的計算可以表示為 ( $n$ 表示資料磁碟的編號)：

　
: $\mathbf {P} =\bigoplus _{i}{D_{i}}=\mathbf {D} _{0}\;\oplus \;\mathbf {D} _{1}\;\oplus \;\mathbf {D} _{2}\;\oplus \;...\;\oplus \;\mathbf {D} _{n-1}$

　
: $\mathbf {Q} =\bigoplus _{i}{g^{i}D_{i}}=g^{0}\mathbf {D} _{0}\;\oplus \;g^{1}\mathbf {D} _{1}\;\oplus \;g^{2}\mathbf {D} _{2}\;\oplus \;...\;\oplus \;g^{n-1}\mathbf {D} _{n-1}$

對於電腦科學知識背景的人士，比較容易理解的方法是把 $\oplus $ 看作是互斥或運算、把 $g^{i}$ 看作對一塊資料進行線性回饋移位暫存器操作的結果。於是上述公式中 **P** 的計算就是對每個條帶進行互斥或。這是因為對於任何二階有限體而言，加法其實就是互斥或。**Q** 的計算則是對每個條帶進行移位元運算之後的結果進行互斥或。

如果一塊資料磁碟失效了，資料可以同 RAID 5 一樣重新計算出來。如果兩塊資料磁碟或者一塊資料磁碟和一塊包含 P 的磁碟失效了，資料可以通過 **P** 和 **Q**（或者僅通過 **Q**）通過更加複雜的過程重新計算出來，計算的過程需要用到體論，非常複雜。而如果 $D_{i}$ 和 $D_{j}$ ( $i\neq j$ ) 兩塊資料盤遺失了，使用 $D$ 的其他資訊可以求出 $A$ 和 $B$ ，而 $D_{i}\oplus D_{j}=A$ 和 $g^{i}D_{i}\oplus g^{j}D_{j}=B$ ：

　
: $A=\bigoplus _{\ell :\;\ell \not =i\;\mathrm {and} \;\ell \not =j}{D_{\ell }}=\mathbf {P} \;\oplus \;\mathbf {D} _{0}\;\oplus \;\mathbf {D} _{1}\;\oplus \;\dots \;\oplus \;\mathbf {D} _{i-1}\;\oplus \;\mathbf {D} _{i+1}\;\oplus \;\dots \;\oplus \;\mathbf {D} _{j-1}\;\oplus \;\mathbf {D} _{j+1}\;\oplus \;\dots \;\oplus \;\mathbf {D} _{n-1}$

　
: $B=\bigoplus _{\ell :\;\ell \not =i\;\mathrm {and} \;\ell \not =j}{g^{\ell }D_{\ell }}=\mathbf {Q} \;\oplus \;g^{0}\mathbf {D} _{0}\;\oplus \;g^{1}\mathbf {D} _{1}\;\oplus \;\dots \;\oplus \;g^{i-1}\mathbf {D} _{i-1}\;\oplus \;g^{i+1}\mathbf {D} _{i+1}\;\oplus \;\dots \;\oplus \;g^{j-1}\mathbf {D} _{j-1}\;\oplus \;g^{j+1}\mathbf {D} _{j+1}\;\oplus \;\dots \;\oplus \;g^{n-1}\mathbf {D} _{n-1}$

把 $B$ 的等式的兩端同時乘以 $g^{n-i}$ ，並加到前面的等式中就可以得到 $(g^{n-i+j}\oplus 1)D_{j}=g^{n-i}B\oplus A$ ，就可以求出 $D_{j}$ ， 進一步就可以求出 $D_{i}$ 。

與計算 **P** 相比，對 **Q** 的計算要更加消耗 CPU。所以軟體方式實現的 RAID 6 對於系統效能會有明顯的影響，而硬體方案則相對複雜。

## 混合 RAID

### JBOD

JBOD（Just a Bunch Of Disks）在分類上，JBOD 並不是 RAID 的等級。由於並沒有規範，市場上有兩類主流的做法

1. 使用單獨的連結埠如 SATA、USB 或 1394 同時控制多個各別獨立的硬碟，使用這種模式通常是較高階的裝置，還具備有 RAID 的功能，不需要依靠 JBOD 達到合併邏輯磁區的目的。
2. 只是將多個硬碟空間合併成一個大的邏輯硬碟，沒有錯誤備援機制。

資料的存放機制是由第一顆硬碟開始依序往後存放，即作業系統看到的是一個大硬碟（由許多小硬碟組成的）。但如果硬碟損毀，則該顆硬碟上的所有資料將無法救回。若第一顆硬碟損壞，通常無法作救援（因為大部分檔案系統將磁碟分割表（partition table）存在磁碟前端，即第一顆），失去磁碟分割表即失去一切資料，若遭遇磁碟陣列資料或硬碟出錯的狀況，危險程度較 RAID 0 更劇。它的好處是不會像 RAID 0，每次存取都要讀寫全部硬碟。但在部分的 JBOD 數據恢復實踐中，可以恢復未損毀之硬碟上的數據。同時，因為每次讀寫操作只作用於單一硬碟，JBOD 的傳輸速率與 I/O 表現均與單顆硬碟無異。

　
: ${\begin{aligned}{\text{Size}}&={\text{sum of all discs}}\end{aligned}}$

### RAID 7

RAID 7 並非公開的 RAID 標準，而是 Storage Computer Corporation 的專利硬體產品名稱，RAID 7 是以 RAID 3 及 RAID 4 為基礎所發展，但是經過強化以解決原來的一些限制。另外，在實作中使用大量的快取記憶體以及用以實現非同步陣列管理的專用即時處理器，使得 RAID 7 可以同時處理大量的 IO 要求，所以效能甚至超越了許多其他 RAID 標準的實作產品。但也因為如此，在價格方面非常的高昂。

### RAID 10/01

RAID 10 是先做鏡像卷 RAID 1 將所有硬碟分為兩組，再做 RAID 0 執行條帶化操作分割資料 ，視為以 RAID 1 作為最低組合，然後將每組 RAID 1 視為一個「硬碟」組合為 RAID 0 運作。

RAID 01 則是跟 RAID 10 的程式相反，是先將資料分割。再做鏡像卷 RAID 1 它將所有的硬碟分為兩組，每組各自構成為 RAID 0 作為最低組合，而將兩組硬碟組合為 RAID 1 運作。

當 RAID 10 有一個硬碟受損，其餘硬碟會繼續運作。RAID 01 只要有一個硬碟受損，同組 RAID 0 的所有硬碟都會停止運作，只剩下其他組的硬碟運作，可靠性較低。如果以六個硬碟建 RAID 01，鏡像再用三個建 RAID 0，那麼壞一個硬碟便會有三個硬碟離線。因此，RAID 10 遠較 RAID 01 常用，零售主機板絕大部份支援 RAID 0/1/5/10，但不支援 RAID 01。

### RAID 50

RAID 5 與 RAID 0 的組合，先作 RAID 5，再作 RAID 0，也就是對多組 RAID 5 彼此構成 Stripe 存取。由於 RAID 50 是以 RAID 5 為基礎，而 RAID 5 至少需要 3 顆硬碟，因此要以多組 RAID 5 構成 RAID 50，至少需要 6 顆硬碟。以 RAID 50 最小的 6 顆硬碟組態為例，先把 6 顆硬碟分為 2 組，每組 3 顆構成 RAID 5，如此就得到兩組 RAID 5，然後再把兩組 RAID 5 構成 RAID 0。

RAID 50 在底層的任一組或多組 RAID 5 中出現 1 顆硬碟損壞時，仍能維持運作，不過如果任一組 RAID 5 中出現 2 顆或 2 顆以上硬碟損毀，整組 RAID 50 就會失效。

RAID 50 由於在上層把多組 RAID 5 構成 Stripe，效能比起單純的 RAID 5 高，容量利用率比 RAID5 要低。比如同樣使用 9 顆硬碟，由各 3 顆 RAID 5 再組成 RAID 0 的 RAID 50，每組 RAID 5 浪費一顆硬碟，利用率為 (1-3/9)，RAID 5 則為 (1-1/9)。

### RAID 53

它擁有一個鏡像條帶陣列，硬碟裡其中一個條帶就是一個是由 3 組以上的 RAID 5 組成 RAID 3 硬碟陣列。

### RAID 60

RAID 6 與 RAID 0 的組合：先作 RAID 6，再作 RAID 0。換句話說，就是對兩組以上的 RAID 6 作 Stripe 存取。RAID 6 至少需具備 4 顆硬碟，所以 RAID 60 的最小需求是 8 顆硬碟。

由於底層是以 RAID 6 組成，所以 RAID 60 可以容許任一組 RAID 6 中損毀最多 2 顆硬碟，而系統仍能維持運作；不過只要底層任一組 RAID 6 中損毀 3 顆硬碟，整組 RAID 60 就會失效，當然這種情況的機率相當低。

比起單純的 RAID 6，RAID 60 的上層透過結合多組 RAID 6 構成 Stripe 存取，因此效能較高。不過使用門檻高，而且容量利用率低是較大的問題。

## 應用

RAID2、3、4 較少實際應用，因為 RAID0、RAID1、RAID5、RAID6 和混合 RAID 已經涵蓋所需的功能，因此 RAID2、3、4 大多只在研究領域有實作，而實際應用上則以 RAID0、RAID1、RAID5、RAID6 和混合 RAID 為主。

RAID4 有應用在某些商用機器上，像是 NetApp 公司設計的 NAS 系統就是使用 RAID4 的設計概念。

## 種類

根據實現模式，分為軟體和硬體兩種：

**軟體磁碟陣列（Software RAID）：**
: 主要由 CPU 處理陣列儲存作業，缺點為耗損較多 CPU 資源運算 RAID，優點則是價格偏低。分類有 3 種：
* 基於主機板的磁碟陣列：只需要主機板支援即可（通常是晶片組內建的 RAID 功能，如 Intel Matrix RAID，Intel Rapid Storage Technology），不需要任何磁碟陣列卡。若主機板損壞，可能難以購買同款主機板重建 RAID。
* 硬體輔助磁碟陣列（Hardware-Assisted RAID）：需要一張基於 Fake RAID 的 RAID 卡，以及廠商所提供的驅動程式，但此類 RAID 卡仍然通過 CPU 進行運算。這款 RAID 較易遷移到其他電腦。RAID 功能靠執行於作業系統的廠商驅動程式和 CPU 運算提供。
* 作業系統的 RAID 功能：如 Linux、FreeBSD、Windows Server 等作業系統內建 RAID 功能。

**硬體磁碟陣列（Hardware RAID）**
: RAID 卡上內建處理器，不需要伺服器的 CPU 運算。優點是讀寫效能最快，不佔用伺服器資源，可用於任何作業系統，也能在系統斷電後，透過備份電池模組（BBU, Backup Battery Unit）以及非揮發性記憶體（NVRAM）將硬碟讀寫日誌（Journal）包含的剩餘讀寫作業先記錄在記憶體中，等待電力供應復原後，再由 NVRAM 取回日誌資料，接著再完成讀寫作業，將剩餘讀寫作業安全完成以確保讀寫完整性。備份電池模組通常會配合陣列卡的 Write-Back 快取模式，藉由此記憶體快取讀寫作業以得到更高的讀寫效能；但是沒有備份電池模組的硬體磁碟陣列卡，切勿使用 Write-Back 快取模式以免遭遇斷電情形導致讀寫資料流失。此外，因為硬體磁碟陣列卡搭載內建處理器，所以可以與作業系統分離出來，對硬碟進行各種作業，還原作業的速度也比軟體磁碟陣列快。缺點是其售價很高。

## 磁碟陣列相關客戶類型

* 企業資源計畫（ERP）系統。
* 網路附加儲存（NAS）系統。
* 影音多媒體數位內容創作公司、個人影音剪輯數位內容工作室、攝影工作室、攝影公司。
* 電視台、廣播電台及線上內容提供者等傳統媒體及新媒體。
* 數位監控系統（DVR）、網路監控系統（NVR）等等需要大量儲存影片的監控系統業者，軍方、賭場因為需要大量監控系統也是常見使用磁碟陣列的客戶。
* 證券、銀行等金融行業保管重要客戶資料。

## 參考文獻

## 外部連結

* Raid System
* Raid（頁面存檔備份，存於網際網路檔案館）
* RAID 容量計算器 （頁面存檔備份，存於網際網路檔案館）