Mở rộng dựa trên câu trả lời xuất sắc của Mark Haferkamp, btrfs scrub
đọc tất cả dữ liệu thay vì tất cả các tệp là một thuộc tính quan trọng và thực sự là điều làm cho nó rất hữu ích. Hãy nhớ rằng, btrfs đã tích hợp hỗ trợ RAID. Giả sử bạn có hệ thống tệp btrfs bao gồm hai ổ đĩa mà bạn đã cấu hình để sử dụng RAID1. Trong trường hợp này, khi bạn ghi vào một tệp, ghi đó được sao chép vào cả hai đĩa. (Nó trở nên phức tạp hơn với một ví dụ phức tạp hơn nhưng đối với trường hợp đơn giản này, đây luôn là điều xảy ra.) Tuy nhiên, khi bạn đọc từ tệp đó, việc đọc sẽ chỉ trúng một đĩa (vì thật lãng phí khi đọc tệp trong hai lần trừ khi bản sao đầu tiên không sử dụng được vì một số lý do).
Bây giờ hãy nói rằng ổ đĩa btrfs thứ hai của bạn đang xuống cấp và bắt đầu hỏng dữ liệu trong hệ thống tệp của bạn. Khi bạn đọc các khối từ đĩa này, btrfs sẽ nhận thấy rằng tổng kiểm tra không khớp và sẽ khôi phục khối trong băng từ một bản sao đã biết - bản sao trên ổ đĩa đầu tiên. Nó sẽ trả lại dữ liệu cho ứng dụng gọi read()
(hoặc bất cứ điều gì) như thể không có gì xảy ra.
Nhưng nếu btrfs không quyết định đọc từ đĩa thứ hai thì sao? Hãy nhớ rằng, có hai bản sao, vì vậy nó có thể đọc từ đĩa thứ nhất hoặc đĩa thứ hai. Nếu nó đọc từ đĩa đầu tiên, nó sẽ không nhận thấy bất cứ điều gì sai. Lần duy nhất nó sẽ nhận thấy bất cứ điều gì sai là khi đĩa đầu tiên cũng xuống cấp. Bây giờ bạn thực sự lo lắng vì đã quá muộn để khôi phục dữ liệu - bản sao của đĩa thứ hai đã bị hỏng trong một thời gian và bản sao đầu tiên (đó là những gì bạn đã sử dụng để khôi phục đĩa thứ hai) cũng bị hỏng!
Đây là nơi btrfs scrub
đến. Nó đọc tất cả dữ liệu , không phải tất cả các tệp. Điều này bao gồm siêu dữ liệu, nhưng cũng là bản sao thứ cấp của các tệp thường không có trong đường dẫn đọc. Khi nó đọc các bản sao thứ cấp này, điều đó sẽ tạo cơ hội cho việc sửa lỗi trong băng tần của btrfs để khởi động và khôi phục dữ liệu từ một bản sao dự phòng.