iT邦幫忙

2026 iThome 鐵人賽

DAY 21
0
Security

那些留在電腦裡的證據:從零開始認識數位鑑識系列 第 21 篇

[DAY 21] 硬碟壞一顆,RAID 怎麼把資料救回來?

  • 分享至 

  • xImage
  •  

NAS、Server 裡常常不只一顆硬碟,這些硬碟可能會透過 RAID(Redundant Array of Independent Disks) 組合成一個邏輯儲存空間。

對使用者來說可能只看到一個 Volume,但實際資料可能被拆開、複製,或搭配 Parity 分散在不同硬碟。

所以遇到 RAID 時,最重要的問題不是「有幾顆硬碟」,而是:

資料到底是怎麼分散在這些硬碟上的?

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

RAID 0 會把資料輪流寫到不同硬碟:

Disk 0      Disk 1

A1          A2
A3          A4
A5          A6

好處是所有硬碟可以一起工作,容量也幾乎可以全部使用。

但它沒有備援,如果其中一顆硬碟遺失,就只剩部分資料,因此整個 Volume 通常無法正常使用。

RAID 1

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 / RAID 6

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

Parity 怎麼把資料算回來?

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 在少一顆硬碟時,仍然可以繼續讀取資料的原因。

RAID 鑑識難在哪裡?

一般單顆硬碟可以直接:

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 和檔案。

用 X-Ways 簡單重建 RAID

了解 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 的設定畫面。

https://ithelp.ithome.com.tw/upload/images/20261005/2014659132NPsvH58N.png

左邊的 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 能讀嗎?
        ↓
不行 → 修改一個參數再測試

上一篇
[DAY 20] 線索這麼多,到底該看哪個 Windows Artifact?
下一篇
[DAY 22] Run List 怎麼算?從 Hex 推回檔案的位置
系列文
那些留在電腦裡的證據:從零開始認識數位鑑識 共 22 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言