BTRFS có đảm bảo tính nhất quán của dữ liệu khi mất điện không?


11

Như ZFS tuyên bố độc quyền ,ZFS được tuyên bố là bất khả xâm phạm ZFS chấp nhận rằng nó có thể dễ bị hỏng điện.

Tôi không thể tìm thấy một tuyên bố như vậy cho BTRFS. Là nó (hoặc được thiết kế / dự định) bền giữa các lần mất điện?


đọc lại lần nữa. "Nếu hồ bơi của bạn bị hỏng do lỗi phần cứng hoặc mất điện, hãy xem Sửa chữa thiệt hại toàn bộ bể chứa ZFS." (..) Cố gắng khôi phục nhóm bằng cách sử dụng zpool clear -F lệnh
Michael D.

Vì vậy, bạn nói "ZFS không đảm bảo tính nhất quán dữ liệu, nó chỉ cố gắng phục hồi"?
ceremcem

Đúng. Có một số bộ đệm để xử lý, một ổ đĩa cứng tích hợp bộ đệm, bộ đệm / bộ đệm hệ điều hành. Tại một số điểm, có một synchoặc flushghi lưu trữ vào đĩa, hoặc không trong thời gian mất điện, dữ liệu đó sẽ bị mất. ZFS có thể hoạt động hoàn hảo nếu đĩa cứng khỏe và không bị mất điện (hoặc UPS được kết nối với máy tính tắt đúng cách khi bị cúp). Những gì bạn không thể nói về FAT32 hoặc hơn.
Michael D.

2
Mất dữ liệu không phải là vấn đề đáng lo ngại vì đây là hậu quả tự nhiên khi xảy ra mất điện, nhưng, tính nhất quán của dữ liệu là mối lo ngại trong trường hợp của tôi. Một hệ thống tệp có thể mất dữ liệu trong điều kiện khắc nghiệt như vậy, nhưng không gây ra dữ liệu không nhất quán trong đĩa. Tôi cần tiện ích chụp nhanh liên tục, vì vậy tôi sẽ tiếp tục với BTRFS. NILFS2 là lựa chọn gần nhất trong trường hợp của tôi.
ceremcem

1
Tôi đã hỏi câu hỏi trên #btrfs IRC, họ nói should be ok if your hw isn't "buggy"không - "lỗi" nghĩa là gì your hw has correct flush/barrier semantics. Tôi đã đăng một liên kết đến câu hỏi này trên IRC, hy vọng ai đó sẽ dành thời gian để giải thích; nhưng bây giờ nó là nó
Hi-Angel

Câu trả lời:


5

Tôi đã hỏi câu hỏi trên #btrfs IRC, họ nói should be ok if your hw isn't "buggy"không - "lỗi" nghĩa là gì your hw has correct flush/barrier semantics.

TL; DR: Điều này có nghĩa là btrfs được bảo vệ chống tham nhũng dữ liệu do mất điện theo cách tương tự như ZFS.

Đây là lý do: Ý tưởng chung đằng sau ZFS và btrfs là tương tự nhau. Cả hai đều sử dụng cây Merkle làm cấu trúc dữ liệu . Ghi có thể yêu cầu nhiều khối trên đĩa được cập nhật. Hệ thống tệp đang xử lý việc này bằng cách ghi dữ liệu mới vào các khối trống (ngay cả khi tệp hiện có đang được sửa đổi, do đó không cần sửa đổi các khối phản ánh trạng thái cũ) và xây dựng cây cập nhật mới. Khi tất cả các công việc nặng được thực hiện và dữ liệu + cây cập nhật đã được ghi vào đĩa, con trỏ đầu được cập nhật vào cây mới để thay đổi hiển thị.

Đây là cách mọi thứ được cho là ứng xử khi ghi vào tệp:

  1. Ghi dữ liệu vào các khối miễn phí trên đĩa.
  2. Tạo một bản sao của cây Merkle *, cập nhật nó theo những thay đổi được ghi trong (1).
  3. Yêu cầu phần cứng chuyển dữ liệu vào đĩa - phần cứng ghi tất cả dữ liệu đang chờ xử lý.
  4. Cập nhật con trỏ đầu đến cây Merkle mới.
  5. Các khối cũ miễn phí không cần thiết nữa.

