Câu trả lời này là sự kết hợp của @ lechlukasz và @ db48x , cũng kết hợp một số điểm được đưa ra trong các nhận xét cũng như một số suy nghĩ của riêng tôi.
Đường dẫn đơn giản chuyển tiếp là một cách tiếp cận kết hợp hệ thống tệp và siêu dữ liệu riêng biệt.
Bằng cách sử dụng một hệ thống tệp thực hiện băm và xác thực dữ liệu nhanh chóng, chẳng hạn như ZFS hoặc Btrfs (lưu ý rằng mặc dù đã có những tiến bộ lớn, Btrfs không được coi là sẵn sàng để sử dụng sản xuất tại thời điểm này), bạn có thể hợp lý chắc chắn rằng nếu dữ liệu có thể được đọc ra khỏi đĩa mà không bị lỗi hệ điều hành, thì dữ liệu đọc được ghi vào đĩa theo cách mà hệ thống tệp dự định. Bằng cách chạy các hoạt động "chà" định kỳ, tất cả dữ liệu được đọc và xác minh theo ý tưởng của hệ thống tệp về những gì nó cần phải có.
Tuy nhiên, điều đó chỉ bảo vệ chống tham nhũng trên đĩa (các khối không thể đọc được, lỗi ghi phần cứng hoàn toàn, ghi không hợp lệ làm hỏng các phần dữ liệu trực tiếp trên thiết bị khối, v.v.). Nó không bảo vệ chống lại lỗi phần mềm, hoạt động không chính xác của người dùng hoặc phần mềm độc hại hoạt động thông qua các cơ sở hệ điều hành dự định để làm việc với các tệp, giả sử rằng các cơ sở đó không có các lỗi đó.
Để bảo vệ chống lại cái sau, bạn cần một lớp bảo vệ khác. Kiểm tra dữ liệu hoặc băm dữ liệu từ quan điểm của ứng dụng người dùng sẽ giúp bảo vệ chống lại nhiều rủi ro nêu trên, nhưng cần được thực hiện riêng (như là một hành động xử lý tích hợp trong phần mềm hoặc là một quy trình hoàn toàn riêng biệt).
Với phần cứng ngày nay và những gì thiết thực để lưu trữ một lượng lớn dữ liệu (quay đĩa cứng đĩa trái ngược với đĩa / SSD trạng thái rắn), ngay cả các thuật toán băm phức tạp như SHA1 sẽ phần lớn bị ràng buộc I / O - đó là tốc độ tại đó dữ liệu được băm sẽ là một chức năng của tốc độ đọc của hệ thống lưu trữ, thay vì khả năng của bộ xử lý của máy tính để tính toán hàm băm. Tôi đã thực hiện một thử nghiệm với việc chạy quy trình băm MD5 trong không gian người dùng với khoảng 150 GB dữ liệu về năm 2012 là một PC tiêu dùng hạng trung và nó đã hoàn thành sau khi thực hiện đĩa về cơ bản mà không bị gián đoạn trong khoảng 40 phút. Nhân rộng những con số đó lên gấp 100 lần, bạn sẽ nhận được băm MD5 của bộ sưu tập 15 TB trong khoảng ba ngày trên cùng một phần cứng. Bằng cách thêm tốc độ truyền đọc (có thể dễ dàng thực hiện, ví dụ:Ví dụ, RAID 0 bị tước mà không có dự phòng, thường được sử dụng để đạt được hiệu suất đọc / ghi cao hơn có thể kết hợp với RAID 1 hình thành RAID 10 ), thời gian hoàn thành có thể được giảm xuống cho cùng một lượng dữ liệu.
Bằng cách kết hợp cả hai, bạn sẽ có được cả hai thế giới tốt nhất: hệ thống tệp cho bạn đảm bảo rằng những gì bạn nhận được khi đọc tệp là những gì thực sự được viết và một quy trình kiểm tra độ cố định riêng biệt có thể chạy trên toàn bộ bộ sưu tập đảm bảo dữ liệu được lưu trữ vẫn khớp với những gì đã ăn vào kho lưu trữ. Bất kỳ sự không nhất quán nào giữa hai (hệ thống tệp cho biết tệp đều ổn, kiểm tra tính cố định cho biết là không) sẽ chỉ ra một tệp đã được sửa đổi bên ngoài chế độ hoạt động dự định của kho lưu trữ nhưng từ bên trong các cơ sở của hệ điều hành, nhắc nhở khôi phục từ phụ sao chép (sao lưu). Do đó, kiểm tra độ cố định có thể chạy trong khoảng thời gian dài hơn, điều này trở nên cần thiết cho kho lưu trữ rất lớn, nhưng mọi truy cập trực tuyến vẫn được đảm bảo không bị hỏng trên phần cứng nếu việc đọc thành công. Về nguyên tắc, phần mềm lưu trữ có thể dựa vào hệ thống tệp để báo cáo sự không nhất quán là lỗi đọc và thực hiện kiểm tra sửa lỗi riêng trong nền khi người dùng đang làm việc với tệp và hiển thị thông báo phù hợp cho biết tệp không khớp với những gì đã ăn. vào kho lưu trữ. Sử dụng một hệ thống tệp băm khối, một sơ đồ như vậy sẽ có tác động tối thiểu đến hiệu suất nhận thức trong khi vẫn đảm bảo rằng nội dung là chính xác.