Deduplikasi pada tingkat partisi

8

Apa solusi yang tersedia untuk deduplikasi level level atau lebih detail?

Ada yang berbasis file - dengan pendekatan "Copy-On-Write".

Saya mencari level blok "copy-on-write", jadi saya bisa mencari blok umum secara berkala, atau - lebih disukai - bagian dari file, menggabungkannya dan menandai cara penggunaan Kontrak Karya. Apakah ada yang seperti ini tersedia, atau masih perlu dibuat? Saya tidak yakin apakah deduplikasi Btrfs adalah level blok / file / subpart? Ada LessFS, tetapi saya tidak yakin tingkat deduplikasi apa yang diberikannya? Mungkin solusi lain?

Grzegorz Wierzowiecki
sumber
Saya tidak mengerti mengapa pertanyaan ini dipilih. Googling untuk "linux deduplication" menghasilkan daftar sistem file dan produk yang tidak perlu kita duplikasi di sini.
Kyle Jones
Googling semacam itu mengembalikan banyak solusi yang bekerja pada level file. Apa tujuan dari pertanyaan ini adalah, saran mana yang cocok dengan tujuan saya - lebih disukai untuk memungkinkan untuk menduplikasi dua bagian file, tidak perlu disesuaikan untuk memblokir level. Jika solusi seperti itu tidak tersedia, maka level blok. Hal lain adalah banyak hal yang membuat kesan eksperimental - Saya mengandalkan pengalaman pengguna lain untuk memberi saran beberapa solusi matang.
Grzegorz Wierzowiecki
1
@GrzegorzWierzowiecki tidak yakin itu cocok dengan tagihan, tetapi periksa cyphertite, secara formal lambang: peereboom.us/epitome cyphertite.com
gabe.

Jawaban:

3

Ketika deduplication level blok berjalan, saya pikir ZFS adalah implementasi terbaik yang tidak terbantahkan saat ini. Ini benar-benar tidak dirancang untuk optimasi setelah fakta, karena deduplikasinya (jika dihidupkan) dibangun langsung ke fungsi baca / tulis. Karena itu, ini bisa menjadi sedikit memori mahal di bawah beban, dalam mencoba untuk menjaga bagian yang paling relevan dari tabel deduplikasi dalam memori, tetapi ZFS pandai membatasi diri untuk mengkonsumsi tidak lebih dari 50% memori, yang tergantung pada jumlah memori yang dipasang, bisa tampak sangat sewenang-wenang (50% dari 2Gb vs 50% dari 64Gb, terutama jika beberapa-jika-ada tugas pengguna yang membutuhkan memori).

Bergantung pada tujuan Anda menggunakannya, Anda memiliki beberapa opsi:

OpenIndiana tampaknya memiliki beberapa opsi Desktop dan Server yang baik, berdasarkan Solaris

FreeBSD (sejak 9.0) memiliki versi ZFS yang cukup canggih (yang mencakup deduplikasi) bawaannya. Salah satu distribusi turunan FreeBSD (kemudian MonoWall) yang terkenal adalah NAS4Free , yang membuat pembuatan NAS menjadi sangat mudah.

Linux memiliki beberapa opsi, beberapa dengan dedup, yang lain tanpa. Karena Anda mencari dedup, yang paling terkenal yang saya lihat adalah zfsonlinux . Saya tidak yakin apa kemajuan mereka, atau seberapa stabil proyek mereka, tetapi jelas terlihat menjanjikan.

Mengenai apa pun dengan deduplikasi blok parsial, saya telah melihat TIDAK ADA sejauh ini yang melaporkan kemampuan untuk melakukan itu.

pembunuh kulit
sumber
0

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.

Jim
sumber
Untuk memperluas jawaban lama ini, rmlint sekarang adalah pengurang btrf yang tidak terbantahkan, setidaknya saat ini. 1) Ia memang pintar membandingkan, untuk menghindari hashing duplikat kandidat yang tidak perlu kecuali ia telah kehabisan opsi lain; 2) Cabang berkembang [dan saya percaya master] mendukung hashing tambahan, dan 3) deduksi tambahan. Dua yang terakhir adalah fitur yang sangat besar. Tidak ada deduper lain yang menyediakan ketiga fitur, yang secara harfiah dapat memotong hari berjalan berikutnya.
Jim
rmlinthanya menganggap file yang identik sebagai kandidat untuk deduplikasi , mengabaikan file dengan hanya rentang duplikat parsial.
Tom Hale
@ tom-hale Saya tidak mengerti maksud Anda?
Jim