RAID

<image>

獨立硬碟冗餘陣列（RAID, Redundant Array of Independent Disks），舊稱廉價磁碟冗餘陣列（Redundant Array of Inexpensive Disks），簡稱磁碟陣列。它是一種存儲虛擬化技術，通過將多個獨立的硬碟驅動器組合成一個或多個邏輯單元，以實現數據冗餘、性能提升或兩者的結合。

RAID的工作方式取決於其級別（Level）。數據以多種模式分散存儲在各個硬碟上，RAID級別以「RAID」加上數字的方式命名，例如RAID 0、RAID 1、RAID 5等。不同的級別在數據可靠性和讀寫性能這兩個目標之間取得了不同的平衡。

簡單來說，RAID技術將多個物理硬碟組合成一個邏輯硬碟，因此作業系統只會將其視為一個單一的存儲設備。RAID常用於伺服器，且通常使用規格完全相同的硬碟來組建。隨著硬碟價格的下降以及RAID功能被更有效地集成到主板上，它也逐漸成為普通使用者的選擇，特別是在需要大容量存儲空間的應用場景，如影片和音頻製作。

雖然大多數RAID級別可以有效防護硬體缺陷或壞道（硬錯誤）導致的數據丟失，但它們無法防護因火災、水災等災難性故障，或使用者誤操作、軟體缺陷、惡意軟體感染等軟錯誤造成的數據損失。對於重要數據，RAID僅是數據丟失防護與恢復策略的一部分，不能完全替代備份計劃。

## 標準RAID級別

### RAID 0

<image>

RAID 0（也稱為條帶集或條帶卷）將數據均勻地分割（「分條」）到兩個或更多磁碟上，但不提供奇偶校驗資訊、冗餘或容錯。由於RAID 0沒有任何冗餘，任何一個驅動器的故障都會導致整個陣列的數據丟失。這種配置通常以追求極致的讀寫速度和最大化存儲容量為目標。

一個由n個驅動器組成的RAID 0陣列，其數據讀寫傳輸速率理論上是單個驅動器速率的n倍。RAID 0主要用於對性能要求極高且能容忍較低可靠性的應用，例如科學計算或遊戲的臨時文件存儲。

### RAID 1

<image>

RAID 1 包含一個數據集在兩個或多個磁碟上的精確副本（或鏡像）。一個經典的RAID 1鏡像對由兩個磁碟組成。此配置不提供奇偶校驗或分條，數據在所有成員磁碟上完全相同。陣列的可用容量等於容量最小的那個成員磁碟。當數據可靠性或讀取性能比寫入性能和存儲成本更重要時，此布局非常有用。

只要至少有一個成員驅動器正常工作，陣列就能繼續運作，提供了很高的容錯能力。任何讀取請求都可以由陣列中的任何驅動器來處理，因此隨機讀取性能理論上最高可達所有成員性能的總和。而寫入操作需要同時寫入所有成員磁碟，因此寫入性能受限於最慢的那個磁碟。

### RAID 2

<image>

RAID 2 在位級別上將數據分條到多個磁碟，並使用漢明碼進行錯誤糾正。所有磁碟主軸需要同步旋轉，這使得它一次只能處理一個I/O請求。由於現代硬碟已內置ECC（錯誤糾正碼）功能，RAID 2提供的額外保護顯得冗餘且複雜。因此，RAID 2在商業上從未被廣泛實現，是唯一一個在實踐中已被淘汰的原始RAID級別。

### RAID 3

<image>

RAID 3 採用字節級分條，並使用一個專用的磁碟存儲奇偶校驗資訊。由於數據按字節分布在所有數據盤上，任何I/O操作都需要所有磁碟協同工作，這使其不適合處理大量隨機的小型I/O請求。它適用於需要高吞吐率的順序讀寫應用，例如未壓縮影片編輯。RAID 3與RAID 4很快被更靈活的RAID 5所取代。

### RAID 4

<image>

RAID 4 採用塊級分條和一個專用的奇偶校驗磁碟。這種設計提供了良好的隨機讀取性能，因為讀取請求可以由單個數據盤獨立完成。然而，由於所有寫入操作都必須更新同一個奇偶校驗盤，該盤很容易成為性能瓶頸，導致隨機寫入性能不佳。NetApp公司的某些NAS系統曾使用基於RAID 4的設計理念。

