如果一台電腦只有一顆硬碟,資料的位置相對單純。
但在伺服器、NAS 等環境中,常常會把多顆硬碟組成 RAID(Redundant Array of Independent Disks)。對使用者來說,它可能看起來只是一個磁碟,但實際上的資料可能分散在多顆硬碟中。
RAID 常見的核心概念有 Striping(分割資料)、Mirroring(鏡像) 和 Parity(同位檢查)。不同 RAID Level 的組合方式不同。
RAID 0 使用 Striping,把資料切成不同區塊,分散寫入多顆硬碟。
例如有兩顆硬碟:
資料:
A B C D E F
↓ RAID 0
Disk 1 Disk 2
A B
C D
E F
這樣做的好處是可以讓多顆硬碟同時進行讀寫,提高效能。
但 RAID 0 沒有備援。
如果其中一顆硬碟損壞:
Disk 1 Disk 2
A B
C X
E F
原本的資料就無法還原。
RAID 1 使用 Mirroring。
同一份資料會寫入兩顆或更多硬碟:
Data A B C D
↓
┌─────┴─────┐
↓ ↓
Disk 1 Disk 2
A B C D A B C D
因此其中一顆硬碟故障時,另一顆仍然有完整的資料。
RAID 5 同時使用 Striping + Distributed Parity。
除了資料之外,還會產生 Parity,並且將 Parity 分散在不同硬碟上。
Disk 1 Disk 2 Disk 3
A B P1
C P2 D
P3 E F
這裡的 P 就是 Parity。
當其中一顆硬碟故障時,可以利用其他硬碟上的資料與 Parity 進行重建。
RAID 5 可以容許 一顆硬碟故障,但資料的實際配置會受到 RAID Controller、Stripe Size 等設定影響。
RAID 6 可以想成 RAID 5 的強化版。
它使用 Double Parity,因此可以容許最多兩顆硬碟同時故障,而資料仍有機會透過剩餘資料與 Parity 重建。
Disk 1 Disk 2 Disk 3 Disk 4
A B P1 P2
C P3 D P4
P5 E F P6
因此 RAID 6 的結構比 RAID 5 更複雜,但也提供更高的容錯能力。
RAID 10 可以想成:RAID 1 + RAID 0。
先建立 Mirror,再對這些 Mirror 進行 Striping。
RAID 10
│
┌─────┴─────┐
↓ ↓
Mirror 1 Mirror 2
┌─────┐ ┌─────┐
Disk1 │ │ Disk3
Disk2 │ │ Disk4
└─────┘ └─────┘
因此 RAID 10 同時具有:
但需要更多硬碟,而且實際可以容許哪些硬碟故障,也要看故障發生在哪些 Mirror Pair。
| RAID | 主要方式 | 容錯能力 | 鑑識上的重點 |
|---|---|---|---|
| RAID 0 | Striping | 無 | 資料分散在多顆硬碟 |
| RAID 1 | Mirroring | 可容許部分硬碟故障 | 多顆硬碟可能有相同資料 |
| RAID 5 | Striping + Parity | 1 顆 | 需要理解資料與 Parity 配置 |
| RAID 6 | Striping + Double Parity | 2 顆 | Parity 結構更複雜 |
| RAID 10 | Striping + Mirroring | 視 Mirror 配置而定 | 同時處理 Striping 與 Mirror |