Tôi mới sử dụng BTRFS và tôi đang cố gắng hiểu tại sao BTRFS sử dụng CRC32c trong khi HDD đã có ECC toàn vẹn dữ liệu cấp ngành. Có phải vì BTRFS không chuyển tiếp trên phương tiện để có bảo vệ toàn vẹn dữ liệu? Cảm ơn bạn.
Tôi mới sử dụng BTRFS và tôi đang cố gắng hiểu tại sao BTRFS sử dụng CRC32c trong khi HDD đã có ECC toàn vẹn dữ liệu cấp ngành. Có phải vì BTRFS không chuyển tiếp trên phương tiện để có bảo vệ toàn vẹn dữ liệu? Cảm ơn bạn.
Câu trả lời:
Đĩa có thể và làm âm thầm dữ liệu tham nhũng. Xem http://storagemojo.com/2007/09/19/cerns-data-corruption-research/ để biết một ví dụ về nghiên cứu về điều này.
Tôi chỉ không mua các đối số như vậy mà các đĩa thường xuyên có các lỗi không được báo cáo và đưa nó lên FUD. Có, nếu bạn ném đủ dữ liệu ngẫu nhiên vào mã phát hiện lỗi, đôi khi nó sẽ báo cáo dữ liệu là chính xác khi không. Mặc dù vậy, đây là điều: ổ đĩa không cố đọc dữ liệu ngẫu nhiên. Đó là đọc dữ liệu chủ yếu được viết và đọc lại một cách chính xác. Điều đó sau đó chuyển qua một mã sửa lỗi có thể sửa một số bit sai. Để nhận được một lỗi không được báo cáo, bạn phải nhận được số lỗi thô cao hơn nhiều so với ECC, và sau đó chúng phải được sắp xếp hợp lý sao cho đầu ra của ECC được sắp xếp vừa phải để nó đánh lừa được EDC nghĩ rằng nó là tốt Tỷ lệ cược rất nhiềucao hơn rằng ít nhất là EDC sẽ nhận thấy lỗi và báo cáo đó là lỗi không thể sửa. Bao lâu không có xảy ra? Về cơ bản không bao giờ trừ khi một ổ đĩa đang đến gần thất bại hoặc bị mất điện đột ngột trong khi viết. Vì vậy, nếu một lỗi không thể sửa chữa hầu như không bao giờ xảy ra, và một lỗi không được báo cáo là có khả năng ít hơn một triệu lần, thì điều đó nói gì với bạn?
Mặt khác, nếu bạn đang lưu trữ một bản sao dữ liệu trùng lặp, thì có lẽ có một cách nào đó để biết cái nào đúng trong trường hợp rất khó xảy ra khi một bản sao bị hỏng âm thầm. Ngoài ra, crc rất hữu ích để phát hiện các khối xảy ra có chứa các bản sao trùng lặp của cùng một dữ liệu, do đó chúng có thể bị trùng lặp, đây là một tính năng thiết kế khác của btrfs.
btrfs
là một hệ thống tập tin thế hệ tiếp theo - nó bao gồm nhiều mục đích giống như các mô hình phân lớp trong quá khứ được xử lý giữa chúng. btrfs
cũng là một ngăn xếp rộng rãi có thể định dạng được - faq khuyên nó nên được ghi ra một đĩa không phân chia * [s] * và rằng tất cả phân vùng, hạn ngạch, nén, hình ảnh, tước, sao chép, ghi, và có thể 10 điều khác Tôi quên mất việc bị xử lý như là phẩm chất của hệ thống riêng. Nó có thể làm tất cả những điều này và nhiều hơn nữa.
btrfs
mảng đĩa là động - chúng có thể được thêm vào và xóa khỏi hệ thống trực tiếp mà không gặp sự cố. Điều này hoạt động vì chỉ btrfs
tách ra các nhóm khối lưu trữ khi nó muốn chúng - và chúng có thể nằm trên bất kỳ thiết bị cụ thể nào trong mảng hiện tại của nó. Câu hỏi thường gặp có một số điều để nói về điều này - đặc biệt là khi nó nói về sự không đáng tin cậy của các ước tính không gian trống:
Ví dụ: nếu bạn có một subvolume là "đơn" và một là RAID-1, thì subvolume đầu tiên sẽ tiêu thụ bộ nhớ thô với tốc độ một byte cho mỗi byte dữ liệu được ghi. Subvolume thứ hai sẽ lấy hai byte dữ liệu thô cho mỗi byte dữ liệu được ghi. Vì vậy, nếu chúng ta có sẵn 30GiB dung lượng thô, chúng ta có thể lưu trữ 30GiB dữ liệu trên subvolume đầu tiên hoặc 15GiB dữ liệu trên giây và không có cách nào biết được đó sẽ là gì cho đến khi người dùng ghi dữ liệu đó.
Vì vậy, nói chung, không thể đưa ra ước tính chính xác về dung lượng trống trên bất kỳ hệ thống tập tin btrfs nào. Vâng, điều này hút . Nếu bạn có một ý tưởng thực sự tốt về cách làm cho nó đơn giản để người dùng hiểu được họ còn bao nhiêu dung lượng, xin vui lòng cho chúng tôi biết, nhưng cũng xin lưu ý rằng những bộ óc tốt nhất trong phát triển btrfs đã nghĩ về vấn đề này trong ít nhất một vài năm và chúng tôi chưa tìm thấy một giải pháp đơn giản nào.
Đọc phần có liên quan sẽ cung cấp cho bạn các ví dụ cụ thể hơn, nhưng nó cho thấy rất rõ rằng btrfs
các thiết bị có thể thay đổi về số lượng, sự thay đổi liên tục, bị chặn và bị tách rời hoặc cùng nhau và ... tốt, nó tiếp tục. Một trích dẫn khác từ FAQ:
Quản lý thiết bị là một chủ đề phức tạp và có nhiều ý kiến khác nhau về cách tốt nhất để làm điều đó. Trong nội bộ, mã Btrfs tách ra các thành phần liên quan đến quản lý thiết bị và duy trì các lớp riêng cho chúng. Phần lớn siêu dữ liệu hệ thống tập tin không biết có nhiều thiết bị liên quan.
Nó nói điều này về RAID:
btrfs hỗ trợ RAID-0, RAID-1 và RAID-10. Kể từ Linux 3.9, btrfs cũng hỗ trợ RAID-5 và RAID-6 mặc dù mã đó vẫn đang thử nghiệm.
btrfs kết hợp tất cả các thiết bị vào một nhóm lưu trữ trước, sau đó sao chép các khối khi dữ liệu tệp được tạo. RAID-1 hiện được định nghĩa là "2 bản sao của tất cả dữ liệu trên các thiết bị khác nhau". Điều này khác với MD-RAID và sợ, ở chỗ chúng tạo ra chính xác n bản sao cho n thiết bị. Trong một btrfs RAID-1 trên ba thiết bị 1 TB, chúng tôi nhận được 1,5 TB dữ liệu có thể sử dụng. Vì mỗi khối chỉ được sao chép vào 2 thiết bị, nên việc viết một khối nhất định chỉ yêu cầu chính xác 2 thiết bị được ghi vào; đọc chỉ có thể được thực hiện từ một.
Phục hồi dữ liệu:
Ưu điểm của btrfs-raid 5/6 là không giống như MD-RAID, btrfs biết những khối nào thực sự được sử dụng bởi dữ liệu / siêu dữ liệu và có thể sử dụng thông tin đó trong tình huống xây dựng lại / khôi phục để chỉ đồng bộ hóa / xây dựng lại các khối thực sự được sử dụng trên một bổ sung lại hoặc thay thế thiết bị, bỏ qua các khối hoàn toàn không được sử dụng / trống ở vị trí đầu tiên.
MD-RAID không thể làm điều đó, bởi vì nó cố gắng trở thành lớp bất khả tri của hệ thống tập tin mà không biết và không quan tâm khối nào trên các lớp bên trên nó thực sự được sử dụng hoặc trống. Để nó cố gắng theo dõi đó sẽ là một vi phạm phân lớp và sẽ làm phức tạp nghiêm trọng mã và / hoặc giới hạn sử dụng đối với chỉ các hệ thống tệp hoặc các lớp khác ở trên mà nó hỗ trợ / hiểu / có thể theo dõi chính xác.
Tất nhiên, btrfs
được thiết kế từ mặt đất lên đến các lớp siêu việt . Để làm được điều này, nó phải duy trì một tổng kiểm tra, có thể xây dựng lại và hy vọng ít nhất là một cây dư thừa bao gồm tất cả các thiết bị hiện được kết hợp của nó. btrfs
theo nhiều cách là một cơ sở dữ liệu tệp cũng như hệ thống tệp. Nó không dựa trên nền tảng thiết bị cho ecc bởi vì, phần lớn, nó không xem xét rằng có những thiết bị cơ bản. Bạn có thể nghĩ về nó như một đĩa kudzu, có thể.
Trong mọi trường hợp, chính xác là việc kiểm tra siêu dữ liệu và quản lý siêu dữ liệu liên tục cho phép btrfs
thực hiện rất nhiều điều thú vị mà nó làm và thực hiện mà không cần quan tâm nhiều đến phần cứng cơ bản của nó.
Có, nó không tin tưởng thiết bị báo cáo lỗi hoặc lưu trữ dữ liệu chính xác ở vị trí đầu tiên. Cho dù điều này là thực sự cần thiết là một câu hỏi hoàn toàn khác. Thông thường, đó không phải là điều mà bất cứ ai lo lắng, và mọi thứ chỉ hoạt động.
Nếu bạn có một đĩa không báo cáo lỗi, dù sao bạn cũng gặp vấn đề lớn; không chỉ các hệ thống tập tin dựa vào báo cáo lỗi như vậy mà còn các thành phần khác như bộ điều khiển RAID, v.v.; lưu trữ không đáng tin cậy khiến toàn bộ dữ liệu của bạn gặp rủi ro, không chỉ một vài bit.
Bất kể hệ thống tập tin của bạn có kiểm tra lỗi hay không, bạn nên luôn luôn chạy các bài kiểm tra của riêng mình trên bộ lưu trữ; chẳng hạn như các lựa chọn thông minh SMART hoặc trong trường hợp RAID, hãy kiểm tra sự không phù hợp trong dữ liệu chẵn lẻ ( /sys/block/mdX/md/mismatch_cnt
= 0 sau khi chạy kiểm tra sync_action).