### RAID 5

<image>

RAID 5 採用帶分布式奇偶校驗的塊級分條。與RAID 4不同，它的奇偶校驗資訊被交錯地分布在所有成員磁碟上，從而解決了單一奇偶校驗盤的寫入瓶頸問題。RAID 5至少需要三個磁碟，它允許一個磁碟發生故障而數據不丟失。後續的讀取可以通過陣列中剩餘的數據和奇偶校驗塊計算出來。

相比RAID 4，RAID 5的分布式奇偶校驗將寫入負載均勻地分散到所有磁碟上，顯著提升了隨機寫入性能。這使得RAID 5成為性能、容量和可靠性之間的一個良好平衡點，是企業中最常見的數據保護方案之一。但由於奇偶校驗計算是在整個條帶上進行的，對陣列的小數據塊修改會引發「讀-改-寫」操作，產生所謂的「寫放大」問題。

### RAID 6

<image>

RAID 6 通過添加第二個獨立的奇偶校驗塊來擴展RAID 5。它採用帶雙重分布式奇偶校驗的塊級分條。RAID 6至少需要四個磁碟，它可以在任意兩個磁碟同時發生故障的情況下保證數據的完整性。

第二個奇偶校驗塊的計算通常採用里德-所羅門碼等糾刪碼演算法，這比RAID 5的單一XOR運算要複雜得多。因此，RAID 6的寫入性能（尤其是小數據塊的隨機寫入）通常低於RAID 5，因為它需要進行兩次奇偶校驗計算和寫入。然而，其讀取性能通常與RAID 5相當。隨著硬碟容量越來越大，重建時間變長，RAID 5陣列在重建過程中發生第二次磁碟故障的風險增加，因此RAID 6在需要高可靠性的關鍵應用中變得越來越流行。

## 實驗性及非標準級別

除了廣泛採用的標準RAID級別外，學術界和工業界也提出了一些實驗性或非標準的RAID架構，旨在滿足特定的性能、成本或可靠性需求。

### RAID 0e（彈性條帶陣列）

`RAID 0e`（Resilient Striping Array）是一種實驗性的磁碟陣列架構，旨在為傳統的 `RAID 0`（條帶化）增加一個低開銷的容錯層。該架構由 Yanzhao Jia 等人在其2025年的概念性論文中首次提出。其核心設計思想是將存儲陣列分為兩個邏輯和物理上獨立的域：一個由 `N` 個驅動器組成的數據域（Data Domain），配置為標準的 `RAID 0` 以實現高性能讀取；以及一個由 `M` 個驅動器組成的奇偶校驗域（Parity Domain），專門用於存儲數據域的奇偶校驗資訊。

這種設計的主要目標是防護常見的、非災難性的介質故障，例如孤立的壞塊、瞬時讀取錯誤或扇區級損壞，而不是完整的驅動器故障。通過這種方式，`RAID 0e` 試圖在保留 `RAID 0` 的讀取性能優勢的同時，顯著提高數據的可用性和操作彈性。

#### 工作原理

- 讀取操作（健康狀態）：讀取請求僅由數據域並行處理，理論性能與標準 `RAID 0` 相同。此時，奇偶校驗域保持空閒。
- 寫入操作：當寫入數據時，數據被條帶化地寫入數據域的所有 `N` 個驅動器。同時，控制器計算該數據條帶的奇偶校驗塊（通過對所有數據塊進行按位異或運算），並將該奇偶校驗塊寫入奇偶校驗域。$$P_S = D_1 \oplus D_2 \oplus \cdots \oplus D_N$$由於所有寫入操作都需要更新奇偶校驗域，因此寫入性能會受到影響，特別是對於小型的隨機寫入，會引發「讀取-修改-寫入」（Read-Modify-Write）懲罰。
- 故障恢復（即時恢復）：如果數據域中的某個數據塊（例如 `Dᵢ`）發生讀取錯誤，控制器會立即啟動一個透明的恢復程序。它會並發地從數據域讀取該條帶中所有其他的健康數據塊（`Dⱼ` 其中 `j ≠ i`），並從奇偶校驗域讀取對應的奇偶校驗塊（`Pₛ`）。通過對這些數據塊進行異或運算，控制器可以在記憶體中重建出丟失的數據塊 `Dᵢ` 並返回給主機。$$D_i = \left( \bigoplus_{j=1, j\neq i}^{N} D_j \right) \oplus P_S$$這個過程對應用程式是透明的，僅表現為該次 I/O 操作的延遲增加。

