Lỗi 10 năm tuổi của Linux cho phép user-space phá hỏng RAID qua O_DIRECT

Một báo cáo lỗi nghiêm trọng từ năm 2015 liên quan đến các giải pháp RAID phần mềm Linux như MD RAID, LVM RAID đang nhận được sự chú ý trở lại. Lỗi này cho phép một chương trình từ user-space, thông qua việc sử dụng O_DIRECT, có thể âm thầm đưa RAID vào trạng thái inconsistent giữa các đĩa, dẫn đến nguy cơ hỏng RAID.

40f3b6fe-7ca4-408b-9da2-73ad31611f8c

Báo cáo lỗi này, do Stanislav German-Evtushenko khởi xướng từ năm 2015 và đến nay vẫn open, mô tả cách các giải pháp như MD RAID, DRBD, và LVM RAID có thể bị đưa vào trạng thái không nhất quán từ một chương trình user-space sử dụng O_DIRECT.

Giải thích về bản chất của vấn đề, Wolfgang Bumiller làm rõ rằng vấn đề không nằm ở nội dung dữ liệu (ví dụ: dữ liệu rác bị ghi). Vấn đề mấu chốt là mỗi đĩa tạo nên mảng RAID sẽ chứa dữ liệu rác khác nhau, điều này đồng nghĩa với việc các đĩa bị out of sync và mảng RAID bị hỏng.

Nguyên nhân là do khi sử dụng O_DIRECT, pointer của user-space được chuyển thẳng đến các trình block drivers của các layer bên dưới tạo nên RAID. Các driver này đọc dữ liệu từ con trỏ đó một cách độc lập, dẫn đến sự không nhất quán.

Theo nguyên tắc, mục đích của RAID (ví dụ RAID 1) là để mỗi đĩa chứa cùng một dữ liệu, ngay cả khi đó là dữ liệu rác. Lỗi này đồng nghĩa với việc “bất kỳ người dùng nào có thể chạy một chương trình sử dụng O_DIRECT trên một tệp tin nằm trên RAID đều có thể phá vỡ RAID đó.”

Mặc dù đã tồn tại 10 năm, lỗi này gần đây lại được thảo luận trở lại trong bối cảnh liệu nó có thể xuất hiện khi thực hiện VM live migration hay không.

Theo báo cáo, các hệ thống tệp Linux duy nhất được cho là không bị ảnh hưởng bởi lỗi O_DIRECT này khi kết hợp với software RAID là OpenZFS và Bcachefs.

Chia sẻ bài viết:
Theo dõi
Thông báo của
0 Góp ý
Được bỏ phiếu nhiều nhất
Mới nhất Cũ nhất
Phản hồi nội tuyến
Xem tất cả bình luận