Câu hỏi của bạn hơi khó hiểu do thuật ngữ "khối", đây là một từ rất quá tải khi nói đến đĩa và hệ thống tập tin. (Nhưng bối cảnh xung quanh của bạn sẽ giúp làm rõ.) Btrfs không xử lý các "khối" hệ thống tệp có kích thước cố định, nó xử lý các "phạm vi" có kích thước thay đổi. (Mặc dù, thật khó hiểu, cũng xác định các vùng khối có kích thước thay đổi.) ZFS xử lý các "khối" hệ thống tệp, một phần hoặc chủ yếu vì làm như vậy đưa ra các vấn đề dễ giải quyết hơn đáng kể. Cả Btrfs và ZFS đều biết về các "khối" cấp đĩa, bản thân chúng là trừu tượng hóa. (Sau đó, chúng tôi cũng có "lưu trữ cấp khối", có thể có ý nghĩa khác nhau về mặt ngữ nghĩa.) Tôi có thể có những mô tả đó một chút, không đủ rõ ràng, hoặc không chính xác 100%. (Nếu bạn cần sự rõ ràng và chính xác 100% về chủ đề của các khối, giả vờ như bạn không đọc nó Nếu bạn chỉ cần một sự hiểu biết sơ bộ để tiếp tục, thì bạn nên đi thật tốt.) Điểm chính của câu trả lời này không phải là xác định hoàn hảo "khối", mà là cuộc thảo luận dưới đây, nhiều hơn trong nhà xe của tôi.
Như @killermist đã viết, ZFS thực sự hỗ trợ sao chép cấp khối [ZFS].
Nó không được bật theo mặc định trong ZFS. Bật nó lên mà không có đủ bộ nhớ liên quan đến một hiệu suất mạnh mẽ. Ngoài ra, theo giai thoại, ZFS cần một số tiền khá lớn hơn so với quy tắc sử dụng "RAM 1gb cho mỗi bộ nhớ 1tb", để phù hợp với toàn bộ hashtable trong RAM. Nhưng ngay cả như vậy, tùy thuộc vào phần cứng, bạn vẫn có thể đạt tốc độ ghi lên tới 40 MB / s. Tôi hiểu điều đó trên công nghệ kỷ nguyên 2008 chạy ~ ổ đĩa thời đại 2015. Hoàn toàn chấp nhận với tôi đối với hầu hết các dữ liệu lưu trữ. Hạn chế lớn nhất đối với sự trùng lặp của ZFS, là chưa có cách nào hay để thực hiện điều đó trong chế độ "bó / ngoại tuyến" (hay chính xác hơn là "ngoài băng"), ngoài việc bật tính năng trích xuất, sao chép mọi thứ sang một thư mục tạm thời mới trên cùng một hệ thống tệp, xóa bản gốc, sau đó di chuyển nội dung tạm thời (hiện đã bị trùng lặp) trở lại.
Sự trùng lặp Btrfs được cho là sơ sài hơn một chút, chỉ có các tiện ích của bên thứ ba hiện có sẵn để thực hiện công việc. (Nhưng sử dụng API hạt nhân được hỗ trợ tốt và / hoặc tùy chọn được hỗ trợ tốt cho cp; và bằng cách nào đó yêu cầu logic riêng của họ để xác định trùng lặp, điều mà người ta hy vọng là chính xác.) là "ngoài băng". Tuy nhiên, chi phí cho hầu hết các tiện ích là chúng giết chết hiệu năng trong khi bỏ đi - có thể mất hàng giờ, hàng ngày, thậm chí hàng tuần để hoàn thành. (Cá nhân tôi muốn giải quyết vấn đề sao chép ZFS trong băng tần chậm hơn so với việc sử dụng ổ cứng của tôi trong nhiều ngày, giả sử, kết thúc mỗi năm một lần.)
Hai giải pháp Btrfs tôi biết về việc xử lý "khối" (nhưng theo định nghĩa khác) chứ không phải là tệp, là ong và dduper .
Ong, ví dụ, tự ý định nghĩa kích thước "khối" cho lần chạy đầu tiên, dựa trên bộ nhớ khả dụng và có thể các yếu tố khác. (Mặc dù tôi có thể trình bày sai mục đích, tính năng, cơ chế và ưu / nhược điểm của nó, vì tôi không sử dụng nó, tôi chỉ đánh giá nó gần đây là một tùy chọn.)
Ong được cho là hơi lai-ish, vì nó được thiết kế để chạy liên tục và không đập các đĩa quá mạnh - mặc dù về mặt kỹ thuật vẫn không "trong băng" như suy luận ZFS. Nó chỉ đơn giản là chọn ra các bản sao sau thực tế và cố gắng sao chép chúng bằng một cú chạm nhẹ. Làm việc với kích thước khối được xác định tùy ý có nghĩa là, theo thiết kế, nó sẽ phù hợp với hàm băm trong RAM. Hạn chế (có lẽ là) có thể có các phạm vi trong một "khối" giống nhau, nhưng Ong không thể khấu trừ vì "các khối" chúng ở khác nhau.
Hãy nhớ rằng ngay cả các tiện ích thực hiện cụ thể "sao chép " -level Btrfs trùng lặp (như bedup , duperemove , rmlint , và các dịch vụ khác), vẫn có thể đáp ứng yêu cầu của bạn. Tôi không thể chắc chắn, nhưng có vẻ như họ sẽ làm thế. Đó là bởi vì ngay cả một lệnh "cp --reflink = always" cũng không thực sự trùng lặp "tập tin". Nó được deduplicating btrfs mức độ . Khi một "tập tin" bị phản xạ thay đổi, Btrfs chỉ không lặp lại các mức độ thay đổi, thành các phạm vi duy nhất của riêng họ. Phần còn lại của tập tin vẫn bị trùng lặp. Đó là cách các tệp bị trùng lặp lớn vẫn có thể phân kỳ như thể các tệp duy nhất của riêng chúng, nhưng chủ yếu vẫn bị trùng lặp.
(Đây cũng là lý do tại sao nó rất khó để xác định xem một "tập tin" được reflinked hay không, bởi vì khái niệm mà thậm chí không thực sự có ý nghĩa. Tất cả các của một tập tin mức độ bản thân có thể được reflinked đến cùng mức độ khác, một khái niệm mà không có ý nghĩa, nhưng đó là một câu hỏi đặc biệt khó trả lời. Đó là lý do tại sao, trừ khi tiện ích sao chép Btrfs theo dõi những gì nó đã bị trùng lặp, không đáng để cố gắng "phát hiện" nếu một tệp đã bị sao chép. Không có thuộc tính nào giống như kiểm tra để kiểm tra. Dù sao đi nữa, việc lặp lại nó sẽ dễ dàng hơn. Ngược lại, xác định xem toàn bộ tệp có được liên kết theo cách cũ hay không, chỉ là kiểm tra số lượng st_nlink cho một inode đã cho.)
Việc thiếu "toàn bộ bản sao tệp" trên thực tế là một tính năng nội tại của tất cả các hệ thống tệp CoW hỗ trợ ảnh chụp nhanh "miễn phí" và / hoặc sao chép, và đúng cho dù là xử lý các phạm vi Btrfs, khối ZFS hay thứ gì khác. Đó là lý do tại sao một trong hai có thể là một câu trả lời cho câu hỏi của bạn. (Có ít nhất ba hệ thống tệp CoW khác có thể hoặc được lên kế hoạch để có thể thực hiện tất cả những điều mà tôi biết: nilfs2, bcachefs và xfs.)
Mặc dù bạn không đề cập đến vấn đề này, nhưng không có công nghệ chống trùng lặp theo hiểu biết của tôi, là nhận thức rõ ràng. Nói cách khác, không có trình sao chép nào biết bỏ qua siêu dữ liệu * .jpg và chỉ xem xét dữ liệu hình ảnh nén để sao chép. Tương tự như vậy, không ai trong số họ xem xét các số ma thuật tập tin (ít nhất là để xác định những gì cần xem xét cho sự trùng lặp). Đó có thể là một tính năng sát thủ - mặc dù chắc chắn yêu cầu cập nhật định nghĩa liên tục, liên tục. Và có thể rất khó để thiết kế, đồng thời coi các tệp là một bộ sưu tập M: M trừu tượng gồm các phạm vi, khối, v.v.