NAS、Server 裡常常不只一顆硬碟,這些硬碟可能會透過 RAID(Redundant Array of Independent Disks) 組合成一個邏輯儲存空間。
對使用者來說可能只看到一個 Volume,但實際資料可能被拆開、複製,或搭配 Parity 分散在不同硬碟。
所以遇到 RAID 時,最重要的問題不是「有幾顆硬碟」,而是:
資料到底是怎麼分散在這些硬碟上的?
常見的 RAID 可以先從三個概念理解:
Striping
→ 把資料拆開,分散到不同硬碟
Mirroring
→ 相同資料保存多份
Parity
→ 額外保存計算結果,
在部分資料遺失時用來重建
不同的 RAID Level,就是把這幾種方式做不同組合。
| RAID | 方式 | 最少硬碟 | 可承受故障 |
|---|---|---|---|
| RAID 0 | Striping | 2 | 無 |
| RAID 1 | Mirroring | 2 | 1 顆 |
| RAID 5 | Striping + Parity | 3 | 任意 1 顆 |
| RAID 6 | Striping + Dual Parity | 4 | 任意 2 顆 |
| RAID 10 | Striping + Mirroring | 4 | 視 Mirror Pair 而定 |
RAID 0 會把資料輪流寫到不同硬碟:
Disk 0 Disk 1
A1 A2
A3 A4
A5 A6
好處是所有硬碟可以一起工作,容量也幾乎可以全部使用。
但它沒有備援,如果其中一顆硬碟遺失,就只剩部分資料,因此整個 Volume 通常無法正常使用。
RAID 1 採用 Mirroring,也就是把相同資料寫到兩顆硬碟:
Disk 0 Disk 1
A1 A1
A2 A2
A3 A3
其中一顆故障,另一顆仍然有完整資料。
代價就是容量,例如兩顆 4 TB 組 RAID 1,可用容量大約只有 4 TB。
從鑑識角度來看,RAID 1 也有一個有趣的地方:兩顆 Mirror 不一定永遠完全相同。如果其中一顆曾經提早掉出 Array,它可能保留較舊的資料狀態,因此兩顆硬碟仍然都有保存價值。
RAID 5 除了 Striping,還會加入 Parity:
Disk 0 Disk 1 Disk 2
A1 A2 P1
A3 P2 A4
P3 A5 A6
P1、P2、P3 就是 Parity。
而且 Parity 不固定在同一顆硬碟,而會隨著 Stripe 改變位置。
RAID 5 可以容忍任意一顆硬碟故障,而 RAID 6 則會保存兩組 Parity,因此可以承受任意兩顆硬碟故障。
RAID 5
→ 容量約為 (n - 1) / n
RAID 6
→ 容量約為 (n - 2) / n
RAID 5 的 Parity 主要利用 XOR。
XOR 的規則:
0 XOR 0 = 0
0 XOR 1 = 1
1 XOR 0 = 1
1 XOR 1 = 0
假設:
A XOR B = P
因為 XOR 可以反推:
P XOR B = A
P XOR A = B
所以只要三個值裡還剩兩個,就可以算回第三個。
例如:
A = 0110 1001
B = 1100 0011
A XOR B
= 1010 1010
= P
如果 B 所在的硬碟壞掉:
P XOR A
= B
就可以利用剩下的 Data 和 Parity,把遺失的資料重新計算出來。
這也是 RAID 5 在少一顆硬碟時,仍然可以繼續讀取資料的原因。
一般單顆硬碟可以直接:
Disk Image
→ Partition
→ File System
→ File
但 RAID 可能是:
Disk 0 ─┐
Disk 1 ─┼→ RAID Reconstruction
Disk 2 ─┘
↓
File System
↓
File
所以取得每一顆 Member Disk 的 Image 之後,還需要先把原本的 RAID 結構重建回來。
重建時有四個重要參數:
Disk Order
→ 硬碟原本的排列順序
Stripe Size
→ 每次寫到一顆硬碟的資料區塊大小
Parity Rotation
→ RAID 5 / 6 的 Parity 如何輪替
Start Offset
→ Striping 從硬碟哪個位置開始
只要其中一個參數錯誤,重建出來的 File System 就可能無法正常解析。
因此現場如果遇到 RAID,除了保存硬碟本身,硬碟原本位於哪個 Bay 也很重要。
另外,如果 RAID 已經處於 Degraded 狀態,也不應該直接為了「修好它」而做 Rebuild。
因為:
RAID Rebuild
= Write Operation
Controller 會重新計算資料並寫入硬碟,代表原始狀態正在被改變。
在數位鑑識裡,比較重要的是先保存目前的狀態:
記錄 Disk / Bay Order
↓
取得各 Member Disk Image
↓
保留原始證據
↓
在 Image 上重建 RAID
所以 RAID Forensics 真正困難的地方,不只是硬碟壞掉。
而是要從多顆看起來零散的硬碟中,重新找回原本的參數,並把它們重新拼回一個完整的 Volume,才有辦法繼續分析裡面的 File System 和檔案。
了解 RAID 的結構後,也可以用 X-Ways Forensics 來重新組合多顆 Member Disk。
X-Ways Forensics 是一套付費的數位鑑識工具,可以用來分析磁碟、檔案系統、建立 Case,也支援 RAID Reconstruction。這次先用它示範 RAID 重建的基本操作。
先把每一顆硬碟的 Image 加入 X-Ways:
File
→ Open Disk
→ 加入每一顆 Member Disk Image
接著進入 Specialist → Reconstruct RAID,就會看到 RAID Reconstruction 的設定畫面。

左邊的 Components 是參與 RAID 的各個 Member Disk,這裡最重要的是把它們按照原本的 Disk Order 排好。
右邊則需要設定 RAID 的結構,例如:
RAID Level / Layout
Stripe Size
Number of Components
像圖中的 Stripe size in sectors = 128,代表一個 Stripe Chunk 包含 128 個 Sector。若該磁碟使用 512 Bytes Sector,換算後就是:
128 × 512 Bytes
= 65,536 Bytes
= 64 KiB
RAID 5 還會看到不同的 Parity Layout,例如 Forward、Backward、Dynamic、Delayed 等,這就是前面提到的 Parity Rotation / Layout。
所以在 X-Ways 中重建 RAID,其實就是把前面整理的幾個參數填回去:
Disk Order
Stripe Size
RAID Level / Parity Layout
Start Offset
設定完成後,再觀察重建結果能不能正常解析出 Partition Table、File System 和 Directory。
如果結果不對,也不要一次亂改很多設定,可以一次只調整一個參數再重新確認:
設定 RAID Geometry
↓
嘗試解析
↓
Partition Table 正常嗎?
↓
File System 能讀嗎?
↓
不行 → 修改一個參數再測試