Làm thế nào để btrfs chà làm việc và nó làm gì?


19

Chính xác thì btrfs chà làm gì? Theo trang hướng dẫn, hoàn toàn không rõ ràng, nó thực hiện một số kiểm tra lỗi. Những loại kiểm tra lỗi? Nó đáng tin cậy như thế nào? Có thể phục hồi một số lỗi? Làm thế nào nó hoạt động? Nó hoạt động trên mọi đĩa btrfs?


3
Bối cảnh: BTRFS lưu trữ tổng kiểm tra, vì vậy, nó luôn có thể biết liệu một tệp (hoặc siêu dữ liệu) có ổn hay nếu nó bị hỏng. Hầu như tất cả các hệ thống tệp khác như ext4 không có kiểm tra, vì vậy chúng sẽ không ngăn bạn đọc một tệp bị hỏng bởi một ổ đĩa xấu (sắp chết và đã bắt đầu làm hỏng dữ liệu). Đây là một tính năng bảo vệ dữ liệu quan trọng trong BTRFS và điều này giúp cho việc cọ sát có thể xảy ra.
bản6

Câu trả lời:


23

Tôi không biết nếu nó làm bất cứ điều gì khác, nhưng tôi biết rằng tối thiểu btrfs scrubkhông có dữ liệu toàn bộ đĩa. Về cơ bản, nó đọc tất cả dữ liệu * trên đĩa, tính toán lại tổng kiểm tra của nó và so sánh tổng kiểm tra được tính toán lại với dữ liệu được lưu trữ. Khi tổng kiểm tra được lưu trữ và tính toán lại không khớp, hệ thống sẽ biết có tham nhũng.

Khi tham nhũng được phát hiện, hành vi phụ thuộc vào thiết lập đĩa của bạn. Ví dụ: nếu bạn có RAID 1 (phản chiếu), thì btrfs scrubcó thể sửa dữ liệu bị hỏng bằng cách sao chép một phiên bản chưa được sửa chữa từ một đĩa khác. Nếu tất cả các bản sao của một số dữ liệu bị hỏng (ví dụ, hư hỏng nhiều đĩa hoặc không có bản sao dự phòng ở nơi đầu tiên), thì không btrfs scrubcó gì có thể làm được ngoài việc cảnh báo bạn.

Lý do điều này rất quan trọng là các ổ đĩa cứng chỉ đáng tin cậy khoảng 99.999999999999% trong việc đọc và ghi bit. Vì vậy, cứ vài terabyte dữ liệu I / O, có khả năng xảy ra lỗi. Mặc dù các lỗi có thể được phát hiện (và đã được sửa, giả sử rằng một bản sao dự phòng vẫn còn hiệu lực) trong quá trình truy cập đĩa thông thường, việc kiểm tra toàn bộ đĩa thường xuyên có thể tìm và sửa lỗi trước khi tích lũy đủ rằng tất cả các bản sao của cùng một dữ liệu bị hỏng.

* Tôi đang sử dụng "dữ liệu" thay vì "tệp" để bao gồm siêu dữ liệu. Btrfs lưu trữ các tệp và siêu dữ liệu tương ứng (bao gồm cả tổng kiểm tra) trong các khối dữ liệu, tất cả đều được kiểm tra và kiểm tra bởi btrfs scrub.

Xem thêm:

  • Btrfs -> Cây kiểm tra và chà tại Wikipedia: Thông tin kỹ thuật về việc xóa dữ liệu của btrfs.
  • Vấn đề sinh nhật -> Bảng xác suất tại Wikipedia: Xử lý "không gian băm" là "số khối dữ liệu" và "số phần tử băm" là "số khối dữ liệu bị hỏng", điều này đưa ra xác suất có một khối dữ liệu có cả hai bản sao bị hỏng trong thiết lập RAID 1.

Tôi chưa tính, nhưng tôi sẵn sàng đoán rằng con số đáng tin cậy của bạn bị giảm đi bởi một vài bậc độ lớn. Các ổ cứng dành cho người tiêu dùng thường có tốc độ UBE là 10 ^ -14 bit. Nói cách khác, một lỗi đọc không thể phục hồi trên mỗi 10 ^ 14 bit đọc. Vấn đề là đây là cho một lĩnh vực đầy đủ; bạn có thể nhận được toàn bộ khu vực hoặc bạn chẳng nhận được gì cả (hoặc đó là ý tưởng; lỗi im lặng hoàn toàn là một tách trà khác). Vì vậy, lỗi được khuếch đại bởi kích thước cung, với các ổ đĩa Định dạng Nâng cao là 32.768 bit. Do đó, tỷ lệ lỗi thực tế giống như 10 ^ -10 đến 10 ^ -11 lỗi đọc.
một CVn

