Thuật toán XOR trong RAID

1. Tổng quan

Tại sao chỉ với 1 parity block, RAID 5 có thể phục hồi lại toàn bộ dữ liệu của 1 disk bị hỏng? Phải chăng block parity phải có dung lượng bằng 2 block data cộng lại?

Câu trả lời là không, parity không cần nhiều dung lượng hơn — và phép màu nằm ở phép toán XOR (⊕).

2. Thuật toán XOR

RAID 5 sử dụng phép toán XOR để tạo 1 parity block có thể phục hồi lại bất kỳ 1 block nào bị mất trong một stripe.

  • Dung lượng parity = dung lượng của 1 block
  • Không cần copy toàn bộ data
  • Không lưu bản sao — chỉ lưu “tổng XOR”

Cơ chế hoạt động của XOR thần kỳ như sau.

Giả sử bạn có RAID 5 với 3 ổ đĩa:

  • Disk 1 → Data A
  • Disk 2 → Data B
  • Disk 3 → Parity = A ⊕ B

→ Tổng dung lượng mỗi block là bằng nhau.
→ Parity = A ⊕ B chỉ chiếm 1 block — không gấp đôi như bạn nghĩ.

Khi 1 disk bị lỗi, ta làm gì?

Nếu mất Disk 1 (Data A):

  • Dữ liệu còn lại: B, P = A ⊕ B
  • Khôi phục A: A = P ⊕ B = (A ⊕ B) ⊕ B = A ⊕ (B ⊕ B) = A ⊕ 0 = A

Nếu mất Disk 2 (Data B):

  • Khôi phục B: B = P ⊕ A = (A ⊕ B) ⊕ A = B

Nếu mất Disk 3 (Parity):

  • Ta chỉ cần tính lại: P = A ⊕ B

→ Bạn thấy không? Không cần lưu cả A và B trong parity, chỉ cần 1 block tính toán XOR là đủ để khôi phục bất kỳ 1 trong 3 block.

🧩 So sánh trực quan:

Thành phầnDung lượngGhi chú
Data A4 KBThực dữ liệu
Data B4 KBThực dữ liệu
Parity4 KBChỉ là A ⊕ B
Tổng stripe12 KBNhưng usable chỉ là 8 KB (2 block dữ liệu)

Vậy tại sao nó phục hồi được?

  • Vì XOR là phép toán có thể “đảo ngược”:
    • Nếu bạn biết A ⊕ BB, bạn luôn tính được A.
    • Chỉ cần 1 block parity để phục hồi lại 1 block data bị mất.

Nhưng nếu 2 disk bị lỗi cùng lúc (RAID 5) → không thể phục hồi vì bạn thiếu 2 giá trị để giải 1 phương trình → cần RAID 6 (2 parity).

Đừng hiểu nhầm là parity block phải lớn gấp đôi để chứa dữ liệu từ 2 disk. mà parity chỉ là phép toán XOR của các block khác và có kích thước bằng 1 block duy nhất.

  • Dữ liệu không bị nhân bản
  • Dung lượng parity = 1 block
  • Khả năng phục hồi đến từ toán học, không phải sao lưu

3. Ví dụ.

Mình sẽ mô phỏng cách RAID 5 sử dụng XOR để khôi phục dữ liệu bị mất, bằng bit nhị phân thực tế, để bạn thấy rõ phép màu của parity.

Giả sử bạn có RAID 5 với 3 ổ:

DiskNội dung
Disk 1Data A
Disk 2Data B
Disk 3Parity (A ⊕ B)

Giả sử dữ liệu của chúng ta dùng 1 byte (8 bit) để minh họa mỗi block dữ liệu.

Data A (Disk 1):   11001100   (204)
Data B (Disk 2):   10101010   (170)

Tính Parity = A ⊕ B

A:   11001100
B:   10101010
---------------
⊕    01100110  → Đây là parity (Disk 3)

→ Parity = 01100110 (decimal: 102)

Mất Disk 1 (Data A), còn lại B và Parity

Ta có:

  • B = 10101010
  • P = 01100110

Khôi phục A = P ⊕ B:

P:   01100110
B:   10101010
---------------
⊕    11001100  → A khôi phục được!

→ Kết quả đúng 100%: A = 11001100

Mất Disk 2 (Data B), còn lại A và Parity

Khôi phục B = P ⊕ A:

P:   01100110
A:   11001100
---------------
⊕    10101010  → B khôi phục được!

→ Chính xác: B = 10101010

Mất Disk 3 (Parity), còn lại A và B

Tính lại P = A ⊕ B:

A:   11001100
B:   10101010
---------------
⊕    01100110  → Parity tính lại được

Kết luận:

Còn dữ liệu gìCó thể khôi phục gì?
A + BP
A + PB
B + PA

→ Chỉ cần 2 trong 3 block là có thể khôi phục block còn lại.

Vậy tại sao chỉ cần 1 block parity?

Vì XOR có tính chất toán học đặc biệt:

  • A ⊕ B = P
  • P ⊕ B = A
  • P ⊕ A = B

Không cần gấp đôi dung lượng, không cần sao lưu, chỉ cần toán logic nhị phân đơn giản!

Dưới đây là kết quả mô phỏng XOR trong RAID 5 bằng bit nhị phân thực tế:

Dữ liệu gốc:

  • Data A: 0b11001100 → 204
  • Data B: 0b10101010 → 170

Tính Parity:

  • Parity (A ⊕ B) = 0b01100110 → 102

Khôi phục trong các tình huống:

→ Mất A:

  • Tính lại: Parity ⊕ B = 0b11001100 → Khôi phục đúng A

→ Mất B:

  • Tính lại: Parity ⊕ A = 0b10101010 → Khôi phục đúng B

→ Mất Parity:

  • Tính lại: A ⊕ B = 0b01100110 → Chính xác parity gốc

Kết luận.

Mất gìDùng gìKhôi phục được gì
Mất AB + Parity✅ A = 204
Mất BA + Parity✅ B = 170
Mất ParityA + B✅ Parity = 102

→ Tất cả đều đúng tuyệt đối, chứng minh rằng chỉ cần 2 trong 3 block là đủ để khôi phục block còn lại — không cần dung lượng gấp đôi, chỉ cần phép toán XOR.

Bài viết gần đây

spot_img

Related Stories

Leave A Reply

Please enter your comment!
Please enter your name here

Đăng ký nhận thông tin bài viết qua email