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ần | Dung lượng | Ghi chú |
---|---|---|
Data A | 4 KB | Thực dữ liệu |
Data B | 4 KB | Thực dữ liệu |
Parity | 4 KB | Chỉ là A ⊕ B |
Tổng stripe | 12 KB | Như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 ⊕ B
vàB
, bạn luôn tính đượcA
. - Chỉ cần 1 block parity để phục hồi lại 1 block data bị mất.
- Nếu bạn biế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 ổ:
Disk | Nội dung |
---|---|
Disk 1 | Data A |
Disk 2 | Data B |
Disk 3 | Parity (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 + B | P |
A + P | B |
B + P | A |
→ 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 A | B + Parity | ✅ A = 204 |
Mất B | A + Parity | ✅ B = 170 |
Mất Parity | A + 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.