#### 局限性

`RAID-0e` 旨在提供「增強的可用性」，而非「絕對的冗餘」。它主要針對單一、局部的介質錯誤，但無法防護並發故障、奇偶校驗域故障或「寫洞」（Write Hole）問題。

## 嵌套RAID（混合RAID）

嵌套RAID是將兩種或多種標準RAID級別組合起來，以獲得各級別之長。

常見嵌套RAID級別類型包括RAID 01、RAID 03、RAID 10、RAID 50、RAID 60、RAID 100。

## 磁碟陣列比較

RAID等級｜最少硬碟｜最大容錯(磁碟數)｜可用容量(n=硬碟數, s=單盤容量)｜讀性能(倍率)｜寫性能(倍率)｜安全性｜目的

JBOD｜1｜0｜n × s｜1｜1｜無（風險同RAID 0）｜簡單地增加容量

0｜2｜0｜n × s｜n｜n｜低，一個硬碟損壞，全部數據丟失｜追求最大容量與速度

1｜2｜n-1｜s｜n｜1｜高，只要有一個硬碟正常即可｜追求最大安全性

5｜3｜1｜(n-1) × s｜n-1｜n-1｜中，允許單個硬碟故障｜容量、性能和安全的平衡

6｜4｜2｜(n-2) × s｜n-2｜n-2｜中高，允許兩個硬碟故障｜比RAID 5更安全

10 (1+0)｜4 (偶數)｜每個鏡像組n/2中可壞1個｜(n/2) × s｜n｜n/2｜高，只要每個鏡像組至少有一個正常｜兼顧高性能與高安全性

50 (5+0)｜6｜每個RAID 5子組可壞1個｜(n-k) × s (k=子組數)｜n-k｜n-k｜高，提升寫入性能和安全性｜大型陣列的性能與安全

60 (6+0)｜8｜每個RAID 6子組可壞2個｜(n-2k) × s (k=子組數)｜n-2k｜n-2k｜非常高，極佳的容錯能力｜關鍵業務的終極數據保護

- 註：上表中的性能倍率僅為理論值，實際性能受RAID控制器、緩存、硬碟類型和工作負載等多種因素影響。

## 實現方式

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

軟體磁碟陣列（Software RAID）：主要由CPU處理陣列存儲作業，優點是成本極低（若使用作業系統內置功能則無需額外花費），缺點是會消耗CPU資源，可能影響系統性能。

- 作業系統內置功能：如Linux的mdadm、FreeBSD的ZFS、以及Windows Server和桌面版Windows（通過「存儲空間」或「磁碟管理」）提供的RAID功能。
- 硬體輔助磁碟陣列（或稱Fake RAID）：RAID功能由主板晶片組提供，需要特定驅動程序才能工作。它仍然依賴CPU進行大部分計算，性能介於純軟體和硬體RAID之間。

硬體磁碟陣列（Hardware RAID）：通過專門的RAID控制器卡實現，該卡擁有獨立的處理器（稱作ROC, RAID-on-Chip）、緩存記憶體和BIOS。

- 優點：性能最佳，因為它不占用主機CPU資源。通常帶有備用電池模塊（BBU）或電容，能在斷電時保護緩存中的數據，確保數據一致性。獨立於作業系統，遷移和管理更方便。
- 缺點：成本最高，且卡的性能與價格直接相關。

## 應用

RAID技術應用廣泛，尤其是在對數據可靠性、可用性和性能有較高要求的環境中：

- 企業級應用：資料庫伺服器、企業資源計劃（ERP）系統、虛擬化平台。
- 存儲系統：網路附加存儲（NAS）和存儲區域網絡（SAN）。
- 媒體與內容創作：電視台、廣播電台、影視後期製作工作室，需要高速、大容量的存儲來處理高畫質影片和音頻文件。
- 數據密集型行業：金融、證券行業用於保管客戶資料；安防監控領域用於存儲大量的影片錄像。