Nếu mất điện sau (4) giao dịch hoàn tất. Nếu mất điện trong các bước (1) đến (3), hệ thống tệp sẽ xuất hiện trạng thái cũ (dữ liệu được ghi ở bước (1) bị mất nhưng hệ thống tệp phù hợp). Lưu ý rằng không cần kiểm tra lỗi hệ thống tệp, điều đó có nghĩa là hệ thống tệp có sẵn ngay lập tức, đó là một lợi thế lớn (kiểm tra hệ thống tệp lớn có thể mất nhiều thời gian!).

Dưới đây là một ví dụ về cách mọi thứ có thể đi sai với phần cứng "lỗi":

  1. Ghi dữ liệu vào các khối miễn phí trên đĩa.
  2. Tạo một bản sao của cây Merkle *, cập nhật nó theo những thay đổi được ghi trong (1).
  3. Yêu cầu phần cứng xóa dữ liệu vào đĩa - phần cứng xác nhận hoàn thành nhưng không hoàn toàn xóa (ví dụ: dữ liệu có thể vẫn còn trong bộ đệm ghi lại của đĩa).
  4. Cập nhật con trỏ đầu đến cây Merkle mới. Dữ liệu này được ghi vào đĩa trước các dữ liệu đang chờ xử lý khác (ví dụ: do phần đầu của đĩa xảy ra ở đúng vị trí).
  5. Dữ liệu được ghi trong các bước (1) và (2) được ghi vào đĩa.
  6. Các khối cũ miễn phí không cần thiết nữa.

Hệ thống tập tin sẽ trở nên không nhất quán nếu mất điện giữa (4) và (5) hoặc trong khi thực hiện bước (5). Do đó, cây Merkle và / hoặc dữ liệu chỉ có thể được ghi một phần khiến hệ thống tệp trở nên không nhất quán.

Trong thực tế, bạn phải đặc biệt cẩn thận khi sử dụng bộ điều khiển RAID . Họ thường vô hiệu hóa bộ đệm ghi lại trên đĩa và sử dụng bộ đệm ghi lại của riêng họ để thay thế. Có hai cách phổ biến để mọi thứ đi sai ở đây:

* Tôi đang đơn giản hóa mọi thứ ở đây. Thật sự không cần thiết phải sao chép toàn bộ cây. Chỉ những phần đã thay đổi cần được thêm vào - những phần còn lại có thể được chia sẻ giữa cây cũ và cây mới .


Cảm ơn bạn cho lời giải thích tốt đẹp này. Tuy nhiên, trích dẫn cần thiết cho tất cả các khiếu nại, bao gồm cả cuộc trò chuyện IRC. Sau đó, câu trả lời của bạn sẽ được chấp nhận.
ceremcem

Về nhật ký IRC, tôi đã tham khảo bình luận của @ Hi-Angel tại đây. Có lẽ anh ta có thể cung cấp một tài liệu tham khảo? Tôi đã thêm một vài tài liệu tham khảo cho các phần khác, mặc dù.
Martin

BTRFS không sử dụng cây Merkle, nó sử dụng cây B (do đó 'B-TRee FileSystem') và các ví dụ thất bại của bạn yêu cầu các rào cản ghi không được thực hiện đúng bởi phần cứng (thực sự là một trường hợp khá bất thường ngày nay) . Nếu không, câu trả lời tốt.
Austin Hemmelgarn

Các cây được sử dụng bởi btrfs thực sự là cả hai cây B (thuộc tính này là về "hình dạng" của cây và thực tế là chúng tự cân bằng) và cây băm / Merkle (lá chứa hàm băm của một số dữ liệu, các nút chứa băm con cái của họ, do đó, mỗi thay đổi lan truyền đến tận gốc). Có thể xác minh các giá trị băm này là những gì cho phép btrfs và ZFS phát hiện dữ liệu bị hỏng (và đọc nó từ một đĩa khác nếu được sử dụng trong chế độ "phản chiếu").
Martin
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.