@ MichaelKjorling Tôi không nghĩ các lĩnh vực quan trọng ở đây .... Tôi có hồ sơ về 29 btrfs cuối cùng của hai ổ cứng 1TB bên trong máy tính của tôi. Lượng dữ liệu đã thay đổi trong khoảng từ 270 đến 300 GiB (với tổng số 1,35 * 10 ^ 14 đến 1,49 * 10 ^ 14 bit được đọc cho tất cả các bảng kết hợp). Đã có 3 lỗi được tìm thấy trong các lần tẩy tế bào chết này. Giả sử rằng I / O không chà không gây ra sự cố quay bit cố định, chỉ gấp 2 đến 2 lần so với tỷ lệ lỗi dự kiến ​​của các ổ đĩa "đáng tin cậy 99.999999999999%". Ngay cả với chỉ các lĩnh vực 4096 bit, tôi nghĩ rằng đối số của bạn sẽ hy vọng các ổ đĩa của tôi đã có hàng ngàn lỗi.
Mark Haferkamp

@ MichaelKjorling Cho đến nay tôi hiểu các thông số kỹ thuật của nhà sản xuất (Seagate và WD), đó là lỗi bit và không phải toàn bộ các lĩnh vực đều chết. Và số lượng số tiền trong câu trả lời thậm chí còn lạc quan: 100-1/10^14có 16 số tiền và số lượng bài chỉ có 14 (tương ứng với 10 ^ 12).
Luc

@Luc Thật tốt nếu cái chết của ngành ít phổ biến hơn; khu vực chết có nghĩa là ổ đĩa (có thể) thực sự thất bại và có thể cần thay thế. Lỗi bit chỉ dẫn đến hỏng dữ liệu im lặng, có thể gây ồn đủ để khôi phục từ bản sao lưu. Toán học lưu ý: Tính toán thực tế là 1-10^n, sau đó được chuyển đổi thành phần trăm vì con người không thích số thập phân hàng đầu. Ngoài ra, tôi đã bỏ qua đề cập trong nhận xét trước đây của mình rằng các ổ đĩa nằm trong RAID 1 (do đó có cùng dữ liệu 270-300 GiB trên mỗi ổ đĩa), giúp khắc phục một lỗi tính toán rõ ràng khác.
Mark Haferkamp

5

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.


2
Bạn có chắc chắn rằng việc đọc RAID1 chỉ được thực hiện từ 1 đĩa không? Ít nhất là với mdadm RAID, điều này không nên xảy ra. Việc đọc phải diễn ra song song từ cả hai đĩa, nhưng với dữ liệu khác nhau, có nghĩa là nó sẽ nhanh gấp đôi so với việc đọc từ một đĩa. Đọc tăng hiệu năng là một trong những tính năng chính của RAID 1.
Petr

@Petr có, bạn đã đúng. các khối riêng lẻ chỉ được đọc từ một đĩa.
strugee 15/03/2017

@Petr: Để giải thích, - trong sử dụng bình thường, cả MDADM và BTRFS đều không đọc cả hai bản sao của cùng một dữ liệu từ cả hai đĩa. Họ chỉ đọc một bản. - MDADM có thể cân bằng tải và phân phối đọc trên các bản sao để có được tốc độ đọc gấp đôi. (vì tất cả bản sao A đi vào đĩa 1 và tất cả bản sao B đi vào đĩa 2. Vì mdadm sẽ sử dụng chính xác 2 đĩa). - BTRFS có nhiều khó khăn hơn. (vì sao A và B sẽ đi vào bất cứ 2 đĩa (trong số 2 hoặc nhiều đĩa) đã xảy ra để có không gian tự do nhất vào lúc này - ví dụ: 2 bản sao sẽ được lan truyền một cách ngẫu nhiên trong số tất cả các ổ đĩa hiện tại)
DrYak

và liên quan đến bảo mật: - cả MDADM và BTRFS sẽ thử bản sao khác trong trường hợp có vấn đề. - đối với MDADM, vấn đề duy nhất mà nó có thể phát hiện là "đĩa không trả lời" (vì nó không có ý tưởng thực sự nào về các tệp được lưu trữ ở trên) - đối với BTRFS, ngoài ra nó còn có thể phát hiện hỏng dữ liệu im lặng (vì dữ liệu được kiểm tra và vì vậy Lớp RAID của BTRFS biết nếu một bản sao có thể được tin cậy hoặc nếu nó phải tìm nạp một bản sao khác)
DrYak

cuối cùng nhưng không kém phần quan trọng về RAID5 / 6: - trong MDADM, nó chỉ hoạt động . (Nhưng sẽ không phát hiện các tham nhũng im lặng) - hiện tại, trong BTRFS, tham nhũng im lặng không được xử lý (vì việc lấy một bản sao khác (trong RAID1) dễ dàng hơn thay vì thực hiện tính toán Mã hóa Erasure để đoán xem thành viên nào của sọc bị hỏng và nên được xây dựng lại từ dữ liệu / chẵn lẻ còn lại). Nói cách khác: kể từ hôm nay (tháng 8 năm 2017) không sử dụng RAID5 / 6 của btrfs.
DrYak
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.