Khôi phục dữ liệu RAID-5 thế nào cho đúng
Xử lý các vấn đề của mảng RAID là một công việc phức tạp và dễ gây nhầm lẫn ngay cả đối với một kỹ thuật viên khôi phục dữ liệu. Việc hiểu chính xác điều gì đang xảy ra với dữ liệu và cách nó ảnh hưởng đến khả năng khôi phục thành công là vô cùng quan trọng. Bài viết này sẽ phân tích cách thực hiện các quá trình khởi tạo, khôi phục đúng và khôi phục sai trong RAID-5 – Loại RAID được sử dụng phổ biến nhất hiện nay. Ngoài ra, chúng ta cũng sẽ thảo luận về khả năng phục hồi dữ liệu sau khi hệ thống RAID bị can thiệp không đúng cách.
Có vô vàn tình huống dẫn đến việc sai lầm khi khôi phục dữ liệu RAID-5, nhưng trong bài viết này, chúng ta sẽ giới hạn trong một trường hợp cụ thể — khi cấu hình mới và cũ giống hệt nhau. Đây là tình huống thường gặp nhất trong thực tế và cũng là trường hợp dễ giải thích cũng như có khả năng phục hồi dữ liệu cao nhất. Sau khi tìm hiểu trường hợp này, chúng ta có thể tiếp tục với các tình huống phức tạp hơn trong những bài viết tiếp theo.
Chúng tôi giả định rằng bạn đã nghiên cứu bài viết trước về RAID-1 (xem chi tiết) và hiểu rõ các khái niệm về khởi tạo, khôi phục và bản chất của vấn đề “khôi phục không đúng”. Do đó, chúng ta sẽ đi thẳng vào các chi tiết cụ thể của những quá trình này trong RAID-5
1. Hệ thống đĩa dự phòng trong RAID-5
Hãy xem xét một sơ đồ RAID-5 LS (Left Synchronous) với ba ổ đĩa:
Mẫu cho RAID-5 LS của ba ổ đĩa.
Mỗi hàng có một khối lưu trữ XOR của các khối khác:
C0 = A0 xor B0,
B1 = A1 xor C1,
A2 = B2 xor C2
Dữ liệu được chia thành các khối. Mỗi hàng chứa các khối dữ liệu, tuy nhiên, có một khối đặc biệt lưu trữ kết quả của phép toán XOR được tính toán từ tất cả các khối dữ liệu trong hàng đó. Chúng ta sẽ gọi khối này là “khối XOR”. Có nhiều sơ đồ RAID-5 khác nhau, nhưng trong phạm vi bài viết này, sự khác biệt giữa chúng không quan trọng.
Nhờ có các khối XOR, chúng ta có thể khôi phục dữ liệu của bất kỳ một ổ đĩa thành viên nào bị lỗi. Ví dụ, nếu khối C0 được tính như sau:
C0 = A0 xor B0, sau đó:
- A0 = B0 xor C0
- B0 = A0 xor C0
- C0 = A0 xor B0 (theo định nghĩa).
Tương tự với các hàng khác — bất kỳ ổ đĩa thành viên nào cũng có thể được khôi phục bằng phép toán XOR với các thành viên còn lại. Quy tắc này cũng áp dụng cho RAID-5 có nhiều ổ đĩa hơn.
Điều này dẫn đến một thuộc tính quan trọng của bất kỳ RAID-5 nào hoạt động đúng: Các khối XOR phải hợp lệ.
Kết quả của phép toán XOR giữa các khối dữ liệu phải bằng giá trị được lưu trữ trong khối XOR.
2. Khởi tạo RAID-5
Nếu chúng ta sử dụng các ổ đĩa bất kỳ để tạo RAID-5, chúng ta không thể đảm bảo rằng các khối XOR sẽ hợp lệ. Do đó, các mảng RAID-5 cần được khởi tạo.
Vậy làm thế nào để đảm bảo rằng các khối XOR hợp lệ? Giải pháp rõ ràng nhất là tính toán XOR của các khối dữ liệu và ghi kết quả vào khối XOR tương ứng. Đây cũng chính là quy trình mà hầu hết các bộ điều khiển RAID thực hiện.
Khởi tạo RAID 5
Tính toán và cập nhật khối XOR được thực hiện:
A0 XOR B0 -> C0
A1 XOR C1 -> B1
B2 XOR C2 -> A2
Nghĩa là, trong quá trình khởi tạo, dữ liệu sẽ được cập nhật một phần trên tất cả các ổ trong cụm.
3. Xây dựng lại RAID-5 sau khi xuống cấp
Nếu một trong các ổ bị lỗi, RAID-5 sẽ xuống cấp — dữ liệu vẫn khả dụng (dữ liệu của ổ đĩa bị mất được tính toán ngay lập tức), nhưng độ tin cậy không còn được đảm bảo nữa.
Để khôi phục các thuộc tính của mảng, ổ đĩa bị lỗi phải được thay thế bằng ổ đĩa mới. Chỉ cần thêm một ổ đĩa mới vào mảng là đủ? Không. Ổ đĩa mới không chứa dữ liệu chính xác hoặc các khối XOR hợp lệ. Cần phải thực hiện xây dựng lại, một quy trình ghi dữ liệu chính xác vào ổ đĩa mới. Làm thế nào để có được dữ liệu chính xác? Rất đơn giản — tính toán XOR của các ổ đang còn hoạt động.
Xây dựng lại RAID-5 (khôi phục ổ đĩa thành viên C):
XOR dữ liệu của thành viên A và B và ghi kết quả vào NewC
A0 xor B0 -> NewC
A1 xor B1 -> NewC
A2 xor B2 -> NewC
Điều này có nghĩa là: Trong quá trình xây dựng lại đúng cách, chỉ có ổ đĩa mới được cập nhật.
4. Khôi phục RAID-5 không đúng
Hãy xem xét cách dữ liệu thay đổi khi khởi tạo được thực hiện thay vì khôi phục đúng. RAID-5 có nhiều tham số, nhưng để đơn giản hóa, chúng ta sẽ giả định rằng không có thay đổi nào trong số đó.
Khởi tạo với ổ mới trong RAID-5:
Thực hiện tính toán lại khối XOR:
A0 xor B0 -> NewC0 (đúng)
A1 xor NewC1 -> B1 (sai)
B2 xor NewC2 -> A2 (sai)
Quá trình khởi tạo sẽ tính toán lại và cập nhật tất cả các khối XOR. Trong trường hợp này:
- Các khối dữ liệu trên ổ đĩa mới sẽ không thay đổi, nghĩa là chúng vẫn chứa dữ liệu không cần thiết.
- Các khối XOR trên các ổ đĩa cũ sẽ được tính toán lại dựa trên dữ liệu sai, do đó chúng sẽ không chính xác.
5. Phân tích thiệt hại
Để hiểu được hậu quả của việc tính toán sai lệch này lên hình ảnh logic của RAID ra sao, hãy xem hình minh họa dữ liệu trên mảng RAID khi được lắp ráp dưới đây.
Dữ liệu của RAID được lắp ráp từ các ổ đĩa A, B và NewC.
Cứ 6 khối chứa 2 khối lỗi.
Đối với RAID-5 ba ổ đĩa, mỗi nhóm gồm 6 khối sẽ có 4 khối tốt và 2 khối lỗi. Về mặt kỹ thuật, điều này chỉ tương đương với 33,3% dữ liệu bị lỗi. Và với RAID-5 gồm 10 ổ đĩa, mức hỏng hóc chỉ là 10%. Nghe có vẻ không quá tệ! Nhưng sự thật cay đắng là khách hàng cần các tập tin nguyên vẹn, chứ không phải các sector. Và sẽ có rất ít tập tin không bị hỏng.
Ví dụ: nếu kích thước khối là 64 KB, thì 6 khối chỉ có tổng dung lượng 384 KB. Hầu hết các tập tin phổ biến như tệp nén, ảnh và tài liệu đều có kích thước lớn hơn nhiều so với con số này, nghĩa là chúng gần như chắc chắn sẽ bị hỏng.
5.1. Có thể khôi phục dữ liệu mà không cần ổ đĩa bị lỗi không?
Liệu có cách nào để khôi phục dữ liệu mà không cần ổ đĩa C cũ hay không? Chúng tôi nhận thấy rằng trong cấu hình có các ổ đĩa thành viên A, B và NewC, dữ liệu sẽ bị hỏng. Điều này không phải là một lựa chọn khả thi.
Vậy nếu chúng ta cố gắng phục hồi dữ liệu của ổ đĩa C từ hệ thống dự phòng (redundancy) thì sao? Thật không may, trong quá trình khởi tạo lại (reinitialization), các khối XOR đã được tính toán lại, dẫn đến A XOR B = NewC. Điều này có nghĩa là nếu chúng ta dựng lại mảng RAID với A, B và một ổ đĩa giả (placeholder cho ổ bị mất), chúng ta sẽ thu được chính xác cùng một dữ liệu như khi dựng RAID với A, B và NewC.
Kết luận: Không thể khôi phục toàn bộ dữ liệu mà không có ổ C ban đầu.
5.2. Có thể khôi phục dữ liệu bằng ảnh của ổ đĩa bị hỏng không?
Giả sử hư hỏng của ổ đĩa C không phải là hoàn toàn (fatal), và chúng ta đã có thể tạo một bản sao dữ liệu bằng PC-3000. Liệu bản sao này có thể giúp chúng ta khôi phục dữ liệu hay không?
Dữ liệu trên ổ đĩa A, B và hình ảnh C
Chỉ có khối XOR trên A và B bị hỏng
Trường hợp khi quá trình khởi tạo lại (re-initialization) đã được thực hiện với cùng một cấu hình là khá đơn giản:
- Các khối dữ liệu trên A và B là hợp lệ.
- Các khối XOR trên A và B là không hợp lệ.
- Các khối dữ liệu và XOR trên C là hợp lệ.
Có một yếu tố bổ sung cần xem xét — mảng RAID có thể lưu trữ metadata về cấu hình. Metadata trên các ổ A, B có thể mâu thuẫn với metadata trên ổ C. Như vậy, chúng ta có tất cả các khối dữ liệu, nhưng gặp vấn đề với XOR và metadata.
Dữ liệu từ RAID được lắp ráp từ ổ đĩa A, B và hình ảnh của C.
Tất cả các khối dữ liệu đều chính xác — có thể lấy dữ liệu RAID mà không bị hư hỏng.
Với hệ thống PC-3000 RAID, chúng ta có thể dễ dàng lấy được dữ liệu mảng RAID chính xác và giữ nguyên vẹn tất cả các tập tin của người dùng. Không có xung đột metadata hay lỗi XOR nào có thể ngăn cản quá trình khôi phục.
5.3. Dữ liệu có thể được truy cập bằng bộ điều khiển gốc không?
Thật không may, chúng ta không thể đảm bảo điều này, cũng như không thể đảm bảo rằng phương pháp này an toàn cho dữ liệu. Do xung đột trong metadata, bộ điều khiển có thể chỉ xây dựng mảng RAID với các ổ A, B và một ổ giả (dummy) (chúng ta đã thảo luận ở trên rằng cấu hình này không chính xác), hoặc có thể đề xuất khôi phục lại mảng RAID bằng cách thực hiện phép toán:
A xor B → C, và quá trình này sẽ làm hỏng dữ liệu.
Hãy chắc chắn tạo bản sao của tất cả các ổ đĩa nếu bạn có ý định sử dụng bộ điều khiển gốc!
6. Kết luận
- RAID-5 là một cấp độ RAID lưu trữ các khối XOR đặc biệt trong mỗi hàng, giúp nó có khả năng chịu lỗi của một ổ đĩa thành viên bất kỳ.
- Trong quá trình khởi tạo RAID-5, các khối XOR thường được tính toán lại và ghi đè lên dữ liệu, nghĩa là mỗi ổ đĩa thành viên của mảng RAID đều bị cập nhật một phần.
- Trong quá trình xây dựng RAID đúng cách , dữ liệu của ổ bị lỗi sẽ được khôi phục và ghi vào ổ đĩa mới. Quá trình này sử dụng các khối XOR để tính toán lại dữ liệu bị mất. Do đó, khi khôi phục đúng cách, chỉ ổ đĩa mới bị thay đổi.
- Trong quá trình xây dựng RAID sai, các ổ đĩa cũ cũng bị cập nhật một phần với dữ liệu không chính xác do tính toán lại XOR sai lệch.
- Nếu một ổ đĩa thành viên bị lỗi hoàn toàn và không thể khôi phục, thì dữ liệu RAID không thể được khôi phục hoàn toàn. Hầu hết các tập tin trung bình và lớn đều sẽ bị lỗi.
- Nếu có thể tạo bản sao dữ liệu từ ổ đĩa bị lỗi, thì hệ thống PC-3000 RAID có thể hỗ trợ khôi phục RAID.
- Việc sử dụng bộ điều khiển gốc để khôi phục dữ liệu có thể nguy hiểm, do nó có thể gây hỏng dữ liệu do xung đột metadata hoặc quá trình tính toán lại XOR không đúng.
Chúng ta chưa xem xét tới các trường hợp khi cấu hình mới khác với cấu hình cũ. Mức độ hư hỏng trong các trường hợp đó phức tạp hơn, nhưng trong nhiều trường hợp vẫn có thể khôi phục dữ liệu. Hãy chờ đón những bài viết tiếp theo của chúng tôi nhé.