Pertanyaan Anda sedikit membingungkan karena istilah "blok", yang merupakan kata yang sangat kelebihan ketika menyangkut disk dan sistem file. (Tapi konteks sekitar Anda membantu memperjelas.) Btrfs tidak berurusan dengan "blok" filesystem ukuran tetap, ini berhubungan dengan "luasan" berukuran variabel. (Meskipun, secara membingungkan, juga mendefinisikan zona blok ukuran variabel.) ZFS berkaitan dengan "blok" sistem file, sebagian atau terutama karena hal itu menghadirkan masalah yang jauh lebih mudah untuk dipecahkan. Btrfs dan ZFS menyadari "blok" level disk, yang merupakan abstraksi. (Kemudian kita juga memiliki "penyimpanan blok-level", yang dapat menjadi makna yang berbeda secara semantik.) Saya mungkin memiliki deskripsi sedikit off, tidak cukup jelas, atau tidak 100% akurat. (Jika Anda membutuhkan kejelasan dan akurasi 100% pada topik blok, berpura-pura tidak membaca itu. Jika Anda hanya perlu pemahaman kasar untuk melanjutkan, maka Anda harus baik untuk pergi.) Poin utama dari jawaban ini bukan untuk secara sempurna mendefinisikan "blok", tetapi diskusi di bawah ini, yang jauh lebih di ruang kemudi saya.
Seperti yang ditulis @killermist, ZFS secara asli mendukung deduplikasi blok-level [ZFS].
Ini tidak diaktifkan secara default di ZFS. Menyalakannya tanpa memori yang cukup melibatkan hit kinerja yang kuat. Selain itu, secara anekdot, ZFS membutuhkan jumlah yang adil lebih dari "RAM 1 GB per penyimpanan 1 TB" yang direkomendasikan, untuk menyesuaikan seluruh hashtable dalam RAM. Namun demikian, tergantung pada perangkat keras Anda masih bisa mendapatkan kecepatan menulis hingga 40 MB / s. Saya mengerti bahwa menjalankan teknologi era 2008 ~ drive era 2015. Dapat diterima oleh saya untuk sebagian besar data arsip. Kelemahan terbesar dari deduplikasi ZFS, adalah bahwa belum ada cara yang elegan untuk melakukannya dalam mode "batch / offline" (atau lebih tepatnya "out-of-band"), selain menyalakan dedup, menyalin semua ke direktori temp baru pada sistem file yang sama, menghapus yang asli, lalu memindahkan kembali konten temp (sekarang-deduplikasi).
Deduplikasi Btrf bisa dibilang sedikit sketsa, dengan hanya utilitas pihak ketiga saat ini tersedia untuk melakukan pekerjaan. (Tetapi yang menggunakan API kernel yang didukung dengan baik, dan / atau opsi yang didukung dengan baik untuk cp; dan dengan cara apa pun yang membutuhkan logika mereka sendiri untuk menentukan duplikat, yang satu harapan adalah akurat). Salah satu manfaat potensial, adalah utilitas tersebut adalah "out-of-band". Biaya untuk sebagian besar utilitas, adalah bahwa mereka membunuh kinerja sambil memalu - yang bisa memakan waktu berjam-jam, berhari-hari, bahkan berminggu-minggu untuk diselesaikan. (Secara pribadi saya lebih suka berurusan dengan kinerja penulisan yang selalu lebih lambat dari deduplikasi ZFS in-band, daripada memalu HDD saya selama berhari-hari, katakanlah, akhiri sekali per tahun.)
Dua solusi Btrfs saya mengetahui bahwa berurusan dengan "blok" (tetapi dalam definisi lain) daripada file, adalah lebah , dan dduper .
Lebah, misalnya, secara sewenang-wenang mendefinisikan ukuran "blok" untuk dirinya sendiri saat pertama kali dijalankan, berdasarkan memori yang tersedia dan kemungkinan faktor lainnya. (Meskipun saya mungkin salah mengartikan tujuan, fitur, mekanisme, dan pro / kontra, karena saya tidak menggunakannya, saya hanya mengevaluasinya baru-baru ini sebagai pilihan.)
Lebah bisa dibilang sedikit hybrid-ish, karena dirancang untuk berjalan terus-menerus, dan tidak memalu disk begitu keras - meskipun secara teknis masih belum "in-band" seperti dedup ZFS. Itu hanya mengambil duplikat setelah-fakta dan mencoba untuk mendupuplikasi mereka dengan sentuhan ringan. Bekerja dengan ukuran blok yang ditentukan secara sewenang-wenang berarti bahwa, dengan desain, itu akan cocok dengan hashtable dalam RAM. Kekurangannya (mungkin) adalah bahwa mungkin ada luasan dalam "blok" yang sama, tetapi Lebah mungkin tidak terpotong karena "blok" yang ada di dalamnya berbeda.
Perlu diingat bahwa bahkan utilitas yang secara khusus melakukan deduplikasi Btrf - level "file" (seperti bedup , duperemove , rmlint , dan lainnya), masih dapat memenuhi kebutuhan Anda. Saya tidak yakin, tetapi sepertinya mereka akan melakukannya. Itu karena bahkan perintah "cp --reflink = selalu" tidak benar-benar mendeduplikasi "file". Ini adalah deduplicating luasan Btrfs . Ketika "file" reflinked berubah, Btrfs hanya menghapus duplikasi luasan yang berubah, ke luasan unik mereka sendiri. Sisa file tetap deduplikasi. Begitulah file deduplicated besar masih dapat menyimpang seolah-olah file unik mereka sendiri, tetapi sebagian besar masih deduplicated.
(Ini juga mengapa begitu sulit untuk menentukan apakah sebuah "file" yang reflinked atau tidak, karena konsep yang bahkan tidak benar-benar masuk akal. Semua dari file luasan mungkin diri mereka reflinked untuk sama-luasan lainnya, sebuah konsep yang tidak masuk akal, tapi itu kebetulan pertanyaan yang sangat sulit dijawab. Itulah sebabnya, kecuali jika utilitas deduplikasi Btrf melacak apa yang telah dideduplikasi, tidak ada gunanya upaya untuk mencoba "mendeteksi" jika file telah didupuplikasi. Tidak ada atribut seperti refcount untuk diperiksa. Lebih mudah untuk hanya mendupuplikasinya lagi. Sebaliknya, menentukan apakah seluruh file di-hardlink dengan cara lama, sepele. Cukup periksa jumlah st_nlink untuk inode yang diberikan.)
Kurangnya "seluruh file klon" sebenarnya adalah fitur intrinsik dari semua sistem file CoW yang mendukung snapshot "bebas" dan / atau deduplikasi, dan benar apakah berurusan dengan ekstensi Btrfs, blok ZFS, atau yang lainnya. Itulah sebabnya salah satu dari mereka mungkin bisa menjadi jawaban untuk pertanyaan Anda. (Setidaknya ada tiga filesystem CoW lain yang dapat atau direncanakan dapat melakukan semua itu, yang saya ketahui: nilfs2, bcachefs, dan xfs.)
Meskipun Anda tidak menyebutkan ini, tidak ada teknologi deduplication untuk pengetahuan saya, filetype-aware. Dengan kata lain, tidak ada deduplicator yang tahu melompati * .jpg metadata dan hanya mempertimbangkan data gambar yang dikompres untuk deduplikasi. Demikian juga, tidak ada dari mereka yang mempertimbangkan angka ajaib file (setidaknya untuk menentukan apa yang harus dipertimbangkan untuk deduplikasi). Itu bisa menjadi fitur pembunuh - meskipun tentu saja membutuhkan pembaruan definisi yang berkelanjutan dan berkelanjutan. Dan bisa sangat sulit untuk mendesain, sementara juga memperlakukan file sebagai koleksi M: M luasan, blok, dll.